MorningFlat_v1

Author: Scriptong
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
MorningFlat_v1
//+------------------------------------------------------------------+
//|                                                  MorningFlat.mq4 |
//|                                                        Scriptong |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Scriptong"
#property link      ""

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Turquoise
#property indicator_color2 Red
#property indicator_color3 Gold
#property indicator_color4 Silver

extern int StartHour=0;
extern int EndHour=8;
extern double TargetLevel=161.8;
extern color UpColor = Turquoise;
extern color DnColor = Red;
extern color TargetUpColor = Gold;
extern color TargetDnColor = Silver;

//---- buffers
double Up[];
double Down[];
double TargetUp[];
double TargetDn[];
bool Activate=False;
datetime LastDay;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   if(Period()>PERIOD_H1)
     {
      Comment("Èíäèêàòîð ðàáîòàåò íà òàéìôðåéìàõ ìåíüøå H4!");
      return(0);
     }
   if(StartHour<0 || EndHour<0 || StartHour>23 || EndHour>23 || StartHour>=EndHour)
     {
      Comment("Çíà÷åíèÿ StartHour è EndHour äîëæíû ëåæàòü â äèàïàçîíå îò 0 äî 24 è StartHour < EndHour.");
      return(0);
     }

   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,Up);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,Down);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,TargetUp);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexBuffer(3,TargetDn);
   SetIndexEmptyValue(0, 0.0);
   SetIndexEmptyValue(1, 0.0);
   SetIndexEmptyValue(2, 0.0);
   SetIndexEmptyValue(3, 0.0);

   Activate=True;
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
// Óäàëåíèå  îáúåêòîâ-öåíîâûõ ìåòîê
   for(int i=ObjectsTotal()-1; i>=0; i--)
     {
      string Name=ObjectName(i);
      if(StringSubstr(Name,0,3)=="Lab")
         ObjectDelete(Name);
     }
   Comment("");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Öåíîâàÿ ìåòêà ñî çíà÷åíèåì óðîâíÿ                                |
//+------------------------------------------------------------------+
void DrawLabel(datetime TimeL,double Price,bool Upper,color Col,int Code)
  {
   if(Upper)
      string Name="Lab"+DoubleToStr(TimeL,0)+"U";
   else
      Name="Lab"+DoubleToStr(TimeL,0)+"D";

   if(ObjectCreate(Name,OBJ_ARROW,0,TimeL,Price))
     {
      ObjectSet(Name,OBJPROP_ARROWCODE,Code);
      ObjectSet(Name,OBJPROP_COLOR,Col);
     }
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
//----
   if(!Activate) return(0);

   LastDay=0;
   int counted_bars=IndicatorCounted();
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   int limit=Bars-counted_bars;
   if(counted_bars==0) limit--;

   for(int i=limit; i>=0; i--)
      if(TimeHour(Time[i])>=EndHour)
        {
         datetime BeginDay=iTime(Symbol(),PERIOD_D1,iBarShift(Symbol(),PERIOD_D1,Time[i]));  // Ðàñ÷åò âðåìåíè íà÷àëà ñóòîê
         datetime NextDay=BeginDay+86400;  // Ðàñ÷åò âðåìåíè íà÷àëà ñëåäóþùèõ ñóòîê
         if(LastDay>=BeginDay) continue; // Åñëè â ýòîò äåíü óæå ðèñîâàëè óðîâíè, òî ïðîäîëæàåì îñíîâíîé öèêë
         int StartBar = iBarShift(Symbol(),0, BeginDay+StartHour*3600);   // Áàð, ñîîòâåòñâóþùèé íà÷àëó ñóòîê ïëþñ ñìåùåíèå â ÷àñàõ
         int FinishBar = iBarShift(Symbol(), 0, BeginDay+EndHour*3600)+1; // Áàð, ñîîòâåòñòâóþùèé ïîñëåäíåìó áàðó "óòðåííåãî ôëýòà"

         if(StartBar>-1 && FinishBar>-1)
           {
            int ind1=iLowest(Symbol(),0,MODE_LOW,StartBar-FinishBar+1,FinishBar);
            int ind2=iHighest(Symbol(),0,MODE_HIGH,StartBar-FinishBar+1,FinishBar);

            if(ind1>-1 && ind2>-1)
              {
               double LowV=Low[ind1];  // Íèæíÿÿ ãðàíèöà
               double HighV=High[ind2]; // Âåðõíÿÿ ãðàíèöà
               double TargetU = (HighV-LowV)*(TargetLevel-100)/100+HighV;
               double TargetD = LowV-(HighV-LowV)*(TargetLevel-100)/100;
               // Êàíàë "óòðåííåãî ôëýòà"
               //Print("limit=",limit," StartBar=",StartBar," FinishBar=",FinishBar);
               for(int j=StartBar; j>=FinishBar; j--)
                 {
                  Up[j]=HighV;
                  Down[j]=LowV;
                 }
               // -----------------------
               // Îæèäàåìûå öåëè ïðè ïðîáîå ôëýòà  
               for(j=FinishBar; j>=0; j--)
                 {
                  if(Time[j]<NextDay)
                    {
                     TargetUp[j] = TargetU;
                     TargetDn[j] = TargetD;
                    }
                  else break;
                 }
               // -------------------  
               DrawLabel(Time[iBarShift(Symbol(), 0, BeginDay)], HighV, True, UpColor, 5);   // Ðèñóåì âåðõíþþ öåíîâóþ ìåòêó êàíàëà
               DrawLabel(Time[iBarShift(Symbol(), 0, BeginDay)], LowV, False, DnColor, 5);   // Ðèñóåì íèæíþþ öåíîâóþ ìåòêó êàíàëà
               DrawLabel(Time[FinishBar],TargetU,True,TargetUpColor,5);   // Ðèñóåì âåðõíþþ öåíîâóþ ìåòêó öåëè
               DrawLabel(Time[FinishBar],TargetD,False,TargetDnColor,5);   // Ðèñóåì íèæíþþ öåíîâóþ ìåòêó öåëè
               LastDay=BeginDay;  // Îòìå÷àåì, ÷òî â ýòîò äåíü óðîâíè óæå áûëè íàðèñîâàíû
              }
           }
        }

   WindowRedraw();
//----
   return(0);
  }
//+------------------------------------------------------------------+

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