Miscellaneous
0
Views
0
Downloads
0
Favorites
AKF
//+------------------------------------------------------------------+
//| AKF.mq4 |
//+------------------------------------------------------------------+
#property copyright "Ïðèâàëîâ"
#property link "Skype privalov-sv"
#property indicator_separate_window // Èíäèê. ðèñóåòñÿ â îñíîâíîì îêíå
#property indicator_minimum -1.0 // Ãðàíèöû îêíà
#property indicator_maximum 1.0
#property indicator_level1 0.0 // ëèíèÿ íóëÿ
#property indicator_buffers 1 // Êîëè÷åñòâî áóôåðîâ
#property indicator_color1 Red // Öâåò ëèíèè
extern int History = 1440;
extern bool WriteToFile = true;
double AKF[]; // Îòêðûòèå èíäèêàòîðíûõ ìàññèâîâ
double X[],Y[],Mu[];
int CountedBar = 0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
ArrayResize(AKF,History);
ArrayResize( X,History);
ArrayResize( Y,History);
ArrayResize( Mu,History);
//--------------------------------------------------------------------
IndicatorDigits(8);
SetIndexBuffer(0,AKF); // Íàçíà÷åíèå ìàññèâà áóôåðó
SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,1);// Ñòèëü ëèíèè
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//----
if ( Time[0] <= CountedBar ) { return(0);}
CountedBar = Time[0];
if (Bars < History)
{
Alert(": Íåäîñòàòî÷íî áàðîâ íà ãðàôèêå");
return(0);
}
// íåîáõîäèìî ðàñ÷èòàòü ìàññèâ ìþ - ñîäåðæèò çíà÷åíèÿ ëèí. ðåãðåñèè
// ôîðìèðóåì ìàññèâû X è Y
for ( int i = 0; i <= History; i ++ )
{
X[i]=Time[i]-Time[History];
Y[i]=Close[i];
}
double A = 0, B = 0; // îáíóëÿþ êîýôôèöèåíòû ëèí. ðåãðåñcèè
double SKO = 0.0, AKF_norm = 0.0;
LinearRegr(X, Y, History, A, B);
for ( i = 0; i <= History; i ++ )
{
Mu[i]=A*X[i]+B;
SKO += MathPow( Y[i] - Mu[i], 2 );
}
SKO /= History;
Print(" A =", DoubleToStr( A, 8 ), " B =", DoubleToStr( B, 8 ));
//-------------------------------------------------------------------------------------------
// Ðàñ÷¸ò ÀÊÔ
for ( int m = 0; m <= History; m ++ )
{
double summ = 0.0;
for ( i = 0; i <= History; i ++ )
{
if ( i+m > History ) continue;
summ += ( Y[i] - Mu[i] ) * ( Y[i+m] - Mu[i+m] );
}
AKF[m] = 1/SKO*summ;
}
// 5. Íîðìèðîâêà
// Ïîëó÷åííûé ìàññèâ AKFm ïðîñòî äåëèì íà çíà÷åíèå, êîòîðîå íàõîäèòüñÿ â 0 ÿ÷åéêå
for ( m = History; m >= 0; m -- ) AKF[m] /= AKF[0];
return(0);
}
//+------------------------------------------------------------------+
//| Ðàññ÷åò êîýôôèöèåíòîâ A è B â óðàâíåíèè |
//| y(x)=A*x+B |
//| èñïîëüçóþòüñÿ ôîðìóëû http://forum.mql4.com/ru/10780/page5 |
//+------------------------------------------------------------------+
void LinearRegr(double X[], double Y[], int N, double& A, double& B)
{
double mo_X = 0.0, mo_Y = 0.0, var_0 = 0.0, var_1 = 0.0;
for ( int i = 0; i < N; i ++ )
{
mo_X +=X[i];
mo_Y +=Y[i];
}
mo_X /=N;
mo_Y /=N;
for ( i = 0; i < N; i ++ )
{
var_0 +=(X[i]-mo_X)*(Y[i]-mo_Y);
var_1 +=(X[i]-mo_X)*(X[i]-mo_X);
}
A = var_0 / var_1;
B = mo_Y - A * mo_X;
}
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---