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

multibreakout_v0[1].1.3a.mq4

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

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

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

О программе

MultiBreakOut — торговый советник для MetaTrader 4, который размещает отложенные ордера BUYSTOP и SELLSTOP на основе цен предыдущего бара с заданным смещением в пунктах. Советник рассчитывает уровни входа, стоп-лосса и тейк-профита на основе текущих рыночных данных и пользовательских параметров.

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

Встроены механизмы фиксации безубыточности (Break Even) и плавающей безубыточности (Moving Break Even) для открытых позиций. Плавающая безубыточность активируется через заданное количество часов после начала сессии и модифицирует стоп-лосс ордеров.

Перед размещением ордеров советник проверяет свободный маржинальный баланс на счёте. При недостатке средств размещение ордеров прекращается. Все торговые операции выполняются через стандартные API MetaTrader 4: OrderSend, OrderClose и OrderModify.

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

НастройкаОписание
LotSize Размер лота — Объём лота для каждого размещаемого ордера.
BrokerOffsetToGMT Смещение брокера к GMT — Смещение часового пояса брокера относительно GMT, используемое для корректировки расчёта торгового времени.
NumberOfOrdersPerSide X TakeProfitIncrement = Highest TakeProfit Level (NumberOfOrdersPerSide) Количество ордеров на сторону — Количество отложенных ордеров, размещаемых в каждом направлении за одну сессию.
TakeProfitIncrement Инкремент тейк-профита — Инкремент в пунктах для расчёта уровней тейк-профита по каждому ордеру.
Trade1 Сессия 1 — Переключатель включения или отключения первой торговой сессии.
Time1 Время сессии 1 — Час начала первой торговой сессии.
Trade2 Сессия 2 — Переключатель включения или отключения второй торговой сессии.
Time2 Время сессии 2 — Час начала второй торговой сессии.
Trade3 Сессия 3 — Переключатель включения или отключения третьей торговой сессии.
Time3 Время сессии 3 — Час начала третьей торговой сессии.
Trade4 Сессия 4 — Переключатель включения или отключения четвёртой торговой сессии.
Time4 Время сессии 4 — Час начала четвёртой торговой сессии.
ExitMinute Минута закрытия — Минута, в которой советник закрывает все открытые и отложенные ордера по текущему символу.
StopLoss Стоп-лосс — Расстояние стоп-лосса в пунктах от цены размещения отложенного ордера.
PipsForEntry Пункты для входа — Смещение в пунктах от цен предыдущего бара для расчёта цен размещения отложенных ордеров.
BreakEven Безубыточность — Расстояние в пунктах для активации фиксации безубыточности по открытым позициям.
MovingBreakEven Плавающая безубыточность — Переключатель включения или отключения плавающей безубыточности для открытых позиций.
MovingBEHoursToStart Часы до плавающей безубыточности — Количество часов после начала сессии для активации плавающей безубыточности.
Получить полный код

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

/*
Need To Do List:

For v0.2

1. Place only one order for 1 lot.
2. Sell off 0.1 lot when TP levels are met.
*/

#include <stdlib.mqh>
#include <WinUser32.mqh>

extern double  LotSize=0.1;
extern int     BrokerOffsetToGMT       = 0;
extern int     NumberOfOrdersPerSide   = 20;    // NumberOfOrdersPerSide X TakeProfitIncrement = Highest TakeProfit Level
extern int     TakeProfitIncrement     = 5;
extern bool    Trade1                  = true;
extern int     Time1                   = 6;
extern bool    Trade2                  = true;
extern int     Time2                   = 12;
extern bool    Trade3                  = true;
extern int     Time3                   = 18;
extern bool    Trade4                  = true;
extern int     Time4                   = 0;
extern int     ExitMinute              = 55;
extern int     StopLoss                = 20;
extern int     PipsForEntry            = 5;
extern int     BreakEven               = 10;
extern bool    MovingBreakEven         = true;
extern int     MovingBEHoursToStart    = 3;

int start() {
      // код доступен только после оплаты
   }
   int cnt, ticket;
   if(Bars<100) {
      Print("bars less than 100");
      return(0);
   }
   double   BE,MBE;
   double   TradeTime1=Time1+1;
   double   TradeTime2=Time2+1;
   double   TradeTime3=Time3+1;
   double   TradeTime4=Time4+1;
   double   PFE=PipsForEntry;
   double   CurrentHour=TimeHour(CurTime()-(BrokerOffsetToGMT*3600));
   double   CurrentMinute=TimeMinute(CurTime());

   if(TradeTime1>=24) {
     TradeTime1=TradeTime1-24;
   }
   if(TradeTime2>=24) {
     TradeTime2=TradeTime2-24;
   }
   if(TradeTime3>=24) {
     TradeTime3=TradeTime3-24;
   }
   if(TradeTime4>=24) {
     TradeTime4=TradeTime4-24;
   }

   if((CurrentHour==TradeTime1 && CurrentMinute<=59 && Trade1) || (CurrentHour==TradeTime2 && CurrentMinute<=59 && Trade2) || 
      (CurrentHour==TradeTime3 && CurrentMinute<=59 && Trade3) || (CurrentHour==TradeTime4 && CurrentMinute<=59 && Trade4)) {
      double highprice=iHigh(NULL,60,1);
      double lowprice=iLow(NULL,60,1);
   }
   int      total=OrdersTotal();
   double   Spread=Ask-Bid;
   double   hprice=Spread+highprice+PFE*Point;
   double   lprice=lowprice-PFE*Point;
   double   PreviousBarHigh=iHigh(NULL,0,1);
   double   PreviousBarLow=iLow(NULL,0,1);
   double   Previous2ndBarHigh=iHigh(NULL,0,2);
   double   Previous2ndBarLow=iLow(NULL,0,2);
   int      TPI=TakeProfitIncrement;
   int      i,j;
   int      MBEHour1=Time1+BrokerOffsetToGMT+MovingBEHoursToStart;
   int      MBEHour2=Time2+BrokerOffsetToGMT+MovingBEHoursToStart;
   int      MBEHour3=Time3+BrokerOffsetToGMT+MovingBEHoursToStart;
   int      MBEHour4=Time4+BrokerOffsetToGMT+MovingBEHoursToStart;
   bool     need_long  = true;
   bool     need_short = true;
   bool     MovingBE1  = false;
   bool     MovingBE2  = false;
   bool     MovingBE3  = false;
   bool     MovingBE4  = false;
   bool     FirstBE    = false;

   if(MBEHour1>=24) {
     MBEHour1=MBEHour1-24;
   }
   if(MBEHour2>=24) {
     MBEHour2=MBEHour2-24;
   }
   if(MBEHour3>=24) {
     MBEHour3=MBEHour3-24;
   }
   if(MBEHour4>=24) {
     MBEHour4=MBEHour4-24;
   }
   if(Hour()>=MBEHour1 && MovingBreakEven) MovingBE1=true;
   if(Hour()>=MBEHour2 && MovingBreakEven) MovingBE2=true;
   if(Hour()>=MBEHour3 && MovingBreakEven) MovingBE3=true;
   if(Hour()>=MBEHour4 && MovingBreakEven) MovingBE4=true;

   double   SL=StopLoss*Point;

   Comment("CurrentHour is  ",CurrentHour,"\n",
           "CurrentMinute is ",CurrentMinute);

   if((CurrentHour==Time1 && CurrentMinute>=ExitMinute && Trade1) || (CurrentHour==Time2 && CurrentMinute>=ExitMinute && Trade2) || 
      (CurrentHour==Time3 && CurrentMinute>=ExitMinute && Trade3) || (CurrentHour==Time4 && CurrentMinute>=ExitMinute && Trade4)) {
      for(i=total-1;i>=0;i--) {
         OrderSelect(i, SELECT_BY_POS);
         if(OrderSymbol()==Symbol()) {
            int type   = OrderType();

            bool result = false;

            switch(type){

               case OP_BUY       : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );
                                   break;

               case OP_SELL      : result = OrderClose( Order

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

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

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

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

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

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

Стоимость полного кода
561,60₽ ≈ $6.86