Statistics of candles Morse

Author: Copyright © 2020, Vladimir Karputov
0 Views
0 Downloads
0 Favorites
Statistics of candles Morse
ÿþ//+------------------------------------------------------------------+

//|                                  Statistics of candles Morse.mq5 |

//|                              Copyright © 2020, Vladimir Karputov |

//|                     https://www.mql5.com/ru/market/product/43516 |

//+------------------------------------------------------------------+

#property copyright "Copyright © 2020, Vladimir Karputov"

#property link      "https://www.mql5.com/ru/market/product/43516"

#property version   "1.000"

#property script_show_inputs

#include <Graphics\Graphic.mqh>

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

enum ENUM_OUTPUT

  {

   count=0,    // count of series

   percent=1,  // percent from count of bars

  };

string morse[62]=

  {

   "0","1",

   "00","01","10","11",

   "000","001","010","011","100","101","110","111",

   "0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111",

   "00000","00001","00010","00011","00100","00101","00110","00111","01000","01001","01010",

   "01011","01100","01101","01110","01111","10000","10001","10010","10011","10100","10101",

   "10110","10111","11000","11001","11010","11011","11100","11101","11110","11111"

  };

//--- input parameters

input int         InputCountBars    = 1200;     // Count of bars

input bool        InpVerification   = false;    // Verification

input bool        InpSaveScreenShot = true;     // Save screenShot

input int         InpSleep          = 12000;    // Sleep (milliseconds)

input ENUM_OUTPUT InpOutput         = percent;  // Output statistics

//+------------------------------------------------------------------+

//| Script program start function                                    |

//+------------------------------------------------------------------+

void OnStart()

  {

//+------------------------------------------------------------------+

//| arr_series[62]:    count of series                               |

//|   OR                                                             |

//| arr_series[62]:    percent from count of bars                    |

//+------------------------------------------------------------------+

   double arr_series[62];

   ArrayInitialize(arr_series,0.0);

   MqlRates rates[];

   int copied=CopyRates(Symbol(),0,0,InputCountBars,rates);

   if(copied==InputCountBars)

     {

      for(int i=0; i<copied; i++)

        {

         //--- "0","1"

         int increment=1;

         string mask="";

         for(int j=i; j<i+increment && j<copied; j++)

           {

            if(rates[j].open>rates[j].close)

               mask=mask+"0";

            else

               mask=mask+"1";

           }

         for(int k=0; k<2; k++)

           {

            if(morse[k]==mask)

              {

               arr_series[k]=arr_series[k]+1.0;

               break;

              }

           }

         //--- "00","01","10","11"

         increment=2;

         mask="";

         for(int j=i; j<i+increment && j<copied; j++)

           {

            if(rates[j].open>rates[j].close)

               mask=mask+"0";

            else

               mask=mask+"1";

           }

         for(int k=2; k<6; k++)

           {

            if(morse[k]==mask)

              {

               arr_series[k]=arr_series[k]+1.0;

               break;

              }

           }

         //--- "000","001","010","011","100","101","110","111"

         increment=3;

         mask="";

         for(int j=i; j<i+increment && j<copied; j++)

           {

            if(rates[j].open>rates[j].close)

               mask=mask+"0";

            else

               mask=mask+"1";

           }

         for(int k=6; k<14; k++)

           {

            if(morse[k]==mask)

              {

               arr_series[k]=arr_series[k]+1.0;

               break;

              }

           }

         //--- "0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"

         increment=4;

         mask="";

         for(int j=i; j<i+increment && j<copied; j++)

           {

            if(rates[j].open>rates[j].close)

               mask=mask+"0";

            else

               mask=mask+"1";

           }

         for(int k=14; k<30; k++)

           {

            if(morse[k]==mask)

              {

               arr_series[k]=arr_series[k]+1.0;

               break;

              }

           }

         //---

         increment=5;

         mask="";

         for(int j=i; j<i+increment && j<copied; j++)

           {

            if(rates[j].open>rates[j].close)

               mask=mask+"0";

            else

               mask=mask+"1";

           }

         for(int k=30; k<62; k++)

           {

            if(morse[k]==mask)

              {

               arr_series[k]=arr_series[k]+1.0;

               break;

              }

           }

        }

     }

   else

     {

      Print("Failed to get history data for the symbol ",Symbol(),". Bars copied ",copied," of ",InputCountBars);

      return;

     }

//ArraySort(arr_series);

//---

   if(InpOutput==percent)

     {

      //+------------------------------------------------------------------+

      //| arr_series[62]:    count of series                               |

      //|   OR                                                             |

      //| arr_series[62]:    percent from count of bars                    |

      //+------------------------------------------------------------------+

      double coefficient=100.0/(double)InputCountBars;

      for(int i=0; i<62; i++)

         arr_series[i]=arr_series[i]*coefficient;

     }

//--- verification

   if(InpVerification)

     {

      string out="";

      string format="open = %G, high = %G, low = %G, close = %G, volume = %d";

      for(int i=0; i<copied; i++)

        {

         out=IntegerToString(i)+":"+TimeToString(rates[i].time);

         out=out+" "+StringFormat(format,

                                  rates[i].open,

                                  rates[i].high,

                                  rates[i].low,

                                  rates[i].close,

                                  rates[i].tick_volume);

         if(rates[i].open<rates[i].close)

            out=out+" "+"Bull";

         else

            if(rates[i].open>rates[i].close)

               out=out+" "+"Bear";

         Print(out);

        }

      Print("//| arr_series[][0]:    series type                                  |");

      if(InpOutput==percent)

         Print("//| arr_series[][1]:    percent from count of bars                   |");

      else

         Print("//| arr_series[][1]:    count of series                              |");

      uint digits=(InpOutput==percent)?1:0;

      ArrayPrint(arr_series,digits);

     }

//---

   CGraphic graphic;

   graphic.Create(0,"Graphic",0,10,10,680,360);

   double x[];

   double y[];

   int size=ArrayRange(arr_series,0);

   ArrayResize(x,size);

   ArrayResize(y,size);

   for(int i=0; i<size; i++)

     {

      x[i]=i;

      y[i]=arr_series[i];

     }

   CCurve *curve=graphic.CurveAdd(x,y,CURVE_LINES);

   curve.Name("Statistics of candles Morse");

   curve.LinesSmooth(true);

   graphic.XAxis().Name("Series type. "+Symbol()+","+StringSubstr(EnumToString(Period()),7));

   graphic.XAxis().NameSize(12);

   graphic.XAxis().AutoScale(false);

   graphic.XAxis().DefaultStep(1.0);

   if(InpOutput==percent)

      graphic.YAxis().Name("Percentage of series in "+IntegerToString(InputCountBars)+" bars");

   else

      graphic.YAxis().Name("Count of series in "+IntegerToString(InputCountBars)+" bars");

   graphic.YAxis().NameSize(12);

   graphic.CurvePlotAll();

   graphic.Update();

   if(InpSaveScreenShot)

     {

      //--- Save the chart screenshot in a file in the terminal_directory\MQL5\Files\Statistics of candles\

      string name="Statistics of candles Morse\\"+Symbol()+","+StringSubstr(EnumToString(Period()),7)+

                  ". "+IntegerToString(InputCountBars)+" bars"+".png";

      if(ChartScreenShot(0,name,750,394,ALIGN_RIGHT))

         Print("We've saved the screenshot ",name);

     }

//---

   Sleep(InpSleep);

   graphic.Destroy();

  }

//+------------------------------------------------------------------+

Comments