Author: Copyright 2020, Sergey Grigorovich
Price Data Components
Series array that contains the highest prices of each barSeries array that contains the lowest prices of each bar
0 Views
0 Downloads
0 Favorites
PowerLine
ÿþ//+------------------------------------------------------------------+

//|                                                    PowerLine.mq5 |

//|                               Copyright 2020, Sergey Grigorovich |

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

#property copyright "Copyright 2020, Sergey Grigorovich"

#property version   "1.00"



#property description "5@5< :>B8@>2:C 8 ?>4AG8BK205< A:>;L:> @07 F5=0(10@K) ?5@5A5:0;0 5Q."



#property script_show_inputs



// 5@5G8A;5=85 B>G=>AB8 38AB>3@0<<K A8;K

enum procent_tocnosti

  {

   procent_100=100,     // 100%

   procent_95=95,     // 95%

   procent_0=1,     // 0% (All histogram)

  };

// 5@5G8A;5=85 F25B0 38AB>3@0<<K A8;K

enum color_tocnosti

  {

   R=Red,     // Red

   B=Blue,     // Blue

   G=Green,    // Green

   Y=Yellow,     // Yellow

  };

// 5@5G8A;5=85 :>;8G5AB20 >1@010BK205<KE 10@>2 38AB>3@0<<K A8;K

enum bars_max

  {

   bars_max_0=0,       // All bars

   bars_max_100=100,     // 100 bars

   bars_max_200=200,     // 200 bars

   bars_max_300=300,     // 300 bars

   bars_max_400=400,     // 400 bars

   bars_max_500=500,     // 500 bars

  };

// ">G=>ABL 38AB>3@0<<K A8;K

input procent_tocnosti procent_tocnosti_=procent_100; // ">G=>ABL A8;K 2 % (EC65 =5 ?>:07K205<!)

// &25B 38AB>3@0<<K A8;K

input color_tocnosti color_tocnosti_=Red; //  &25B A8;K

// >;8G5AB20 >1@010BK205<OE 10@>2 38AB>3@0<<K A8;K

input bars_max bars_max_=bars_max_0; // >;8G5AB2> >1@010BK205<KE 10@>2



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

//| 0G0;> DC=:F88 A0<>3> A:@8?B0                                    |

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

void OnStart()

  {

   double tocnostj=procent_tocnosti_;  // ">G=>ABL A8;K 2 % (EC65 =5 ?>:07K205<!)

   tocnostj=tocnostj/100;

   int bars_my=bars_max_;



   int      digits=SymbolInfoInteger(Symbol(),SYMBOL_DIGITS);

   int      bars=Bars(_Symbol,_Period);

   if(bars>bars_my && bars_my>0)

      bars=bars_my;



   double   step=SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_SIZE);

   double   higest=iHigh(Symbol(),Period(),iHighest(NULL,0,MODE_HIGH,bars,0));

   double   lowest=iLow(Symbol(),Period(),iLowest(NULL,0,MODE_LOW,bars,0));



   int kk=MathRound((higest-lowest)/step);

   int max_sila_urovnja_katirovki[];

   ArrayResize(max_sila_urovnja_katirovki,kk+1);

   ArrayInitialize(max_sila_urovnja_katirovki,0);

   double max_urovnj_katirovki[];

   ArrayResize(max_urovnj_katirovki,kk+1);

   ArrayInitialize(max_urovnj_katirovki,0.0);



   int best_sila_urovnja_katirovki=0;

   double best_urovnj_katirovki=0;



//--- 5@B8:0;L=0O H:0;0 Y (#@>25=L :0B8@>2:8)

   double urovnj_katirovki=lowest;

   int    sila_urovnja_katirovki;



   double low_=0.0;

   double high_=0.0;



   for(int ii=0; ii<=kk; ii++)

     {

      max_urovnj_katirovki[ii]=urovnj_katirovki;



      //--- >@87>=B0;L=0O H:0;0 X (!8;0 C@>2=O :0B8@>2:8)

      sila_urovnja_katirovki=0;

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

        {

         low_=iLow(Symbol(),Period(),i);

         high_=iHigh(Symbol(),Period(),i);



         if(urovnj_katirovki>=low_ && urovnj_katirovki<=high_)

            sila_urovnja_katirovki=sila_urovnja_katirovki+1;



         if(max_sila_urovnja_katirovki[ii]<sila_urovnja_katirovki)

            max_sila_urovnja_katirovki[ii]=sila_urovnja_katirovki;



         if(best_sila_urovnja_katirovki<sila_urovnja_katirovki)

           {

            best_sila_urovnja_katirovki=sila_urovnja_katirovki;

            best_urovnj_katirovki=urovnj_katirovki;

           }

        }

      urovnj_katirovki=urovnj_katirovki+step;

     }



//---  8AC5< ;8=88 A8;K

   for(int ii=0; ii<=kk; ii++)

     {

      if(max_sila_urovnja_katirovki[ii]>=best_sila_urovnja_katirovki*tocnostj)

         DrawLine(max_sila_urovnja_katirovki[ii], max_urovnj_katirovki[ii]);

     }

   Comment("Power: ",best_sila_urovnja_katirovki,"    Price: ",NormalizeDouble(best_urovnj_katirovki,digits));

  }

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



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

//| !>7405< >1,5:B ;8=8N A8;K                                        |

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

bool DrawLine(int n, double price)//, double tocnostj_

  {

   string name="PowerLine"+"_"+IntegerToString(n)+"_"+DoubleToString(price,SymbolInfoInteger(Symbol(),SYMBOL_DIGITS));

   ObjectCreate(0,name,OBJ_RECTANGLE,0,iTime(NULL,0,0),price,iTime(NULL,0,n),price);

   ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_SOLID);

   ObjectSetInteger(0,name,OBJPROP_COLOR,color_tocnosti_);

   ObjectSetInteger(0,name,OBJPROP_WIDTH,2);

   ObjectSetInteger(0,name,OBJPROP_BACK,true);

   ObjectSetInteger(0,name,OBJPROP_SELECTABLE,true);

   ObjectSetInteger(0,name,OBJPROP_SELECTED,false);

   ObjectSetInteger(0,name,OBJPROP_RAY_LEFT,true);

   ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false);

   ObjectSetInteger(0,name,OBJPROP_HIDDEN,true);

   ObjectSetInteger(0,name,OBJPROP_ZORDER,0);

   ObjectSetInteger(0,name,OBJPROP_TIMEFRAMES,OBJ_ALL_PERIODS);

   return(true);

  }



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

Comments