← К каталогу
Исходный код · ID 4412

! auto sessions sos.mq5

Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Данный продукт представляет собой индикатор для платформы MetaTrader 5, предназначенный для отображения торговых сессий на графиках. Он позволяет выделять до пяти различных временных периодов торговых сессий с помощью графических объектов — прямоугольников, линий и текстовых меток.

Индикатор поддерживает два метода определения времени сессий: автоматический расчёт по смещению восточного часового пояса брокера или ручной ввод времён начала и окончания каждой сессии. Время сессий проверяется на каждом тике, и при выходе за пределы текущего таймфрейма отрисовка приостанавливается.

Настройки индикатора включают индивидуальные цвета и стили отображения для каждой из пяти сессий, параметры шрифта и расположения текстовых меток, а также опции отображения линий открытия сессий. При удалении индикатора с графика все созданные им графические объекты удаляются.

Настройки программы

НастройкаОписание
SessionNames Названия торговых сессий, разделённые слэшем (до пяти сессий).
ShowSessions Отображение торговых сессий на графике (1 — показывать, 0 — скрывать для каждой сессии).
ShowNames Отображение названий торговых сессий на графике (1 — показывать, 0 — скрывать для каждой сессии).
ShowPips Отображение диапазона пипсов торговой сессии на графике (1 — показывать, 0 — скрывать для каждой сессии).
TimeMethod Метод определения времени торговых сессий: по смещению восточного часового пояса брокера или ручной ввод.
__OffsetNote Справочное примечание о смещении восточного часового пояса при использовании автоматического метода определения времени.
BrokerEasternOffset Смещение восточного часового пояса брокера, используемое для автоматического расчёта времени торговых сессий.
Manual_SessionBegins Времена начала торговых сессий при ручном режиме задания времени (формат ЧЧ:ММ:СС через слэш для каждой сессии).
Manual_SessionEnds Времена окончания торговых сессий при ручном режиме задания времени (формат ЧЧ:ММ:СС через слэш для каждой сессии).
Note_SessionSelections Разделитель и заголовок индивидуальных настроек каждой торговой сессии.
Color1 Цвет отображения первой торговой сессии.
Style1 Стиль отображения первой торговой сессии (заливка, линии, вертикальные или горизонтальные линии).
Color2 Цвет отображения второй торговой сессии.
Style2 Стиль отображения второй торговой сессии (заливка, линии, вертикальные или горизонтальные линии).
Color3 Цвет отображения третьей торговой сессии.
Style3 Стиль отображения третьей торговой сессии (заливка, линии, вертикальные или горизонтальные линии).
Color4 Цвет отображения четвёртой торговой сессии.
Style4 Стиль отображения четвёртой торговой сессии (заливка, линии, вертикальные или горизонтальные линии).
Color5 Цвет отображения пятой торговой сессии.
Style5 Стиль отображения пятой торговой сессии (заливка, линии, вертикальные или горизонтальные линии).
Note_CommonSessionSelections Разделитель и заголовок общих настроек торговых сессий.
LineWidth Толщина линий, используемых при отображении торговых сессий.
LineStyle Стиль линий, используемых при отображении торговых сессий.
SessionTextColor Цвет текста названия и диапазона пипсов торговой сессии.
SessionTextFont Шрифт текста названия и диапазона пипсов торговой сессии.
SessionTextFontSize Размер шрифта текста названия и диапазона пипсов торговой сессии.
SessionTextBaseCorner Базовый угол для размещения текстовой метки торговой сессии на графике.
SessionTextAnchorPoint Точка привязки текстовой метки названия или диапазона пипсов торговой сессии.
PipsRounded Округление значений пипсов при отображении диапазона торговой сессии.
PipsWord Отображение слова «пипс» после числового значения диапазона торговой сессии.
Note_IndicatorSelections Разделитель и заголовок настроек индикатора.
MinTimeframe Минимальный таймфрейм, на котором отображаются торговые сессии.
MaxTimeframe Максимальный таймфрейм, на котором отображаются торговые сессии.
MaxBars Максимальное количество баров для расчёта и отображения сессий.
Note_OpenLinesSelections Разделитель и заголовок настроек линий открытия сессий.
Plot_Open_Lines Отображение линий открытия торговых сессий на графике.
OpenClr1 Цвет линии открытия первой торговой сессии.
OpenClr2 Цвет линии открытия второй торговой сессии.
OpenClr3 Цвет линии открытия третьей торговой сессии.
OpenClr4 Цвет линии открытия четвёртой торговой сессии.
OpenClr5 Цвет линии открытия пятой торговой сессии.
SessLineStyle Стиль линий открытия торговых сессий.
SessLineLineWidth Толщина линий открытия торговых сессий.
LinesInForeground Отображение линий открытия сессий на переднем плане графика.
SessNameOnLine Отображение названия торговой сессии на линии открытия.
Получить полный код

Поиск по коду файла

#property indicator_chart_window
#property indicator_buffers 0

#define PROPERTY_COPYRIGHT     "2021 Modifications by iDiamond  ©  25 May 2022 modified by Tankk "
#define PROPERTY_VERSION       "22.145"                          // Year.Day of Year
#define PROPERTY_LINK          ""

#define PROPERTY_DESCRIPTION_1 "Highlight Session Trading Periods"
#define PROPERTY_DESCRIPTION_2 " "
#define PROPERTY_DESCRIPTION_3 "Display up to a maximum of 5 different Session periods"
#define PROPERTY_DESCRIPTION_4 " "
#define PROPERTY_DESCRIPTION_5 "Check Eastern local time: www.timeanddate.com/worldclock/usa/new-york"
#define PROPERTY_DESCRIPTION_6 "Reliable Forex hours: www.forexmarkethours.com, www.markethours.net"

#ifdef __MQL4__
#define MQL4(x) x
#else
#define MQL4(x)
#endif

#define DEBUG 0                // #define DEBUG 1   // Print useful info in the Experts tab.
#define DbugInfo(x) x          // define as x for informational debugging 4

#define INPUTVARDELIMITER      "================================"

#define ONEHOURsecs 3600       // 1 hour in seconds
#define ONEDAYsecs  86400      // 1 day in seconds
#define ONEDAYmins  1440       // 1 day in minutes
#define NAMEPIPDELIMITER " "   // String between Session Name and Session Pips
#define NAMEPIPMARGIN    " "   // Pad the Session Text with this string
#define REASON_USER_INIT 2021  // Custom OnDeinit() reason
#define WINMAXVAL 1.5  //100.0        // Sufficiently large Window Minimum/Maximum that will ever be visible during whole Timeseries scroll

#define MAX_SESSIONS 5  // This should be equal to the number of input colors and >= the number of sessions in $SESS_NAMES_DFAULT
#define SESS_NAMES_DEFAULT "Sydney/Tokyo/Frankfurt/London/NY"   // These should all be unique.

enum ENUM_TimeMethod   { Broker_Eastern_Offset, // Broker Eastern Time Zone Offset
                         Manual                 // Manual Input of Start and End Times 
                       };
enum ENUM_SessionStyle { Rectangle_Fill,            // Filled Rectangle
                         Rectangle_Line,            // Line Bordered Rectangle 
                         Vertical_Fill,             // Filled Vertical
                         Vertical_Lines,            // Vertical Lines, Begin and End
                         Vertical_Line_Begin,       // Vertical Line, Begin
                         Vertical_Line_End,         // Vertical Line, End
                         Vertical_Fill_All,         // Filled Vertical in all Sub-Windows                         
                         Vertical_Lines_All,        // Vertical Lines in all Sub-Windows, Begin and End
                         Vertical_Lines_All_Begin,  // Vertical Lines in all Sub-Windows, Begin
                         Vertical_Lines_All_End,    // Vertical Lines in all Sub-Windows, End
                         Horizontal_Lines,          // Horizontal Lines, High and Low
                         Horizontal_Line_High,      // Horizontal Line, High
                         Horizontal_Line_Low        // Horizontal Line, Low
                       };                  
enum ENUM_LineType     { VLine_Begin, VLine_End, HLine_High, HLine_Low };

enum ENUM_YESNO
  {
   YES,
   NO, 
  };

sinput string            SessionNames           = SESS_NAMES_DEFAULT;               // Session Names
sinput string            ShowSessions           = "1/0/0/1/1";                      // Show Sessions
sinput string            ShowNames              = "1/0/0/1/1";                      // Show Session Names
sinput string            ShowPips               = "1/0/0/1/1";                      // Show Session Pips
sinput ENUM_TimeMethod   TimeMethod             = Broker_Eastern_Offset;            // Time Method
sinput string            __OffsetNote           = "..exactly *5* sessions above.";  // Note: If Using Eastern Time Zone Offset...
sinput int               BrokerEasternOffset    = 7;                                // Broker Eastern Time Zone Offset

sinput string            Manual_SessionBegins   = "00:00:00/02:00:00/09:00:00/10:00:00/14:00:00";  // Manual Session Begin Times
sinput string            Manual_SessionEnds     = "08:59:59/10:59:59/17:59:59/18:59:59/23:59:59";  // Manual Session End Times

sinput string Note_SessionSelections            = INPUTVARDELIMITER;                // Individual Session Options
sinput color             Color1                 = clrBlue;                          // Session 1 Color
sinput ENUM_SessionStyle Style1                 = Rectangle_Fill;                   // Session 1 Style
sinput color             Color2                 = clrRed;                           // Session 2 Color
sinput ENUM_SessionStyle Style2                 = Rectangle_Fill;                   // Session 2 Style 
sinput color             Color3                 = clrOrange;                        // Session 3 Color
sinput ENUM_SessionStyle Style3                 = Rectangle_Fill;                   // Session 3 Style
sinput color             Color4                 = clrGreen;                         // Session 4 Color
sinput ENUM_SessionStyle Style4                 = Rectangle_Fill;                   // Session 4 Style
sinput color             Color5                 = clrGray;                          // Session 5 Color
sinput ENUM_SessionStyle Style5                 = Rectangle_Fill;                   // Session 5 Style

sinput string Note_CommonSessionSelections      = INPUTVARDELIMITER;                // Common Session Options

sinput int               LineWidth              = 1;                                // Line Width
sinput ENUM_LINE_STYLE   LineStyle              = STYLE_SOLID;                      // Line Style
sinput color             SessionTextColor       = clrGoldenrod;                     // Session Name/Pip Text Colot
sinput string            SessionTextFont        = "Arial Bold";                     // Session Name/Pip Text Font
sinput int               SessionTextFontSize    = 9;                                // Session Name/Pip Text Font Size
sinput ENUM_BASE_CORNER  SessionTextBaseCorner  = CORNER_LEFT_UPPER;                // Session Name/Pip Text Base Corner
sinput ENUM_ANCHOR_POINT SessionTextAnchorPoint = ANCHOR_LEFT_UPPER;                // Session Name/Pip Text Anchor Point
sinput bool              PipsRounded            = true;                             // Round Off Pip Values?

sinput bool              PipsWord               = false;                            // Display " pips" After Pip Value?

sinput string Note_IndicatorSelections          = INPUTVARDELIMITER;                // Indicator Options
sinput ENUM_TIMEFRAMES   MinTimeframe           = PERIOD_M1;                        // Minimum Timeframe to Display Sessions
sinput ENUM_TIMEFRAMES   MaxTimeframe           = PERIOD_H1;                        // Maximum Timeframe to Display Sessions
sinput int               MaxBars                = 1440;                             // Max Bars to Use

sinput string                               Note_OpenLinesSelections  = INPUTVARDELIMITER;  // Open Lines Options
sinput ENUM_YESNO                           Plot_Open_Lines           = YES;                // Plot Opem levels?
sinput color                                OpenClr1                  = clrLightBlue;       // Session 1 Open lines color
sinput color                                OpenClr2                  = clrLightSalmon;     // Session 2 Open lines color
sinput color                                OpenClr3                  = clrLightCoral;      // Session 3 Open lines color
sinput color                                OpenClr4                  = clrLightGreen;      // Session 4 Open lines color
sinput color                                OpenClr5                  = clrDimGray;         // Session 5 Open lines color
sinput ENUM_LINE_STYLE                      SessLineStyle             = STYLE_SOLID;        // Open lines style
sinput int                                  SessLineLineWidth         = 4;                  // Open lines width
sinput ENUM_YESNO                           LinesInForeground         = YES;                // Lines on foreground?
sinput ENUM_YESNO                           SessNameOnLine            = YES;                // Session name on Open Line?

const string asEASTERN_BEGINS[MAX_SESSIONS] = {"17:00:00", "19:00:00", "02:00:00", "03:00:00", "08:00:00"};
const string asEASTERN_ENDS  [MAX_SESSIONS] = {"01:59:59", "03:59:59", "10:59:59", "11:59:59", "16:59:59"};

string   gsObjectPrefix;              // For unique Object Names with multiple indicators

int               giNSessions;                 // Number of Sessions to Display
string            gasNames         [MAX_SESSIONS];  // Session Name
bool              gabShowSess      [MAX_SESSIONS],  // Show Session?
                  gabShowName      [MAX_SESSIONS],  // Show Session Text with Session Name
                  gabShowPips      [MAX_SESSIONS];  // Show Session Text with Session Pips range value 
color             gaoColors        [MAX_SESSIONS];  // Session Color
ENUM_SessionStyle gaeStyles        [MAX_SESSIONS];  // Session Style  

color             sesColors        [MAX_SESSIONS];  // Open Session Color

datetime          galTimeBeginSecs [MAX_SESSIONS],  // Session Begin in seconds, Date portion is 0000.00.00
                  galTimeEndSecs   [MAX_SESSIONS];  // Session End in seconds,   Date portion is 0000.00.00

int OnInit(void)
{
      // код доступен только после оплаты
   } // OnInit()

int OnCalculate(const int       rates_total,      // size of input time series
                const int       prev_calculated,  // bars handled in previous call
                const datetime& time[],           // Time
                const double&   open[],           // Open
                const double&   high[],           // High
                const double&   low[],            // Low
                const double&   close[],          // Close
                const long&     tick_volume[],    // Tick Volume
                const long&     volume[],         // Real Volume
                const int&      spread[])         // Spread
{
    bool bResult;
    int giS, iBr, iStartCalcAt, iLimit, iBarSessionBegin, iBarSessionEnd;
    datetime dtOldest = 0, dtNewest = 0, dtCalled = TimeLocal(), dtExit, dtSessionBegin, dtSessionEnd;
    double dHighest, dLowest, dOpen;

    if ((PeriodSeconds(PERIOD_CURRENT) < PeriodSeconds(MinTimeframe))  ||  (PeriodSeconds(PERIOD_CURRENT) > PeriodSeconds(MaxTimeframe)))
        return(rates_total);  // Inactive Timeframe now (Can be switched to an allowed Timeframe later)

    bResult = ArraySetAsSeries(time, true);

    bResult = ArraySetAsSeries(high, true);

    bResult = ArraySetAsSeries(low, true);

    /* int iSize = ArraySize(time);
    DbugInfo( Print(__FILE__, " ", __FUNCTION__, "@", __LINE__, " ArraySize(time) = ", iSize, " vs ", rates_total); )
    iSize = ArraySize(high);
    DbugInfo( Print(__FILE__, " ", __FUNCTION__, "@", __LINE__, " ArraySize(high) = ", iSize, " vs ", rates_total); )
    iSize = ArraySize(low);
    DbugInfo( Print(__FILE__, " ", __FUNCTION__, "@", __LINE__, " ArraySize(low)  = ", iSize, " vs ", rates_total); ) */

    if (rates_total > 0)
      {
          dtOldest = time[(rates_total > 0) ? (rates_total - 1) : 0];
          dtNewest = time[0];
      }

    iStartCalcAt = rates_total - prev_calculated;
    if (iStartCalcAt > MaxBars)
        iStartCalcAt = MaxBars;
    if (iStartCalcAt > 0)  // Subtract one as array index, but process at least the [0] bar otherwise
      iStartCalcAt--; 

    for (giS = 0; giS < giNSessions; giS++)
      {
          if (! gabShowSess[giS])  // Skip unselected Sessions 
              continue;

          iLimit = iStartCalcAt;

          for (iBr = 0; iBr <= iLimit; iBr++) // Process newest to oldest, assuming most recent bars are most likely visible    
            {
                if ( ((dtSessionBegin = GetSessionBegin(galTimeBeginSecs[giS], galTimeEndSecs[giS], time[iBr])) < 0) ||
                     ((dtSessionEnd   = GetSessionEnd  (galTimeBeginSecs[giS], galTimeEndSecs[giS], time[iBr])) < 0) )
                  {
                      /* DbugInfo( Print(__FILE__, " ", __FUNCTION__, "@", __LINE__, " ", gasNames[giS], " Skip (", iBr, ") ",
                                      TimeToString(time[iBr], TIME_DATE|TIME_MINUTES), " ! ",
                                      TimeToString(galTimeBeginSecs[giS], TIME_SECONDS), " - ", 
                                      TimeToString(galTimeEndSecs  [giS], TIME_SECONDS)); ) */
                      continue;
                  }

                iBarSessionBegin = GetBeginBar(dtSessionBegin, dtSessionEnd, iBr, time, (rates_total > 0) ? (rates_total - 1) : 0);
                iBarSessionEnd   = GetEndBar  (dtSessionBegin, dtSessionEnd, iBr, time, 0);

                dHighest = HighestPrice(high, iBarSessionBegin, iBarSessionEnd);
                dLowest  = LowestPrice (low,  iBarSessionBegin, iBarSessionEnd);
                dOpen = iOpen(_Symbol,_Period,iBarSessionBegin);

                /* DbugInfo( Print(__FILE__, " ", __FUNCTION__, "@", __LINE__, " ", gasNames[giS], 
                                " Draw (", iBr, ",", iBarSessionBegin, ",", iBarSessionEnd, ") ", 
                                TimeToString(time[iBr], TIME_DATE|TIME_MINUTES), ",  (",
                                time[iBarSessionBegin], " - ", time[iBarSessionEnd], ", highest= ", 
                                DoubleToString(dHighest, _Digits), ", lowest= ", DoubleToString(dLowest, _Digits), ")"); ) */
                DrawSession(gasNames[giS], gaoColors[giS], gaeStyles[giS], gabShowName[giS], gabShowPips[giS], 
                            time[iBarSessionBegin], time[iBarSessionEnd], dHighest, dLowest, dOpen);
                if(Plot_Open_Lines==YES)
                HLINE(gsObjectPrefix+gasNames[giS]+" Open level"+iBr,dOpen,dOpen,time[iBarSessionBegin],time[iBarSessionEnd],sesColors[giS],SessLineStyle,SessLineLineWidth);           

                iBr = iBarSessionBegin;
            }
      } 

    ChartRedraw();  // Per ChartRedraw() documentation, Usually it is used after changing the object properties.

    dtExit = TimeLocal();
    /* DbugInfo( Print(__FILE__, " ", __FUNCTION__, "@", __LINE__, 
                    " rates_total= ",  rates_total, " (",  TimeToString(dtOldest, TIME_DATE|TIME_SECONDS), ")", 
                    ", prev_calculated= " , prev_calculated, " (", TimeToString(dtNewest, TIME_DATE|TIME_SECONDS), ")  <",
                    TimeToString(dtCalled, TIME_SECONDS), "-", TimeToString(dtExit, TIME_SECONDS), "> Elapsed= ", 
                    TimeToString(dtExit - dtCalled, TIME_SECONDS)); ) */
    return(rates_total); 
} // OnCalculate()

/*
void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam)
{
    switch (id)
      {
          case CHARTEVENT_KEYDOWN:
               break;
          case CHARTEVENT_MOUSE_MOVE:
          case CHARTEVENT_MOUSE_WHEEL:
               break;
          case CHARTEVENT_CLICK:         // Mouse click on a chart
               break;
          case CHARTEVENT_OBJECT_CLICK:  // lparam = X coordinate, dparam = Y coordinate, sparam = Name of the graphical object
          case CHARTEVENT_OBJECT_DRAG:
               break;
          case CHARTEVENT_OBJECT_ENDEDIT:
               break;                                                  
          case CHARTEVENT_OBJECT_CREATE: 
          case CHARTEVENT_OBJECT_CHANGE:
          case CHARTEVENT_OBJECT_DELETE:
               break;
          case CHARTEVENT_CHART_CHANGE:
               break;
          case CHARTEVENT_CUSTOM:
          case CHARTEVENT_CUSTOM_LAST:
               break;
          default:
               break;
      }
}
*/ 

void OnDeinit(const int reason)
{
    int iResult;   Comment("");

    iResult = ObjectsDeleteAll(0, gsObjectPrefix);    

}

inline void DrawSession(const string sName, color clrSession, ENUM_SessionStyle SessionStyle, bool bShowName, bool bShowPips, 
                        datetime dtSessionBegin, datetime dtSessionEnd, double dHighest, double dLowest, double dOpen)
{
    bool bResult, bResult1, bResult2, bResult3, bResult4, bResult5, bResult6, bResult7, bResult8, bResult9, 
         bBack = true, bFill, bAllWins;
    int iTotalWindows=0, iSubWin=0, iResult1, iResult2;
    datetime dtMidnight, dtSessionTextDatetime;
    double dTextPrice;
    string sObjName, sText = "";

    iResult1 = iResult2 = 0;
    bResult = bResult1 = bResult2 = bResult3 = bResult4 = bResult5 = bResult6 = bResult7 = bResult8 = bResult9 = true;

    dtMidnight = DateFloorMidnight(dtSessionBegin);

    switch (SessionStyle)
      {
          case Vertical_Lines:
          case Vertical_Line_Begin:
          case Vertical_Line_End:
          case Vertical_Lines_All:
          case Vertical_Lines_All_Begin:
          case Vertical_Lines_All_End:
               if ( (SessionStyle == Vertical_Lines_All)       || 
                    (SessionStyle == Vertical_Lines_All_Begin) || (SessionStyle == Vertical_Lines_All_End) )
                   bAllWins = true;
               else
                   bAllWins = false;

               if ( (SessionStyle == Vertical_Lines)     || (SessionStyle == Vertical_Line_Begin)  ||
                    (SessionStyle == Vertical_Lines_All) || (SessionStyle == Vertical_Lines_All_Begin) )
                 {
                   sObjName = FormSessionObjName(0, dtMidnight, sName, "Begin");
                   if ( (iResult1 = ObjectFind(0, sText)) < 0 )
                     {   // If object doesn't exist..
                         bResult  = ObjectCreate    (0, sObjName, OBJ_VLINE, 0,   dtSessionBegin, 0.0);                
                         bResult1 = ObjectSetInteger(0, sObjName, OBJPROP_COLOR,  clrSession);
                         bResult2 = ObjectSetInteger(0, sObjName, OBJPROP_FILL,   true);                      
                         bResult3 = ObjectSetInteger(0, sObjName, OBJPROP_STYLE,  LineStyle);
                         bResult4 = ObjectSetInteger(0, sObjName, OBJPROP_WIDTH,  LineWidth);
                         bResult5 = ObjectSetInteger(0, sObjName, OBJPROP_BACK,   true);

                         bResult7 = ObjectSetInteger(0, sObjName, OBJPROP_RAY,    bAllWins);
                                    ObjectSetInteger(0, sObjName, OBJPROP_SELECTABLE, false);
                     }
                   bResult8 = ObjectSetInteger(0, sObjName, OBJPROP_TIME, dtSessionBegin);                   
                 } 

               if ( (SessionStyle == Vertical_Lines)     || (SessionStyle == Vertical_Line_End)  ||
                    (SessionStyle == Vertical_Lines_All) || (SessionStyle == Vertical_Lines_All_End) )
                 {
                   sObjName = FormSessionObjName(0, dtMidnight, sName, "End");
                   if ( (iResult2 = ObjectFind(0, sObjName)) < 0 )
                     {   // If object doesn't exist..
                         bResult  = ObjectCreate    (0, sObjName, OBJ_VLINE, 0,  dtSessionEnd,   0.0);                
                         bResult1 = ObjectSetInteger(0, sObjName, OBJPROP_COLOR, clrSession);  
                         bResult2 = ObjectSetInteger(0, sObjName, OBJPROP_FILL,  true);                         
                         bResult3 = ObjectSetInteger(0, sObjName, OBJPROP_STYLE, LineStyle);
                         bResult4 = ObjectSetInteger(0, sObjName, OBJPROP_WIDTH, LineWidth);
                         bResult5 = ObjectSetInteger(0, sObjName, OBJPROP_BACK,  true);  

                         bResult7 = ObjectSetInteger(0, sObjName, OBJPROP_RAY,   bAllWins);   
                                    ObjectSetInteger(0, sObjName, OBJPROP_SELECTABLE, false);
                     }
                   bResult8 = ObjectSetInteger(0, sObjName, OBJPROP_TIME, dtSessionEnd);
                 }
               break;                

          case Horizontal_Lines:
          case Horizontal_Line_High:
          case Horizontal_Line_Low:
               MQL4( bBack = false; )
               if ( (SessionStyle == Horizontal_Lines) || (SessionStyle == Horizontal_Line_High) )
                 {

Показано первые 50% кода (символов: 29179)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
2 917,90₽ ≈ $35.66