SessionsFlat

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

#property indicator_chart_window
#property indicator_buffers 6
#property indicator_color1 Yellow
#property indicator_color2 Yellow
#property indicator_color3 Blue
#property indicator_color4 Blue
#property indicator_color5 Red
#property indicator_color6 Red

extern int AzianFlatStart = 0;
extern int AzianFlatEnd = 8;
extern int EuropeanFlatStart = 8;
extern int EuropeanFlatEnd = 16;
extern int AmericanFlatStart = 16;
extern int AmericanFlatEnd = 24;
extern double TargetLevel = 161.8;
extern color UpColor = Turquoise;
extern color DnColor = Red;
extern color TargetUpColor = Gold;
extern color TargetDnColor = Silver;

//---- buffers
double Up1[], Up2[], Up3[];
double Dn1[], Dn2[], Dn3[];
double TargetUp[];
double TargetDn[];
bool Activate = False;
int Start[3], Finish[3];
//+-------------------------------------------------------------------------------------+
//| Custom indicator initialization function                                            |
//+-------------------------------------------------------------------------------------+
int init()
  {
// - 1 - === Ïðîâåðêà ïðàâèëüíîñòè ïåðèîäà ãðàôèêà ======================================
   if(Period() > PERIOD_H1) 
     {
      Comment("Èíäèêàòîð ðàáîòàåò íà òàéìôðåéìàõ ìåíüøå H4!");
      return(0);   
     }
// - 1 - === Îêîí÷àíèå áëîêà ============================================================
   
// - 2 - == Îáíîâëåíèå äàííûõ äíåâíîãî ÒÔ ===============================================   
   Comment("Ïîäîæäèòå, èäåò îáíîâëåíèå äàííûõ äíåâíîãî òàéìôðåéìà...");
   int P = 0;
   while (P < 120)
     {
      iTime(Symbol(), PERIOD_D1, 0);
      if (GetLastError() != 4066) break;
      Sleep(1000);
      P++;
     }
   if (P == 120)
     {
      Comment("Îáíîâëåíèå äàííûõ çàâåðøèëîñü ñ îøèáêîé. Ñîâåòíèê îòêëþ÷åí!");
      Print("Îáíîâëåíèå äàííûõ çàâåðøèëîñü ñ îøèáêîé. Ñîâåòíèê îòêëþ÷åí!");
      return(0);
     }  
   Comment("");  
// - 2 - == Îêîí÷àíèå áëîêà =============================================================

// - 3 - === Ïåðåêîìïîíîâêà âðåìåíè ñåññèé â ìàññèâû è ïðîâåðêà êîððåêòíîñòè äàííûõ =====
   if (!ToArray(0, AzianFlatStart, AzianFlatEnd) || 
       !ToArray(1, EuropeanFlatStart, EuropeanFlatEnd) ||
       !ToArray(2, AmericanFlatStart, AmericanFlatEnd))
     return(0);  
// - 3 - === Îêîí÷àíèå áëîêà ============================================================
     
// - 4 - === Èíèöèàëèçàöèÿ áóôåðîâ èíäèêàòîðà ===========================================
   SetIndexStyle(0, DRAW_ARROW);                                      // Àçèàòñêàÿ ñåññèÿ
   SetIndexBuffer(0, Up1);
   SetIndexArrow(0, 108);                                      
   SetIndexStyle(1, DRAW_ARROW);
   SetIndexBuffer(1, Dn1);
   SetIndexArrow(1, 108);                                      
   SetIndexStyle(2, DRAW_ARROW);                                    // Åâðîïåéñêàÿ ñåññèÿ
   SetIndexBuffer(2, Up2);
   SetIndexArrow(2, 108);                                      
   SetIndexStyle(3, DRAW_ARROW);
   SetIndexBuffer(3, Dn2);
   SetIndexArrow(3, 108);                                      
   SetIndexStyle(4, DRAW_ARROW);                                   // Àìåðèêàíñêàÿ ñåññèÿ
   SetIndexArrow(4, 108);                                      
   SetIndexBuffer(4, Up3);
   SetIndexStyle(5, DRAW_ARROW);
   SetIndexBuffer(5, Dn3);
   SetIndexArrow(5, 108);                                      
   SetIndexEmptyValue(0, 0.0);
   SetIndexEmptyValue(1, 0.0);
   SetIndexEmptyValue(2, 0.0);
   SetIndexEmptyValue(3, 0.0);
   SetIndexEmptyValue(4, 0.0);
   SetIndexEmptyValue(5, 0.0);
// - 4 - === Îêîí÷àíèå áëîêà ============================================================
   

   Activate = True;                                       // èíèöèàëèçàöèÿ ïðîøëà óñïåøíî

   return(0);
  }
  
//+------------------------------------------------------------------+
//| Ïåðåêîìïîíîâêà âõîäíûõ ïàðàìåòðîâ â ìàññèâ                       |
//+------------------------------------------------------------------+
bool ToArray(int Num, int St, int End)
{
 if (St < 0 || End < 0 || St > 24 || End > 24 || St >= End)
     {
      Comment("Çíà÷åíèÿ âðåìåíè Start è End äîëæíû ëåæàòü â äèàïàçîíå îò 0 äî 24 è Start < End.");
      Print("Çíà÷åíèÿ âðåìåíè Start è End äîëæíû ëåæàòü â äèàïàçîíå îò 0 äî 24 è Start < End.");
      return(False);
     } 
 int i = Num-1;    
 while (i >= 0)
   {
    if (Start[i] >= St || Finish[i] >= End || Finish[i] > St)
      {
       Comment("Îáíàðóæåíî ïåðåñå÷åíèå ñåññèé. Èíäèêàòîð ðàáîòàòü íå áóäåò.");
       Print("Îáíàðóæåíî ïåðåñå÷åíèå ñåññèé. Èíäèêàòîð ðàáîòàòü íå áóäåò.");
       return(False);
      }
    i--;
   }    
   
 Start[Num] = St;
 Finish[Num] = End;
 return(True);  
}
  
  
//+------------------------------------------------------------------+
//| 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);
  }
  
//+-------------------------------------------------------------------------------------+
//| Custom indicator iteration function                                                 |
//+-------------------------------------------------------------------------------------+
int start()
  {
//----
   if(!Activate) return(0);

   int counted_bars=IndicatorCounted();
   if (counted_bars>0) counted_bars--;
   int i = iBarShift(Symbol(), 0, iTime(Symbol(), PERIOD_D1, 
                         iBarShift(Symbol(), PERIOD_D1, Time[Bars-counted_bars])));

   while (i >= 0)
     {
      Up1[i] = 0.0;
      Up2[i] = 0.0;
      Up3[i] = 0.0;
      Dn1[i] = 0.0;
      Dn2[i] = 0.0;
      Dn3[i] = 0.0;
      int DayBar = iBarShift(Symbol(), PERIOD_D1, Time[i]);           // Íîìåð áàðà íà D1

      int k = 0;
      for (k = 0; k < 3; k++)
        if (TimeHour(Time[i]) >= Start[k] && TimeHour(Time[i]) < Finish[k])
          {
           if (k == 0)
             {
              DayBar++;
              int j = 2;
             } 
            else
             j = k - 1; 
           datetime BeginDay = iTime(Symbol(), PERIOD_D1, DayBar);    // Ðàñ÷åò âðåìåíè íà÷àëà ñóòîê
           if (!(TimeDayOfWeek(BeginDay) == 5 && k == 0))
             {
              int StartBar = iBarShift(Symbol(), 0, BeginDay+Start[j]*3600);   // Áàð, ñîîòâåòñâóþùèé íà÷àëó ñóòîê ïëþñ ñìåùåíèå â ÷àñàõ
              int FinishBar = iBarShift(Symbol(), 0, BeginDay+Finish[j]*3600)+1; // Áàð, ñîîòâåòñòâóþùèé ïîñëåäíåìó áàðó ïðåäûäóùåé ñåññèè
              double LowV = Low[iLowest(Symbol(), 0, MODE_LOW, StartBar-FinishBar+1, FinishBar)];  // Íèæíÿÿ ãðàíèöà
              double HighV = High[iHighest(Symbol(), 0, MODE_HIGH, StartBar-FinishBar+1, FinishBar)]; // Âåðõíÿÿ ãðàíèöà
             }
            else
             {
              LowV = 0;
              HighV = 0;
             }  
           break;
          } 
          
      while (TimeHour(Time[i]) >= Start[k] && TimeHour(Time[i]) < Finish[k] && i >= 0)
        {
         switch (k)
           {
            case 0:
              Up1[i] = HighV;
              Dn1[i] = LowV;
            break;  
            case 1:
              Up2[i] = HighV;
              Dn2[i] = LowV;
            break;  
            case 2:
              Up3[i] = HighV;
              Dn3[i] = LowV;
            break;  
           }
         i--;  
        }    
     }  

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