Author: Copyright � 2004, by GOODMAN & Mstera � AF
Price Data Components
0 Views
0 Downloads
0 Favorites
amka_v2
//+------------------------------------------------------------------+
//|                                                         AMkA.mq5 |
//|              MQL4 Code:  Copyright © 2004, GOODMAN & Mstera è AF |
//|              MQL5 Code:     Copyright © 2010,   Nikolay Kositsin | 
//|                              Khabarovsk,   farria@mail.redcom.ru | 
//+------------------------------------------------------------------+
//---- àâòîðñòâî èíäèêàòîðà
#property copyright "Copyright © 2004, by GOODMAN & Mstera è AF"
//---- ññûëêà íà ñàéò àâòîðà
#property link      "http://forum.viac.ru/viewforum.php?f=7"
//---- íîìåð âåðñèè èíäèêàòîðà
#property version   "1.00"
//---- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå
#property indicator_chart_window 
//---- äëÿ ðàñ÷¸òà è îòðèñîâêè èíäèêàòîðà èñïîëüçîâàíî òðè áóôåðà
#property indicator_buffers 3
//---- èñïîëüçîâàíî òðè ãðàôè÷åñêèõ ïîñòðîåíèÿ
#property indicator_plots   3
//+----------------------------------------------+
//|  Ïàðàìåòðû îòðèñîâêè ëèíèè AMA               |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 1 â âèäå ëèíèè
#property indicator_type1   DRAW_LINE
//---- â êà÷åñòâå öâåòà áû÷åé ëèíèè èíäèêàòîðà èñïîëüçîâàí ñèíå-ôèîëåòîâûé öâåò
#property indicator_color1  clrBlueViolet
//---- ëèíèÿ èíäèêàòîðà 1 - íåïðåðûâíàÿ êðèâàÿ
#property indicator_style1  STYLE_SOLID
//---- òîëùèíà ëèíèè èíäèêàòîðà 1 ðàâíà 3
#property indicator_width1  3
//---- îòîáðàæåíèå áû÷åé ìåòêè èíäèêàòîðà
#property indicator_label1  "AMA"
//+----------------------------------------------+
//|  Ïàðàìåòðû îòðèñîâêè ìåäâåæüåãî èíäèêàòîðà   |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 2 â âèäå ñèìâîëà
#property indicator_type2   DRAW_ARROW
//---- â êà÷åñòâå öâåòà ìåäâåæüåãî èíäèêàòîðà èñïîëüçîâàí êðàñíûé öâåò
#property indicator_color2  clrRed
//---- òîëùèíà ëèíèè èíäèêàòîðà 2 ðàâíà 2
#property indicator_width2  2
//---- îòîáðàæåíèå ìåäâåæüåé ìåòêè èíäèêàòîðà
#property indicator_label2  "Dn_Signal"
//+----------------------------------------------+
//|  Ïàðàìåòðû îòðèñîâêè áû÷üãî èíäèêàòîðà       |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 3 â âèäå ñèìâîëà
#property indicator_type3   DRAW_ARROW
//---- â êà÷åñòâå öâåòà áû÷üåãî èíäèêàòîðà èñïîëüçîâàí çåë¸íûé öâåò
#property indicator_color3  clrLime
//---- òîëùèíà ëèíèè èíäèêàòîðà 3 ðàâíà 2
#property indicator_width3  2
//---- îòîáðàæåíèå áû÷åé ìåòêè èíäèêàòîðà
#property indicator_label3  "Up_Signal"
//+----------------------------------------------+
//| Âõîäíûå ïàðàìåòðû èíäèêàòîðà                 |
//+----------------------------------------------+
input int ama_period=9; // ïåðèîä AMA
input int fast_ma_period=2; // ïåðèîä áûñòðîé ñêîëüçÿùåé
input int slow_ma_period=30; // ïåðèîä ìåäëåííîé ñêîëüçÿùåé
input double G=2.0; // ñòåïåíü, â êîòîðóþ âîçâîäèòñÿ ñãëàæèâàþùàÿ êîíñòàíòà
input int AMAShift = 0; // ñäâèã èíäèêàòîðà ïî ãîðèçîíòàëè â áàðàõ 
input double dK = 1.0;  //êîýôôèöèåíò äëÿ ôèëüòðà
//+----------------------------------------------+
//---- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå áóäóò â 
// äàëüíåéøåì èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double AMABuffer[];
double BearsBuffer[];
double BullsBuffer[];
//---- îáúÿâëåíèå ïåðåìåííûõ ñ ïëàâàþùåé òî÷êîé äëÿ êîíñòàíò
double dSC,slowSC,fastSC; int AMA_Handle,dAMA_Handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+ 
void OnInit()
  {
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà AMABuffer â èíäèêàòîðíûé áóôåð
   SetIndexBuffer(0,AMABuffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 1 ïî ãîðèçîíòàëè íà ama_shift
   PlotIndexSetInteger(0,PLOT_SHIFT,AMAShift);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷¸òà îòðèñîâêè èíäèêàòîðà 1 íà 1
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,ama_period+1);
//---- ñîçäàíèå ìåòêè äëÿ îòîáðàæåíèÿ â DataWindow
   PlotIndexSetString(0,PLOT_LABEL,"AMA");
//---- çàïðåò íà îòðèñîâêó èíäèêàòîðîì ïóñòûõ çíà÷åíèé
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);

//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà BearsBuffer â èíäèêàòîðíûé áóôåð
   SetIndexBuffer(1,BearsBuffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 2 ïî ãîðèçîíòàëè íà ama_shift
   PlotIndexSetInteger(1,PLOT_SHIFT,AMAShift);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷¸òà îòðèñîâêè èíäèêàòîðà 2 íà ama_period + 2
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,ama_period+2);
//---- ñîçäàíèå ìåòêè äëÿ îòîáðàæåíèÿ â DataWindow
   PlotIndexSetString(1,PLOT_LABEL,"DnSignal");
//---- âûáîð ñèìâîëà äëÿ îòðèñîâêè
   PlotIndexSetInteger(1,PLOT_ARROW,159);
//---- çàïðåò íà îòðèñîâêó èíäèêàòîðîì ïóñòûõ çíà÷åíèé
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);

//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà BullsBuffer â èíäèêàòîðíûé áóôåð
   SetIndexBuffer(2,BullsBuffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 3 ïî ãîðèçîíòàëè íà ama_shift
   PlotIndexSetInteger(2,PLOT_SHIFT,AMAShift);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷¸òà îòðèñîâêè èíäèêàòîðà 3 íà ama_period + 2
   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,ama_period+2);
//---- ñîçäàíèå ìåòêè äëÿ îòîáðàæåíèÿ â DataWindow
   PlotIndexSetString(2,PLOT_LABEL,"UpSignal");
//---- âûáîð ñèìâîëà äëÿ îòðèñîâêè
   PlotIndexSetInteger(2,PLOT_ARROW,159);
//---- çàïðåò íà îòðèñîâêó èíäèêàòîðîì ïóñòûõ çíà÷åíèé
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0.0);

//---- èíèöèàëèçàöèè ïåðåìåííîé äëÿ êîðîòêîãî èìåíè èíäèêàòîðà
   string shortname;
   StringConcatenate(shortname,
                     "AMkA( ",ama_period,", ",fast_ma_period,", ",slow_ma_period," )");
//---- ñîçäàíèå èìåíè äëÿ îòîáðàæåíèÿ â îòäåëüíîì ïîäîêíå è âî âñïëûâàþùåé ïîäñêàçêå
   IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//---- îïðåäåëåíèå òî÷íîñòè îòîáðàæåíèÿ çíà÷åíèé èíäèêàòîðà
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1);

//---- èíèöèàëèçàöèÿ êîíñòàíò 
   slowSC = (2.0 / (slow_ma_period + 1));
   fastSC = (2.0 / (fast_ma_period + 1));
   dSC=fastSC-slowSC;
//----
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(
                const int rates_total,    // êîëè÷åñòâî èñòîðèè â áàðàõ íà òåêóùåì òèêå
                const int prev_calculated,// êîëè÷åñòâî èñòîðèè â áàðàõ íà ïðåäûäóùåì òèêå
                const int begin,          // íîìåð íà÷àëà äîñòîâåðíîãî îòñ÷¸òà áàðîâ
                const double &price[]     // öåíîâîé ìàññèâ äëÿ ðàñ÷¸òà èíäèêàòîðà
                )
  {
//---- ïðîâåðêà êîëè÷åñòâà áàðîâ íà äîñòàòî÷íîñòü äëÿ ðàñ÷¸òà
   if(rates_total<2*ama_period+2+begin) return(0);

//---- îáúÿâëåíèÿ ëîêàëüíûõ ïåðåìåííûõ 
   int first,bar,iii;
   double noise,AMA,signal,ER,ERSC,SSC,price0,price1;
   double Sum,SMAdif,StDev,BULLS,BEARS,Filter;
   static double dAMA[],dama;

//---- ðàñ÷¸ò ñòàðòîâîãî íîìåðà first äëÿ öèêëà ïåðåñ÷¸òà áàðîâ
   if(prev_calculated>rates_total || prev_calculated<=0) // ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷¸òà èíäèêàòîðà
     {
      first=ama_period+2+begin; // ñòàðòîâûé íîìåð äëÿ ðàñ÷¸òà âñåõ áàðîâ
      AMA=price[first-1];
      if(ArrayResize(dAMA,ama_period)!=ama_period) return(0);

      //---- óâåëè÷èì ïîçèöèþ íà÷àëà äàííûõ íà begin áàðîâ, âñëåäñòâèå ðàñ÷åòîâ íà äàííûõ äðóãîãî èíäèêàòîðà
      if(begin>0)
        {
         PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,ama_period+begin);
         PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,2*ama_period+begin+2);
         PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,2*ama_period+begin+2);
        }
     }
   else
     {
      first=prev_calculated-1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷¸òà íîâûõ áàðîâ
      AMA=AMABuffer[first-1];
     }

//---- îñíîâíîé öèêë ðàñ÷¸òà èíäèêàòîðà AMA
   for(bar=first; bar<rates_total; bar++)
     {
      //---- 
      noise=Point()/10000;
      for(iii=0; iii<ama_period; iii++)
        {
         price0 = price[bar - iii - 0];
         price1 = price[bar - iii - 1];
         noise += MathAbs(price0 - price1);
        }

      price0 = price[bar];
      price1 = price[bar - ama_period];
      signal = MathAbs(price0 - price1);
      ER=signal/noise;
      ERSC= ER * dSC;
      SSC = ERSC + slowSC;
      AMA = AMA + (MathPow(SSC, G) * (price0 - AMA));
      //AMA = NormalizeDouble(AMA, _Digits);

      //---- Èíèöèàëèçàöèÿ ÿ÷åéêè èíäèêàòîðíîãî áóôåðà ïîëó÷åííûì çíà÷åíèåì AMA
      AMABuffer[bar]=AMA;
     }

   if(prev_calculated==0)
      first=2*ama_period+6+begin;

//---- îñíîâíîé öèêë ðàñ÷¸òà èíäèêàòîðà AMkA
   for(bar=first; bar<rates_total; bar++)
     {
      //---- çàãðóæàåì ïðèðàùåíèÿ èíäèêàòîðà AMA â ìàññèâ äëÿ ïðîìåæóòî÷íûõ âû÷èñëåíèé
      for(iii=0; iii<ama_period; iii++)
         dAMA[iii]=AMABuffer[bar-iii-0]-AMABuffer[bar-iii-1];

      //---- íàõîäèì ïðîñòîå ñðåäíåå ïðèðàùåíèé AMA
      Sum=0.0;
      for(iii=0; iii<ama_period; iii++)
         Sum+=dAMA[iii];
      SMAdif=Sum/ama_period;

      //---- íàõîäèì ñóììó êâàäðàòîâ ðàçíîñòåé ïðèðàùåíèé è ñðåäíåãî
      Sum=0.0;
      for(iii=0; iii<ama_period; iii++)
         Sum+=MathPow(dAMA[iii]-SMAdif,2);

      //---- îïðåäåëÿåì èòîãîâîå çíà÷åíèå ñðåäíåêâàäðàòè÷íîãî îòêëîíåíèÿ StDev îò ïðèðàùåíèÿ AMA
      StDev=MathSqrt(Sum/ama_period);

      //---- èíèöèàëèçàöèÿ ïåðåìåííûõ
      dama=NormalizeDouble(dAMA[0],_Digits+2);
      Filter= NormalizeDouble(dK * StDev,_Digits+2);
      BEARS = 0;
      BULLS = 0;

      //---- âû÷èñëåíèå èíäèêàòîðíûõ çíà÷åíèé
      if(dama < -Filter) BEARS = AMABuffer[bar]; //åñòü íèñõîäÿùèé òðåíä
      if(dama > +Filter) BULLS = AMABuffer[bar]; //åñòü âîñõîäÿùèé òðåíä

      //---- èíèöèàëèçàöèÿ ÿ÷ååê èíäèêàòîðíûõ áóôåðîâ ïîëó÷åííûìè çíà÷åíèÿìè 
      BullsBuffer[bar] = BULLS;
      BearsBuffer[bar] = BEARS;
     }
//----     
   return(rates_total);
  }
//+------------------------------------------------------------------+

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 ---