MorningFlat_V3

Author: Scriptong
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
MorningFlat_V3
//+-------------------------------------------------------------------------------------+
//|                                                                  MorningFlat_V3.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 StartMinute=15;
extern int EndHour=8;
extern int EndMinute=45;
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 || (StartHour==EndHour && StartMinute>=EndMinute))
     {
      Comment("Çíà÷åíèÿ StartHour è EndHour äîëæíû ëåæàòü â äèàïàçîíå îò 0 äî 24 è ",
              "StartHour < EndHour.");
      return(0);
     }

   if(StartMinute<0 || EndMinute<0 || StartMinute>59 || EndMinute>59)
     {
      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);
     }
  }
//+-------------------------------------------------------------------------------------+
//| Ïîäïèñü øèðèíû êàíàëà                                                               |
//+-------------------------------------------------------------------------------------+
void DrawText(datetime TimeL,double Price,string St,color Col)
  {
   string Name="LabWidth"+DoubleToStr(TimeL,0);

   if(ObjectCreate(Name,OBJ_TEXT,0,TimeL,Price))
      ObjectSetText(Name,St,10,"Arial",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 || 
         (TimeMinute(Time[i])>EndMinute && 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+StartMinute*60);
         // Áàð, ñîîòâåòñòâóþùèé ïîñëåäíåìó áàðó "óòðåííåãî ôëýòà"
         int FinishBar=iBarShift(Symbol(),0,BeginDay+EndHour*3600+EndMinute*60)+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;         // Íèæíÿÿ öåëü
                                                                            // Ðèñóåòñÿ êàíàë "óòðåííåãî ôëýòà"
            for(int j=StartBar; j>=FinishBar; j--)
              {
               Up[j]=HighV;
               Down[j]=LowV;
              }
            // -----------------------

            // Îæèäàåìûå öåëè ïðè ïðîáîå ôëýòà  
            for(j=FinishBar; j>=0; j--)
              {
               if(!(Time[j]<NextDay)) break;
               TargetUp[j] = TargetU;
               TargetDn[j] = TargetD;
              }
            // -------------------  

            datetime TB=Time[iBarShift(Symbol(),0,BeginDay+StartHour*3600+
                                       StartMinute*60)];
            DrawLabel(TB,HighV,True,UpColor,5);   // Ðèñóåì âåðõíþþ öåíîâóþ ìåòêó êàíàëà
            DrawLabel(TB,LowV,False,DnColor,5);    // Ðèñóåì íèæíþþ öåíîâóþ ìåòêó êàíàëà
                                                   // Ðèñóåì âåðõíþþ öåíîâóþ ìåòêó öåëè
            DrawLabel(Time[FinishBar],TargetU,True,TargetUpColor,5);
            // Ðèñóåì íèæíþþ öåíîâóþ ìåòêó öåëè
            DrawLabel(Time[FinishBar],TargetD,False,TargetDnColor,5);
            DrawText((Time[FinishBar]-TB)/2+TB,HighV,// Îòîáðàæåíèå øèðèíû êàíàëà
                     DoubleToStr(MathRound((HighV-LowV)/Point),0),Red);
            LastDay=BeginDay;      // Îòìå÷àåì, ÷òî â ýòîò äåíü óðîâíè óæå áûëè íàðèñîâàíû
           }
        }

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

Comments