Three Candles Pattern mt5

Author: Yuriy Tokman (YTG)
0 Views
0 Downloads
0 Favorites
Three Candles Pattern mt5
ÿþ//+------------------------------------------------------------------+

//|                                    Three Candles Pattern mt5.mq5 |

//|                                               Yuriy Tokman (YTG) |

//|                       https://www.mql5.com/ru/users/satop/seller |

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

#property copyright "Yuriy Tokman (YTG)"

#property link      "https://www.mql5.com/ru/users/satop/seller"

#property version   "1.00"

#property indicator_chart_window

#property indicator_plots     0





input color           InpColorH=clrLime;          // &25B B@5C3>;L=8:0 4;O 1DGL8E A25G59

input color           InpColorL=clrRed;           // &25B B@5C3>;L=8:0 4;O <54256L8E A25G59

input ENUM_LINE_STYLE InpStyle=STYLE_SOLID     ;  // !B8;L ;8=89 B@5C3>;L=8:0 

input int             InpWidth=3;                 // ">;I8=0 ;8=89 B@5C3>;L=8:0 

input bool            InpFill=true;               // 0;82:0 B@5C3>;L=8:0 F25B>< 

input bool            InpBack=true;               // "@5C3>;L=8:0 =0 704=5< ?;0=5 



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

//| Custom indicator initialization function                         |

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

int OnInit()

  {

//--- indicator buffers mapping

   

//---

   return(INIT_SUCCEEDED);

  }

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

//| Expert deinitialization function                                 |

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

void OnDeinit(const int reason)

  {

//---

   GetDell("Triangl");

//---   

  }

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

//| 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[])

  {

//---

   ArraySetAsSeries(time,true);

   ArraySetAsSeries(high,true);

   ArraySetAsSeries(low,true);

   ArraySetAsSeries(close,true);

   ArraySetAsSeries(open,true);   

//---

   int limit=rates_total-prev_calculated;

   if(prev_calculated==0)limit--;

   else  limit++;

   if(limit>rates_total-5)limit=rates_total-5;



   for(int i=limit;i>=0 && !IsStopped();i--)

     {

      if(close[i+4]<open[i+4] && close[i+3]>open[i+3] && close[i+2]>open[i+2] && close[i+1]>open[i+1])

       {

        TriangleCreate(0,"Triangle"+TimeToString(time[i]),0,

        time[i+3],MathMin(low[i+3],MathMin(low[i+2],low[i+1])),time[i+2],MathMax(high[i+3],MathMax(high[i+2],high[i+1])),time[i+1],MathMin(low[i+3],MathMin(low[i+2],low[i+1])),InpColorH,InpStyle,InpWidth,InpFill,InpBack); 

        RectangleCreate(0,"Trianglq"+TimeToString(time[i]),0,time[i+3],MathMax(high[i+3],MathMax(high[i+2],high[i+1])),time[i+1],MathMin(low[i+3],MathMin(low[i+2],low[i+1])),InpColorL);               

       }

      if(close[i+4]>open[i+4] && close[i+3]<open[i+3] && close[i+2]<open[i+2] && close[i+1]<open[i+1])

       {

        TriangleCreate(0,"Triangla"+TimeToString(time[i]),0,

        time[i+3],MathMax(high[i+3],MathMax(high[i+2],high[i+1])),time[i+2],MathMin(low[i+3],MathMin(low[i+2],low[i+1])),time[i+1],MathMax(high[i+3],MathMax(high[i+2],high[i+1])),InpColorL,InpStyle,InpWidth,InpFill,InpBack);

        RectangleCreate(0,"Trianglw"+TimeToString(time[i]),0,time[i+3],MathMax(high[i+3],MathMax(high[i+2],high[i+1])),time[i+1],MathMin(low[i+3],MathMin(low[i+2],low[i+1])),InpColorH);        

       }

     }    

//--- return value of prev_calculated for next call

   return(rates_total);

  }

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

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

//| C>7405B B@5C3>;L=8: ?> 7040==K< :>>@48=0B0<                      | 

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

bool TriangleCreate(const long            chart_ID=0,        // ID 3@0D8:0 

                    const string          name="Triangle",   // 8<O B@5C3>;L=8:0 

                    const int             sub_window=0,      // =><5@ ?>4>:=0  

                    datetime              time1=0,           // 2@5<O ?5@2>9 B>G:8 

                    double                price1=0,          // F5=0 ?5@2>9 B>G:8 

                    datetime              time2=0,           // 2@5<O 2B>@>9 B>G:8 

                    double                price2=0,          // F5=0 2B>@>9 B>G:8 

                    datetime              time3=0,           // 2@5<O B@5BL59 B>G:8 

                    double                price3=0,          // F5=0 B@5BL59 B>G:8 

                    const color           clr=clrRed,        // F25B B@5C3>;L=8:0 

                    const ENUM_LINE_STYLE style=STYLE_SOLID, // AB8;L ;8=89 B@5C3>;L=8:0 

                    const int             width=1,           // B>;I8=0 ;8=89 B@5C3>;L=8:0 

                    const bool            fill=true,        // 70;82:0 B@5C3>;L=8:0 F25B>< 

                    const bool            back=false,        // =0 704=5< ?;0=5 

                    const bool            selection=false,    // 2K45;8BL 4;O ?5@5<5I5=89 

                    const bool            hidden=true,       // A:@KB 2 A?8A:5 >1J5:B>2 

                    const long            z_order=0)         // ?@8>@8B5B =0 =060B85 <KHLN 

  { 

//--- CAB0=>28< :>>@48=0BK B>G5: ?@82O7:8, 5A;8 >=8 =5 7040=K 

   if(ObjectFind(chart_ID,name)>-1)ObjectDelete(chart_ID,name);

//--- A1@>A8< 7=0G5=85 >H81:8 

   ResetLastError(); 

//--- A>74048< B@5C3>;L=8: ?> 7040==K< :>>@48=0B0< 

   if(!ObjectCreate(chart_ID,name,OBJ_TRIANGLE,sub_window,time1,price1,time2,price2,time3,price3)) 

     { 

      Print(__FUNCTION__, 

            ": =5 C40;>AL A>740BL B@5C3>;L=8:! >4 >H81:8 = ",GetLastError()); 

      return(false); 

     } 

//--- CAB0=>28< F25B B@5C3>;L=8:0 

   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); 

//--- CAB0=>28< AB8;L ;8=89 B@5C3>;L=8:0 

   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); 

//--- CAB0=>28< B>;I8=C ;8=89 B@5C3>;L=8:0 

   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width); 

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

   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); 

//--- 2:;NG8< (true) 8;8 >B:;NG8< (false) @568< 2K45;5=8O B@5C3>;L=8: 4;O ?5@5<5I5=89 

//--- ?@8 A>740=88 3@0D8G5A:>3> >1J5:B0 DC=:F859 ObjectCreate, ?> C<>;G0=8N >1J5:B 

//--- =5;L7O 2K45;8BL 8 ?5@5<5I0BL. =CB@8 65 MB>3> <5B>40 ?0@0<5B@ selection 

//--- ?> C<>;G0=8N @025= true, GB> ?>72>;O5B 2K45;OBL 8 ?5@5<5I0BL MB>B >1J5:B 

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); 

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); 

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

   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); 

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

   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); 

//--- CA?5H=>5 2K?>;=5=85 

   return(true); 

  } 

//----

//----

void GetDell(string name="ytg")

  {

   string vName;

   for(int i=ObjectsTotal(0)-1; i>=0;i--)

     {

      vName=ObjectName(0,i);

      if(StringFind(vName,name)!=-1) ObjectDelete(0,vName);

     }

  }

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

//| C>7405B ?@O<>C3>;L=8: ?> 7040==K< :>>@48=0B0<                    | 

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

bool RectangleCreate(const long            chart_ID=0,        // ID 3@0D8:0 

                     const string          name="Rectangle",  // 8<O ?@O<>C3>;L=8:0 

                     const int             sub_window=0,      // =><5@ ?>4>:=0  

                     datetime              time1=0,           // 2@5<O ?5@2>9 B>G:8 

                     double                price1=0,          // F5=0 ?5@2>9 B>G:8 

                     datetime              time2=0,           // 2@5<O 2B>@>9 B>G:8 

                     double                price2=0,          // F5=0 2B>@>9 B>G:8 

                     const color           clr=clrRed,        // F25B ?@O<>C3>;L=8:0 

                     const ENUM_LINE_STYLE style=STYLE_SOLID, // AB8;L ;8=89 ?@O<>C3>;L=8:0 

                     const int             width=1,           // B>;I8=0 ;8=89 ?@O<>C3>;L=8:0 

                     const bool            fill=true,        // 70;82:0 ?@O<>C3>;L=8:0 F25B>< 

                     const bool            back=true,        // =0 704=5< ?;0=5 

                     const bool            selection=false,    // 2K45;8BL 4;O ?5@5<5I5=89 

                     const bool            hidden=true,       // A:@KB 2 A?8A:5 >1J5:B>2 

                     const long            z_order=0)         // ?@8>@8B5B =0 =060B85 <KHLN 

  { 

//--- CAB0=>28< :>>@48=0BK B>G5: ?@82O7:8, 5A;8 >=8 =5 7040=K 

   if(ObjectFind(chart_ID,name)>-1)ObjectDelete(chart_ID,name); 

//--- A1@>A8< 7=0G5=85 >H81:8 

   ResetLastError(); 

//--- A>74048< ?@O<>C3>;L=8: ?> 7040==K< :>>@48=0B0< 

   if(!ObjectCreate(chart_ID,name,OBJ_RECTANGLE,sub_window,time1,price1,time2,price2)) 

     { 

      Print(__FUNCTION__, 

            ": =5 C40;>AL A>740BL ?@O<>C3>;L=8:! >4 >H81:8 = ",GetLastError()); 

      return(false); 

     } 

//--- CAB0=>28< F25B ?@O<>C3>;L=8:0 

   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); 

//--- CAB0=>28< AB8;L ;8=89 ?@O<>C3>;L=8:0 

   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); 

//--- CAB0=>28< B>;I8=C ;8=89 ?@O<>C3>;L=8:0 

   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width); 

//--- 2:;NG8< (true) 8;8 >B:;NG8< (false) @568< 70;82:8 ?@O<>C3>;L=8:0 

   ObjectSetInteger(chart_ID,name,OBJPROP_FILL,fill); 

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

   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); 

//--- 2:;NG8< (true) 8;8 >B:;NG8< (false) @568< 2K45;5=8O ?@O<>C3>;L=8:0 4;O ?5@5<5I5=89 

//--- ?@8 A>740=88 3@0D8G5A:>3> >1J5:B0 DC=:F859 ObjectCreate, ?> C<>;G0=8N >1J5:B 

//--- =5;L7O 2K45;8BL 8 ?5@5<5I0BL. =CB@8 65 MB>3> <5B>40 ?0@0<5B@ selection 

//--- ?> C<>;G0=8N @025= true, GB> ?>72>;O5B 2K45;OBL 8 ?5@5<5I0BL MB>B >1J5:B 

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); 

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); 

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

   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); 

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

   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); 

//--- CA?5H=>5 2K?>;=5=85 

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