Period_Open_Line_v1

Author: Copyright 2018, MetaQuotes Software Corp.
Price Data Components
Series array that contains open time of each barSeries array that contains open prices of each bar
0 Views
0 Downloads
0 Favorites
Period_Open_Line_v1
ÿþ//+------------------------------------------------------------------+

//|                                             Period_Open_Line.mq5 |

//|                        Copyright 2018, MetaQuotes Software Corp. |

//|                                                 https://mql5.com |

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

#property copyright "Copyright 2018, MetaQuotes Software Corp."

#property link      "https://mql5.com"

#property version   "1.00"

#property description "Period Open Line indicator"

#property indicator_chart_window

#property indicator_buffers 1

#property indicator_plots   1

//--- plot POL

#property indicator_label1  "POL"

#property indicator_type1   DRAW_LINE

#property indicator_color1  clrDodgerBlue

#property indicator_style1  STYLE_SOLID

#property indicator_width1  1

//--- enums

enum ENUM_TIMEFRAMES_EXT

  {

   TIMEFRAME_M1   =  PERIOD_M1,     // 1 Minute

   TIMEFRAME_M2   =  PERIOD_M2,     // 2 Minutes

   TIMEFRAME_M3   =  PERIOD_M3,     // 3 Minutes

   TIMEFRAME_M4   =  PERIOD_M4,     // 4 Minutes

   TIMEFRAME_M5   =  PERIOD_M5,     // 5 Minutes

   TIMEFRAME_M6   =  PERIOD_M6,     // 6 Minutes

   TIMEFRAME_M10  =  PERIOD_M10,    // 10 Minutes

   TIMEFRAME_M12  =  PERIOD_M12,    // 12 Minutes

   TIMEFRAME_M15  =  PERIOD_M15,    // 15 Minutes

   TIMEFRAME_M20  =  PERIOD_M20,    // 20 Minutes

   TIMEFRAME_M30  =  PERIOD_M30,    // 30 Minutes

   TIMEFRAME_H1   =  PERIOD_H1,     // 1 Hour

   TIMEFRAME_H2   =  PERIOD_H2,     // 2 Hours

   TIMEFRAME_H3   =  PERIOD_H3,     // 3 Hours

   TIMEFRAME_H4   =  PERIOD_H4,     // 4 Hours

   TIMEFRAME_H6   =  PERIOD_H6,     // 6 Hours

   TIMEFRAME_H8   =  PERIOD_H8,     // 8 Hours

   TIMEFRAME_H12  =  PERIOD_H12,    // 12 Hours

   TIMEFRAME_D1   =  PERIOD_D1,     // 1 Day

   TIMEFRAME_W1   =  PERIOD_W1,     // 1 Week

   TIMEFRAME_MN1  =  PERIOD_MN1,    // 1 Month

   TIMEFRAME_Y1   =  WRONG_VALUE,   // 1 Year

  };

//--- input parameters

input ENUM_TIMEFRAMES_EXT  InpTimeframe   =  TIMEFRAME_D1;  // Timeframe

//--- indicator buffers

double         BufferPOL[];

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

//| Custom indicator initialization function                         |

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

int OnInit()

  {

//--- timer

   EventSetTimer(90);

//--- indicator buffers mapping

   SetIndexBuffer(0,BufferPOL,INDICATOR_DATA);

//--- setting buffer arrays as timeseries

   ArraySetAsSeries(BufferPOL,true);

//--- setting plot buffer parameters

   string label=(InpTimeframe!=TIMEFRAME_Y1 ? TimeframeExtToString(InpTimeframe) : "1 Year");

   PlotIndexSetString(0,PLOT_LABEL,label+" price Open line");

//--- setting indicator parameters

   IndicatorSetString(INDICATOR_SHORTNAME,"Period Open Line");

   IndicatorSetInteger(INDICATOR_DIGITS,Digits());

//---

   if(InpTimeframe!=TIMEFRAME_Y1)

      Time(NULL,(ENUM_TIMEFRAMES)InpTimeframe,1);

//---

   return(INIT_SUCCEEDED);

  }

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

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

  {

//--- #AB0=>2:0 <0AA82>2 1CD5@>2 :0: B09<A5@89

   ArraySetAsSeries(time,true);

//--- @>25@:0 :>;8G5AB20 4>ABC?=KE 10@>2

   if(rates_total<2) return 0;

//--- >43>B>2:0 40==KE

   if(InpTimeframe!=TIMEFRAME_Y1 && Time(NULL,(ENUM_TIMEFRAMES)InpTimeframe,1)==0)

      return 0;

//--- @>25@:0 8 @0AGQB :>;8G5AB20 ?@>AG8BK205<KE 10@>2

   int limit=rates_total-prev_calculated;

   if(limit>1)

     {

      limit=rates_total-1;

      ArrayInitialize(BufferPOL,EMPTY_VALUE);

     }



//---  0AGQB 8=48:0B>@0

   int index=WRONG_VALUE;

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

     {

      if(InpTimeframe!=TIMEFRAME_Y1)

        {

         index=iBarShift(NULL,(ENUM_TIMEFRAMES)InpTimeframe,time[i]);

         if(index==WRONG_VALUE)

            continue;

        }

      else

        {

         datetime time_year=YearStartTime(time[i]);

         if(time_year==0)

            continue;

         index=iBarShift(NULL,PERIOD_CURRENT,time_year);

         if(index==WRONG_VALUE)

            continue;

        }

      ENUM_TIMEFRAMES timeframe=(InpTimeframe==TIMEFRAME_Y1 ? PERIOD_CURRENT : (ENUM_TIMEFRAMES)InpTimeframe);

      BufferPOL[i]=Open(NULL,timeframe,index);

     }

   

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

   return(rates_total);

  }

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

//| Custom indicator timer function                                  |

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

void OnTimer()

  {

   if(InpTimeframe!=TIMEFRAME_Y1)

      Time(NULL,(ENUM_TIMEFRAMES)InpTimeframe,1);

  }  

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

//| >72@0I05B 2@5<O =0G0;0 3>40 ?> 2@5<5=8                          |

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

datetime YearStartTime(const datetime time) {

   MqlDateTime tm;

   if(!TimeToStruct(time,tm))

      return 0;

   tm.mon=1;

   tm.day=1;

   tm.hour=0;

   tm.min=0;

   tm.sec=0;

   return(StructToTime(tm));

}

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

//| >72@0I05B Open                                                  |

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

double Open(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)

  {

   double array[];

   return(CopyOpen(symbol_name,timeframe,shift,1,array)==1 ? array[0] : 0);

  }

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

//| >72@0I05B Time                                                  |

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

datetime Time(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)

  {

   datetime array[];

   ArraySetAsSeries(array,true);

   return(CopyTime(symbol_name,timeframe,shift,1,array)==1 ? array[0] : 0);

  }

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

//| Timeframe to string                                              |

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

string TimeframeExtToString(const ENUM_TIMEFRAMES_EXT timeframe)

  {

   return StringSubstr(EnumToString(timeframe),10);

  }

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

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