fivepattern

Author: Copyright 2014, A. Emelyanov
0 Views
0 Downloads
0 Favorites
fivepattern
//+------------------------------------------------------------------+
//|                                                  FivePattern.mq5 |
//|                                     Copyright 2014, A. Emelyanov |
//|                                        A.Emelyanov2010@yandex.ru |
//+------------------------------------------------------------------+
//| Indicator: Ì & W Wave Patterns by A. Merrill                     |
//| Ïåðâîèñòî÷íèê:                                                   |
//| Ì & W Wave Patterns by Arthur A. Merrill, Chappaqua,             |
//| N.Y.: Analysis Press, 1983                                       |
//+------------------------------------------------------------------+
//| Now   version 2.01 - stable, for trade.                          |
//| Prev. version 1.XX - for test.                                   |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, A. Emelyanov"
#property link      "A.Emelyanov2010@yandex.ru"
#property version   "2.01"
//+------------------------------------------------------------------+
//| Ïîäêëþ÷àåìûå ðåñóðñû (èêîíêà)                                    |
//+------------------------------------------------------------------+
//#property icon "\\Images\\fp.ico"
//+------------------------------------------------------------------+
//| Îïèñàíèå èíäèêàòîðà (èíñòðóêöèÿ ïîëüçîâàòåëÿ)                    |
//+------------------------------------------------------------------+
#property description "Ì and W Wave Patterns by A. Merrill.\n"
#property description "¹  Name Indicator buffers:"
#property description "0  ExtPointE[]    - Point E;"
#property description "1  ExtDeltaDE[]   - Delta DE;"
#property description "2  ExtEvolution[] - Point Evolution;"
#property description "3  ExtMutation[]  - Point Mutation;"
#property description "4  ExtSumModel[]  = Count_Evolution/(Count_Evolution + Count_Mutation)."
//+------------------------------------------------------------------+
//| Îñíîâíûå ñâîéñòâà èíäèêàòîðà                                     |
//+------------------------------------------------------------------+
#property indicator_buffers 5
#property indicator_plots   5
#property indicator_label1  "Point E"
#property indicator_type1   DRAW_NONE
#property indicator_label2  "Delta DE"
#property indicator_type2   DRAW_NONE
#property indicator_label3  "Evolution"
#property indicator_type3   DRAW_NONE
#property indicator_label4  "Mutation"
#property indicator_type4   DRAW_NONE
#property indicator_label5  "Sum Model"
#property indicator_type5   DRAW_NONE
//+------------------------------------------------------------------+
//| Ïîäêëþ÷àåìûå áèáëèîòåêè                                          |
//+------------------------------------------------------------------+
#include <MyMath\Pattern\MyCPatternZigzag.mqh>
#include <MyArrays\MyCListPattern.mqh>
#include <MyObjects\MyCComment.mqh>
//+------------------------------------------------------------------+
//| input parameters                                                 |
//+------------------------------------------------------------------+
//--- Main
input  int             Depth      = 24;         // Zigzag: Øèðèíà îêíà ïîèñêà(Depth)
input  int             Deviation  = 12;         // Zigzag: Èçìåíåíèå öåíû â ïóêòàõ(Deviation)
input  int             Backstep   = 9;          // Zigzag: Îòñóòï îò íà÷àëà äàííûõ(Backstep)
sinput int             HistSize   = 500;        // Zigzag: Ðàçìåð èñòîðèè äëÿ ðàñ÷åòîâ
//--- Arrow
sinput color           ColorArrow = clrBlue;    // Öâåò ïàòòåðíûõ òî÷åê
//--- Trend
sinput color           ColorTrend = clrGold;    // Öâåò ïàòòåðíîé ëèíèè
sinput int             WidthTrend = 2;          // Òîëùèíà ïàòòåðíîé ëèíèè
sinput bool            BackTrend  = true;       // Çàäíèé ïëàí äëÿ ïàòòåðíîé ëèíèè
sinput ENUM_LINE_STYLE StyleTrend = STYLE_SOLID;// Ñòèëü ïàòòåðíîé ëèíèè
//--- HLine
sinput color           ColorUpHLine   = clrBlue;// Öâåò ëèíèè ñîïðîòèâëåíèÿ        
sinput color           ColorDownHLine = clrRed; // Öâåò ëèíèè ïîääåðæêè        
sinput int             WidthHLine = 2;          // Òîëùèíà ëèíèé óðîâíÿ
sinput bool            BackHLine  = true;       // Çàäíèé ïëàí äëÿ ëèíèé óðîâíÿ
sinput ENUM_LINE_STYLE StyleHLine = STYLE_SOLID;// Ñòèëü ëèíèé óðîâíÿ
//+------------------------------------------------------------------+
//| Ãëîáàëüíûå ïåðåìåííûå                                            |
//+------------------------------------------------------------------+
int                    Line       = 1;          // Íîìåð ïåðâîé ñòðîêè êîììåíòàðèÿ
MyCPatternZigzag*      MyPatternZigzag;         // Êëàññ: ìîäåëè ïàòòåðíîé ñèñòåìû
MyCListPattern*        MyListPattern;           // Êëàññ: õðàíèëèùå ãðàôè÷åñêèõ îáúåêòîâ
MyCComment*            MyComment;               // Êëàññ: êîììåíòàðèÿ
//+------------------------------------------------------------------+
//|Áóôåðà äëÿ èíäèêàòîðà(èñïîëüçîâàòü â ãåíåðàòîðå òîðãîâûõ ñèãíàëîâ)|
//+------------------------------------------------------------------+
double                 ExtPointE[];             // Áóôåð: äëÿ õðàíåíèÿ òî÷êè E
double                 ExtDeltaDE[];            // Áóôåð: äëÿ õðàíåíèÿ äëèíû âîëíû D-E(â ïóíêòàõ!)
double                 ExtEvolution[];          // Áóôåð: äëÿ õðàíåíèÿ ýâîëþöèé
double                 ExtMutation[];           // Áóôåð: äëÿ õðàíåíèÿ ìóòàöèé
double                 ExtSumModel[];           // Áóôåð: äëÿ õðàíåíèÿ ñ÷åò÷èêà-ìîäåëè
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   //--- Ïîäãîòîâêà ãðàôèêà öåí, ãðàôèê äîëæåí áûòü ñìåùåí îò ïðàâîãî óãëà, èíà÷å ïîëüçîâàòåëü íå óâèäèò ïðîãíîçà
   if(!ChartShiftGet(0))
     {
      ChartShiftSet(true, 0);
     }
   //---
   SetIndexBuffer(0,ExtPointE,    INDICATOR_DATA);
   SetIndexBuffer(1,ExtDeltaDE,   INDICATOR_DATA);
   SetIndexBuffer(2,ExtEvolution, INDICATOR_DATA);
   SetIndexBuffer(3,ExtMutation,  INDICATOR_DATA);
   SetIndexBuffer(4,ExtSumModel,  INDICATOR_DATA);
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
   //--- 
   MyPatternZigzag= new MyCPatternZigzag;
   MyComment      = new MyCComment;
   MyListPattern  = new MyCListPattern;
   //--- Main
   MyPatternZigzag.SetDepth(Depth);
   MyPatternZigzag.SetDeviation(Deviation);
   MyPatternZigzag.SetBackstep(Backstep);
   MyPatternZigzag.AddPointerCommet(MyComment);
   MyPatternZigzag.SetNumberLineComment(Line);         // íîìåð ñòðîêè êîììåíòà
   MyPatternZigzag.SetSizeBuffers(HistSize);
   //--- Arrow, HLine & Trend
   MyListPattern.SetColorArrow(ColorArrow);
   MyListPattern.SetColorTrend(ColorTrend);
   MyListPattern.SetStyleTrend(StyleTrend);
   MyListPattern.SetWidthTrend(WidthTrend);
   MyListPattern.SetBackTrend(BackTrend);
   MyListPattern.SetStyleHLine(StyleHLine);
   MyListPattern.SetColorUpHLine(ColorUpHLine);
   MyListPattern.SetColorDownHLine(ColorDownHLine);
   MyListPattern.SetWidthHLine(WidthHLine);
   MyListPattern.SetBackHLine(BackHLine);
   //---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Deinit                                                           |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   delete MyPatternZigzag;
   delete MyListPattern;
   delete MyComment;
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   //--- íåëüçÿ ðàñ÷èòûâàòü èíäèêàòîð ïðè "ìàëîé èñòîðèè"
   if(rates_total > HistSize)
     {
      //--- åñòü ëè ÷òî ñ÷èòàòü? è áûë ëè ðàñ÷åò äî ýòîãî...
      int nHowMush = rates_total-prev_calculated;
      //--- Öèêë ïîäñ÷åòà
      if(nHowMush > 0)
        {
         //--- Âðåìåííûå ïåðåìåííûå
         double   new_high[],new_low[];
         datetime new_time[];
         //--- Îïðåäåëÿåì ðàçìåð áóôåðîâ
         ArrayResize(new_high,HistSize,0);
         ArrayResize(new_low,HistSize,0);
         
         ArrayResize(new_time,HistSize,0);
         //--- Óçíàåì îò ÊÓÄÀ è ÑÊÎËÜÊÎ ñ÷èòàòü
         int nStart = 0;                              // Èíäåêñ íà÷àëà ðàñ÷åòîâ(îêîí÷àíèå)
         int nCopy  = 0;                              // Èíäåêñ ñ êîòîðîãî íà÷èíàåòñÿ êîïèðîâàíèå âî âðåìåííûå áóôåðà
         if(prev_calculated == 0)
           {//--- Íà÷àëî ðàñ÷åòîâ
            nStart = HistSize - 1;
           }else
              {//--- Ïðîäîëæåíèå ðàñ÷åòîâ
               nStart = prev_calculated - 1;
              }
         //--- Ïîäñ÷åò
         for(;nStart<rates_total;nStart++)
           {
            //--- Ìåñòî îò êóäà íà÷èíàòü êîïèðîâàòü
            nCopy = 1+nStart-HistSize;
            //--- Êîïèðîâàíèå äàííûõ
            ArrayCopy(new_low, low, 0,nCopy,HistSize);
            ArrayCopy(new_high,high,0,nCopy,HistSize);
            ArrayCopy(new_time,time,0,nCopy,HistSize);
            //--- Ðàñ÷åò
            MyPatternZigzag.GetNamePattern(new_high,new_low,new_time);
            //--- Çàïîìèíàåì äàííûå: Evolution, Mutation, SumModel
            double dwDE          = MathAbs(MyPatternZigzag.GetE()-MyPatternZigzag.GetD());
            dwDE                 = dwDE/_Point;
            ExtDeltaDE[nStart]   = dwDE;                               // Áóôåð äëÿ õðàíåíèÿ äëèíû âîëíû D-E
            ExtPointE[nStart]    = MyPatternZigzag.GetE();             // Áóôåð äëÿ õðàíåíèÿ òî÷êè E
            ExtEvolution[nStart] = MyPatternZigzag.GetPointEvolution();// Áóôåð äëÿ õðàíåíèÿ ýâîëþöèé
            ExtMutation[nStart]  = MyPatternZigzag.GetPointMutation(); // Áóôåð äëÿ õðàíåíèÿ ìóòàöèé
            ExtSumModel[nStart]  = MyPatternZigzag.GetSumModel();      // Áóôåð äëÿ õðàíåíèÿ ñ÷åò÷èêà-ìîäåëè
           }
         //--- Âûâîä ãðàôèêè
         DrawPattern();
        }
     }else
        {
         return(0);
        }
   //--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Ôóíêöèÿ äëÿ îòîáðàæåíèÿ ðàñ÷åòîâ íà ãðàôèêå                      |
//+------------------------------------------------------------------+
void DrawPattern(void)
  {
   //--- 1. âûâîäèì íà ýêðàí êîììåíò
   MyPatternZigzag.PrintComment();
   //--- 2. âûâîäèì íà ýêðàí ãðàôèêó
   MyListPattern.Insert(MyPatternZigzag.GetA(), MyPatternZigzag.GetTimeA(), 
                        MyPatternZigzag.GetB(), MyPatternZigzag.GetTimeB(),
                        MyPatternZigzag.GetC(), MyPatternZigzag.GetTimeC(),
                        MyPatternZigzag.GetD(), MyPatternZigzag.GetTimeD(),
                        MyPatternZigzag.GetE(), MyPatternZigzag.GetTimeE(),
                        MyPatternZigzag.GetPointEvolution(),MyPatternZigzag.GetTimeEvolution(),
                        MyPatternZigzag.GetPointMutation(), MyPatternZigzag.GetTimeMutation());   
  }
//+------------------------------------------------------------------+
//| Ôóíêöèÿ îïðåäåëÿåò, âêëþ÷åí ëè ðåæèì îòîáðàæåíèÿ öåíîâîãî ãðàôèêà|
//| ñ îòñòóïîì îò ïðàâîãî êðàÿ.                                      |
//+------------------------------------------------------------------+
bool ChartShiftGet(long chart_ID=0)
  {
   //--- ïîäãîòîâèì ïåðåìåííóþ äëÿ ïîëó÷åíèÿ çíà÷åíèÿ ñâîéñòâà
   long value;
   //--- ñáðîñèì çíà÷åíèå îøèáêè
   ResetLastError();
   //--- ïîëó÷èì çíà÷åíèå ñâîéñòâà
   if(!ChartGetInteger(chart_ID,CHART_SHIFT,0,value))
     {
      //--- âûâåäåì ñîîáùåíèå îá îøèáêå â æóðíàë "Ýêñïåðòû"
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
   //--- ïðîâåðèì value... :-)
   if(value <= 0) return(false);
   //--- óñïåøíîå âûïîëíåíèå
   return(true);
  }
//+------------------------------------------------------------------+
//| Ôóíêöèÿ âêëþ÷àåò/âûêëþ÷àåò ðåæèì îòîáðàæåíèÿ öåíîâîãî ãðàôèêà ñ  |
//| îòñòóïîì îò ïðàâîãî êðàÿ.                                        |
//+------------------------------------------------------------------+
bool ChartShiftSet(bool value, long chart_ID=0)
  {
   //--- ñáðîñèì çíà÷åíèå îøèáêè
   ResetLastError();
   //--- óñòàíîâèì çíà÷åíèå ñâîéñòâà
   if(!ChartSetInteger(chart_ID,CHART_SHIFT,0,value))
     {
      //--- âûâåäåì ñîîáùåíèå îá îøèáêå â æóðíàë "Ýêñïåðòû"
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
   //--- óñïåøíîå âûïîëíåíèå
   return(true);
  }
//+------------------------------------------------------------------+

Comments