Trading recommendations (PowerLine)

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
Trading recommendations (PowerLine)
ÿþ//+------------------------------------------------------------------+

//|                          Trading recommendations (PowerLine).mq5 |

//|                               Copyright 2020, Sergey Grigorovich |

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

#property copyright "Copyright 2020, Sergey Grigorovich"

#property version   "1.00"



#property description " 5:><5=40F88 : B>@3>2;5 =0 1075 PowerLine A:@8?B0."



#property script_show_inputs



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

  };

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

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



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

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

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

void OnStart()

  {

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

   int      bars=Bars(_Symbol,_Period);



   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;

     }



   double ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);

   double bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);

   double test_max_urovnj_katirovki=1000000.00;

   string trade="";

   double target=0;



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

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

     {

      if(max_sila_urovnja_katirovki[ii]>=best_sila_urovnja_katirovki)

        {

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



         if(max_urovnj_katirovki[ii]>ask && max_urovnj_katirovki[ii]-ask<test_max_urovnj_katirovki)

           {

            test_max_urovnj_katirovki=max_urovnj_katirovki[ii]-ask;

            trade="BUY";

            target=max_urovnj_katirovki[ii];

           }

         if(max_urovnj_katirovki[ii]<bid && bid-max_urovnj_katirovki[ii]<test_max_urovnj_katirovki)

           {

            test_max_urovnj_katirovki=bid-max_urovnj_katirovki[ii];

            trade="SELL";

            target=max_urovnj_katirovki[ii];

           }

        }

     }

   Comment("     ", trade,"    Target: ",NormalizeDouble(target,digits), "    ( Power: ", best_sila_urovnja_katirovki, " )");



// ---  5:><5=40F88 : B>@3>2;5

   DrawText(trade, target);

  }



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



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

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

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

bool DrawLine(int n, double price)

  {

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

  }



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

//|  !>7405< >1,5:B "5:AB  5:><5=40F88 : B>@3>2;5                    |

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

bool DrawText(string trade_, double target_)

  {

   datetime time;

   double price;

//--- =0 B5:CI5< 10@5

   time=TimeCurrent();

//--- 7=0G5=85 Bid

   price=SymbolInfoDouble(Symbol(),SYMBOL_BID);



   string text=trade_+" "+DoubleToString(target_,SymbolInfoInteger(Symbol(),SYMBOL_DIGITS))+" (Target)";

   string name="Text";

//--- A>74048< >1J5:B ""5:AB"

   ObjectCreate(0,name,OBJ_TEXT,0,time,price);

//--- CAB0=>28< B5:AB

   ObjectSetString(0,name,OBJPROP_TEXT,text);

//--- CAB0=>28< H@8DB B5:AB0

   ObjectSetString(0,name,OBJPROP_FONT,"Arial");

//--- CAB0=>28< @07<5@ H@8DB0

   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,30);

//--- CAB0=>28< C3>; =0:;>=0 B5:AB0

   ObjectSetDouble(0,name,OBJPROP_ANGLE,0.0);

//--- CAB0=>28< A?>A>1 ?@82O7:8

   ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_RIGHT_UPPER);

//--- CAB0=>28< F25B

   if(trade_=="BUY")

      ObjectSetInteger(0,name,OBJPROP_COLOR,clrDeepSkyBlue);

   if(trade_=="SELL")

      ObjectSetInteger(0,name,OBJPROP_COLOR,clrCrimson);

//--- >B>1@078< =0 ?5@54=5< (false) 8;8 704=5< (true) ?;0=5

   ObjectSetInteger(0,name,OBJPROP_BACK,false);

//--- 2:;NG8< (true) 8;8 >B:;NG8< (false) @568< ?5@5<5I5=8O >1J5:B0 <KHLN

   ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);

   ObjectSetInteger(0,name,OBJPROP_SELECTED,false);

//--- A:@>5< (true) 8;8 >B>1@078< (false) 8<O 3@0D8G5A:>3> >1J5:B0 2 A?8A:5 >1J5:B>2

   ObjectSetInteger(0,name,OBJPROP_HIDDEN,true);

//--- CAB0=>28< ?@8>@8B5B =0 ?>;CG5=85 A>1KB8O =060B8O <KH8 =0 3@0D8:5

   ObjectSetInteger(0,name,OBJPROP_ZORDER,0);

   return(true);

  }

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

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