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

Smart Session Breakout

smartsessionbreakout (2).mq4
Вы автор или правообладатель?

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

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

О программе

Smart Session Breakout — это пользовательский индикатор для платформы MetaTrader 4, предназначенный для анализа ценовых диапазонов азиатской торговой сессии и определения пробоев этих диапазонов. Индикатор рассчитывает максимум и минимум цены за заданный временной интервал сессии, отображает их в виде диапазонной коробки на графике и формирует сигналы покупки и продажи при пробое верхней или нижней границы.

Для фильтрации ложных сигналов индикатор предоставляет опциональный фильтр на основе индикатора ATR, позволяющий подтверждать пробой только при достаточной силе движения цены. Сигналы могут выдаваться как в реальном времени, так и только по закрытию бара, что исключает перерисовку.

Индикатор включает встроенную информационную панель с отображением текущей фазы сессии, спреда, значения ATR и таймера до закрытия бара. Также поддерживаются многоканальные уведомления: всплывающие окна, звуковые сигналы, email и push-уведомления на мобильное устройство.

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

НастройкаОписание
InpAsianStart Время начала азиатской сессии в брокерном часовом поясе (формат ЧЧ:ММ)
InpAsianEnd Время окончания азиатской сессии в брокерном часовом поясу (формат ЧЧ:ММ)
InpMaxDays Максимальное количество дней истории для обработки на графике
InpMinBoxPips Минимальная допустимая высота диапазона в пипсах для фильтрации коробки
InpMaxBoxPips Максимальная допустимая высота диапазона в пипсах для фильтрации коробки
InpSignalOnClose Подтверждение сигнала только по закрытию бара для исключения перерисовки
InpUseATRFilter Включить или отключить фильтр расширения на основе ATR для подтверждения пробоя
InpATRPeriod Период расчёта индикатора ATR (средний истинный диапазон)
InpATRCoeff Минимальное соотношение тела пробойного бара к значению ATR для подтверждения пробоя
InpBoxColor Цвет линий диапазонной коробки азиатской сессии
InpFillBox Включить или отключить заливку внутри диапазонной коробки азиатской сессии
InpUpperLineCol Цвет верхней границы диапазонной коробки (уровень сопротивления)
InpLowerLineCol Цвет нижней границы диапазонной коробки (уровень поддержки)
InpShowDash Включить или отключить отображение информационной панели дашборда на графике
InpCorner Угол экрана, в котором располагается панель дашборда
InpBgColor Цвет фона панели дашборда
InpTxtColor Цвет текста на панели дашборда
InpAccentColor Акцентный цвет для выделения элементов на панели дашборда
InpPopupAlert Включить или отключить всплывающие уведомления-алерты на графике
InpSoundAlert Включить или отключить звуковой сигнал при появлении торгового сигнала
InpSendEmail Включить или отключить отправку email-уведомлений при появлении сигнала
InpSendPush Включить или отключить отправку push-уведомлений на мобильное устройство
Получить полный код

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

#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 clrLimeGreen  // Buy Signal Arrow
#property indicator_color2 clrRed       // Sell Signal Arrow
#property indicator_color3 clrDodgerBlue // Upper Range Level
#property indicator_color4 clrDeepPink   // Lower Range Level
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 1
#property indicator_width4 1

double BufferBuy[];
double BufferSell[];
double BufferUpperLevel[];
double BufferLowerLevel[];

input string   InpAsianStart    = "00:00";    // Asian Session Start (Broker Time HH:MM)
input string   InpAsianEnd      = "08:00";    // Asian Session End (Broker Time HH:MM)
input int      InpMaxDays       = 30;         // Max Days to Process on Chart
input double   InpMinBoxPips    = 8.0;        // Min Range Box Height (Pips)
input double   InpMaxBoxPips    = 70.0;       // Max Range Box Height (Pips)
input bool     InpSignalOnClose = true;       // Confirm Signal on Bar Close (Non-Repainting)

input bool     InpUseATRFilter  = true;       // Enable ATR Expansion Filter
input int      InpATRPeriod     = 14;         // ATR Period
input double   InpATRCoeff      = 0.8;        // Min Breakout Candle Body vs ATR Ratio

input color    InpBoxColor      = C'30,50,90'; // Asian Box Color (Dark Navy)
input bool     InpFillBox       = true;       // Fill Asian Range Box
input color    InpUpperLineCol  = clrDodgerBlue;// Upper Line Color
input color    InpLowerLineCol  = clrDeepPink; // Lower Line Color

input bool     InpShowDash      = true;       // Show On-Screen Dashboard Panel
input ENUM_BASE_CORNER InpCorner= CORNER_RIGHT_UPPER; // Panel Position Corner
input color    InpBgColor       = C'18,24,38';// Dashboard Background Color
input color    InpTxtColor      = clrWhite;   // Dashboard Text Color
input color    InpAccentColor   = C'0,195,255';// Dashboard Accent Highlight

input bool     InpPopupAlert    = true;       // Enable Pop-up Alert
input bool     InpSoundAlert    = true;       // Enable Sound Alert
input bool     InpSendEmail     = false;      // Enable Email Alert
input bool     InpSendPush      = false;      // Enable Push Alert to Mobile

datetime g_lastAlertTime = 0;
string   g_prefix        = "SSB_";
double   g_pipSize       = 0.0001;

void DrawSessionBox(int dayId, datetime tStart, datetime tEnd, double highVal, double lowVal);
void UpdateDashboard();
void CreateOrUpdateLabel(string id, string text, int x, int y, color col, int fontSize=8, bool isBold=false);
void TriggerAlert(string msg);
void CleanUpObjects();

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

void OnDeinit(const int reason)
{
   CleanUpObjects();
}

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[])
{
      // код доступен только после оплаты
   }
   if(rates_total < 50) return(0);

   int limit = rates_total - prev_calculated;
   if(prev_calculated > 0) limit++;

   int maxBars = iBarShift(NULL, 0, TimeCurrent() - InpMaxDays * 86400);
   if(maxBars > 0 && limit > maxBars) limit = maxBars;

   for(int i = limit - 1; i >= 0; i--)
   {
      BufferBuy[i]        = EMPTY_VALUE;
      BufferSell[i]       = EMPTY_VALUE;
      BufferUpperLevel[i] = EMPTY_VALUE;
      BufferLowerLevel[i] = EMPTY_VALUE;

      datetime curTime = time[i];
      MqlDateTime dt;
      TimeToStruct(curTime, dt);

      datetime dayStart = StringToTime(TimeToStr(curTime, TIME_DATE) + " " + InpAsianStart);
      datetime dayEnd   = StringToTime(TimeToStr(curTime, TIME_DATE) + " " + InpAsianEnd);

      if(dayEnd <= dayStart) dayEnd += 86400; // Overlap handling

      if(curTime >= dayEnd)
      {
         int barStart = iBarShift(NULL, 0, dayStart, true);
         int barEnd   = iBarShift(NULL, 0, dayEnd, true);

         if(barStart != -1 && barEnd != -1 && barStart > barEnd)
         {
            int count = barStart - barEnd + 1;
            int highestShift = iHighest(NULL, 0, MODE_HIGH, count, barEnd);
            int lowestShift  = iLowest(NULL, 0, MODE_LOW, count, barEnd);

            if(highestShift != -1 && lowestShift != -1)
            {
               double boxHigh = High[highestShift];
               double boxLow  = Low[lowestShift];
               double boxPips = (boxHigh - boxLow) / g_pipSize;

               if(boxPips >= InpMinBoxPips && boxPips <= InpMaxBoxPips)
               {
                  BufferUpperLevel[i] = boxHigh;
                  BufferLowerLevel[i] = boxLow;

                  if(i == 0 || (i > 0 && TimeDay(time[i]) != TimeDay(time[i+1])))
                  {
                     DrawSessionBox(dt.day, dayStart, dayEnd, boxHigh, boxLow);
                  }

                  if(!InpSignalOnClose || i >= 1)
                  {
        

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

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

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

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

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

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

Стоимость полного кода
876,70₽ ≈ $10.71