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

range breakout mt5 ea.mq5

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

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

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

О программе

Данный советник для MetaTrader 5 анализирует ценовой диапазон на таймфрейме M15 в заданном временном окне и открывает позиции при пробое этого диапазона. В начале указанного диапазона времени он определяет максимум и минимум цены за этот период, а после завершения диапазона при закрытии свечи выше верхней границы открывает покупку, а ниже нижней — продажу. У каждой позиции рассчитываются тейк-профит и стоп-лосс на основе размера диапазона.

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

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

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

НастройкаОписание
RangeStartHour Час начала временного окна для формирования ценового диапазона
RangeStartMin Минута начала временного окна для формирования ценового диапазона
RangeEndHour Час окончания временного окна для формирования ценового диапазона
RangeEndMin Минута окончания временного окна для формирования ценового диапазона
TradingEndHour Час завершения торговой сессии, после которого все открытые позиции закрываются
TradingEndMin Минута завершения торговой сессии, после которой все открытые позиции закрываются
Получить полный код

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

#property version   "1.01"

#include <Trade/Trade.mqh>       // Library for taking trades

input int RangeStartHour = 1;          // Range start hour
input int RangeStartMin = 0;           // Range start minute
input int RangeEndHour = 6;            // Range end hour
input int RangeEndMin = 0;             // Range end minute

input int TradingEndHour = 22;   // Trading end hour
input int TradingEndMin = 0;     // Trading end minute

datetime RangeTimeStart;         // Variable that store the start time of the range
datetime RangeTimeEnd;           // Variable that store the end time of the range
datetime TrandingEndTime;        // Variable that store the end time of trading

double rangeHigh;                // Top part of the range
double rangeLow;                 // Bottom part of the range

double minLot = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MIN); //Mimal possible lots

CTrade trade;                    // Create the object for trading (used when putting positions)
bool isTrade;                    // bool variable for activating or deactivating trading

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

void OnDeinit(const int reason)
  {

  }

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

   calcTimes(); // function for calculating times     ↓↓    (bottom of the code)
   clcRange();  // function for calculating the range ↓↓    (bottom of the code)

   datetime time_current = TimeCurrent() ;

   if(time_current > RangeTimeEnd) // check if the range have finished in order to take a trade
     {
      int d = 0;
      if(isTrade)                                                 // checking if trading is enable or not (if isTrade is true)
        {
         if(rangeHigh > 0 && rangeLow > 0)                        // checking if range High and range low are differente from zero (from function clcRange ↓↓)
           {
            if(close(1) > rangeHigh && time(1) != RangeTimeEnd)   // check if the close of the past bar is higher than the top part of the range (close function ↓↓) and the time is different from the end time
              {
               if(CheckMoneyForTrade(Symbol(), minLot, ORDER_TYPE_BUY))  // Checking if there is enough money
                 {
                  double ask = SymbolInfoDouble(Symbol(), SYMBOL_ASK);        // Get symbol ask
                  double tp = rangeHigh + (rangeHigh - rangeLow);             // calculating the tp for the buy: rangehigh + size of the range
                  tp = Round2Ticksize(tp);
                  rangeLow = Round2Ticksize(rangeLow);
                  if(rangeLow < ask && tp > ask && ask-rangeLow > SYMBOL_TRADE_STOPS_LEVEL*_Point)                              // Validte sl and tp
                    {
                     trade.Buy(minLot, Symbol(), 0, rangeLow, tp);            // entering a buy position
                     isTrade = false;                                         // deactivating the possibility to trade (only 1 trade a day)
                    }
                  else
                    {
                     Print("SL or TP incorrect");
                    }
                 }
               else
                 {
                  Print("Not enough margin for Buy trade");
                  isTrade = false;                                      // deactivating the possibility to trade (only 1 trade a day)
                 }
              }
            if(close(1) < rangeLow && time(1) != RangeTimeEnd)       // check if the close of the past bar is lower than the bottom part of the range (close function ↓↓) and the time is different from the end time
              {
               if(CheckMoneyForTrade(Symbol(), minLot, ORDER_TYPE_SELL)) // Checking if there is enough money
                 {
                  double bid = SymbolInfoDouble(Symbol(), SYMBOL_BID);        // Get symbol bid
                  double tp = rangeLow - (rangeHigh - rangeLow);              // calculating the tp for the sell: rangelow - size of the range
                  tp = Round2Ticksize(tp);
                  rangeHigh = Round2Ticksize(rangeHigh);
                  if(rangeHigh > bid && tp < bid && rangeHigh-bid > SYMBOL_TRADE_STOPS_LEVEL*_Point)
                    {
                     trade.Sell(minLot, Symbol(), 0, rangeHigh, tp);             // entering a sell position
                     isTrade = false;             

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

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

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

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

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

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

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