Author: ��������
Miscellaneous
Implements a curve of type %1It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
AKF_v1
//+------------------------------------------------------------------+
//|                                                          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[];
datetime CountedBar=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   ArrayResize(AKF,History+1);
   ArrayResize(X,History+1);
   ArrayResize(Y,History+1);
   ArrayResize(Mu,History+1);
//--------------------------------------------------------------------
   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()
  {
   int i,m;
   int counted_bars=IndicatorCounted();
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   int limit=Bars-counted_bars;
   if(counted_bars==0) limit--;

   if(counted_bars<History+1) return(0);
//----
   if(Time[0]==CountedBar) { return(0);}
   CountedBar = Time[0];

   if(Bars<History)
     {
      Alert(": Íåäîñòàòî÷íî áàðîâ íà ãðàôèêå");
      return(0);
     }
// íåîáõîäèìî ðàñ÷èòàòü ìàññèâ ìþ - ñîäåðæèò çíà÷åíèÿ ëèí. ðåãðåñèè 
// ôîðìèðóåì ìàññèâû X è Y
   for(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(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;
   int i;
   for(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 supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---