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

NewsBreakv14

newsbreakv14.mq4

Похожие материалы по тегам

#1.mtf_collider_h4_close_13_v18bar.mq4MQL4 / MetaTrader 4 · 1 общих теговea robofibo source v.11.2.mq4MQL4 / MetaTrader 4 · 1 общих теговsma crossover scalper ea for mt4.mq4MQL4 / MetaTrader 4 · 1 общих теговr15 pivot points expert advisor by @fundedmillionairess.mq4MQL4 / MetaTrader 4 · 1 общих теговnewstrader.mq5MQL5 / MetaTrader 5 · 1 общих теговmm3.0_flip_codepro_v3.1_with_cooldown@lifeindreamsworld.mq5MQL5 / MetaTrader 5 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

NewsBreakv14 — это торговый советник для MetaTrader 4, написанный kmrunner в 2006 году. Программа реализует несколько стратегий открытия позиций: ломб-аутгейм на новостных событиях, торговля на расширении спреда, а также покупки и продажи на пробое полос Боллинджера. Советник также включает средства управления открытыми позициями: брейк-эвен, трейлинг-стоп и закрытие по достижении заданной доли прибыли от баланса.

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

Все торговые операции выполняются через стандартные функции OrderSend, OrderModify, OrderClose и OrderDelete MQL4. Каждая торговая ветвь идентифицируется собственным Magic Number для разделения позиций и ордеров. Советник работает в основном цикле start(), характерном для MQL4.

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

НастройкаОписание
RiskPercent Максимальный риск (проценты) — Максимальное допустимое соотношение маржи к балансу в процентах. При превышении новые ордера не открываются.
wantNews1 Включить первую новость — Переключатель включения/отключения первой новостной стратегии ломб-аута.
wantOCONews1 OCO первой новости — Переключатель включения/отключения OCO-управления позициями первой новости.
NewsHour1 Час первой новости — Час первого новостного события (в местном времени сервера).
NewsMinutes1 Минута первой новости — Минута первого новостного события (в местном времени сервера).
wantNews2 Включить вторую новость — Переключатель включения/отключения второй новостной стратегии ломб-аута.
wantOCONews2 OCO второй новости — Переключатель включения/отключения OCO-управления позициями второй новости.
NewsHour2 Час второй новости — Час второго новостного события (в местном времени сервера).
NewsMinutes2 Минута второй новости — Минута второго новостного события (в местном времени сервера).
secondsafter Секунды после новости — Количество секунд после новостного времени, в течение которых действуют правила управления позициями.
secondsbefore Секунды до новости — Количество секунд до новостного времени, в течение которых возможно выставление отложенных ордеров.
NewsLots Лот новостных ордеров — Объём лота для ордеров ломб-аута (новостной и спред- breakout).
NewsPips Пипсы расширения уровней новостей — Количество пипсов для расширения уровней ломб-аута сверх максимума/минимума баров.
NewsTP Тейк-профит новостей (пипсы) — Тейк-профит в пипсах для отложенных ордеров ломб-аута.
NewsSL Стоп-лосс новостей (пипсы) — Стоп-лосс в пипсах для отложенных ордеров ломб-аута.
NewsLookBack Период анализа для новостей — Количество баров назад для определения максимума и минимума при расчёте уровней ломб-аута.
BEpips Брейк-эвен (пипсы) — Количество пипсов для активации брейк-эвен на обычных позициях. Если значение равно 0, функция не выполняется.
TrailingStop Трейлинг-стоп (пипсы) — Значение в пипсах для обычного трейлинг-стопа. Если равно 0, функция не выполняется.
wantSpreadBO1 Включить спред breakout 1 — Переключатель включения/отключения первой стратегии спред- breakout.
wantSpreadBO2 Включить спред breakout 2 — Переключатель включения/отключения второй стратегии спред- breakout.
VarSpread Порог спреда для breakout — Пороговое значение спреда (в пунктах) для срабатывания спред- breakout стратегии.
wantBBbuys Включить BB покупки — Переключатель включения/отключения стратегии покупок по полосам Боллинджера.
BBBuyLots Лот BB покупок — Объём лота для покупки по стратегии BB (Bollinger Band).
BuyBarPips Пипсы покупки по полосе — Минимальное движение цены в пипсах от открытия бары для срабатывания сигнала покупки по BB.
BuyBarTP Тейк-профит покупок (пипсы) — Тейк-профит в пипсах для ордеров покупки по стратегии BB.
BuyBarSL Стоп-лосс покупок (пипсы) — Стоп-лосс в пипсах для ордеров покупки по стратегии BB.
wantBBsells Включить BB продажи — Переключатель включения/отключения стратегии продаж по полосам Боллинджера.
BBSellLots Лот BB продаж — Объём лота для продажи по стратегии BB (Bollinger Band).
SellBarPips Пипсы продажи по полосе — Минимальное движение цены в пипсах от открытия бары для срабатывания сигнала продажи по BB.
SellBarTP Тейк-профит продаж (пипсы) — Тейк-профит в пипсах для ордеров продажи по стратегии BB.
SellBarSL Стоп-лосс продаж (пипсы) — Стоп-лосс в пипсах для ордеров продажи по стратегии BB.
BOBEpips Брейк-эвен OCO (пипсы) — Количество пипсов для активации брейк-эвен на позициях, связанных с OCO-новостями. Если значение равно 0, функция не выполняется.
BOTrailingStop Трейлинг-стоп OCO (пипсы) — Значение в пипсах для трейлинг-стопа на позициях OCO. Если равно 0, трейлинг-стоп не активируется.
StochK Параметр K стохастика — Параметр K стохастика, используемый для индикатора iStochastic в советнике.
StochD Параметр D стохастика — Параметр D стохастика, используемый для индикатора iStochastic в советнике.
StochSlowing Замедление стохастика — Параметр замедления (slowing) стохастика.
buystop Уровень стопа покупок — Параметр уровня для стоп-ордеров покупок (используется в логике управления позициями).
sellstop Уровень стопа продаж — Параметр уровня для стоп-ордеров продаж (используется в логике управления позициями).
ratio Доля прибыли для закрытия — Доля прибыли от баланса, при достижении которой позиции закрываются автоматически.
Получить полный код

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

#define MAGIC1  11111111
#define MAGIC2  22222222
#define MAGIC3  33333333
#define MAGIC4  44444444
#define MAGIC5  55555555

#include <stdlib.mqh>
#define     NL    "\n"

extern int     RiskPercent    = 20;

extern bool    wantNews1      = true;
extern bool    wantOCONews1   = true;
extern int     NewsHour1      = 12;
extern int     NewsMinutes1   = 31;

extern bool    wantNews2      = true;
extern bool    wantOCONews2   = true;
extern int     NewsHour2      = 12;
extern int     NewsMinutes2   = 31;

extern int     secondsafter   = 120;
extern int     secondsbefore  = 90;
extern double  NewsLots       = 3;
extern int     NewsPips       = 12;
extern int     NewsTP         = 60;
extern int     NewsSL         = 100;
extern int     NewsLookBack   = 4;
extern int     BEpips         = 60;
extern int     TrailingStop   = 40;

extern bool    wantSpreadBO1  = true;
extern bool    wantSpreadBO2  = true;
extern int     VarSpread      = 7;

extern bool    wantBBbuys     = true;
extern double  BBBuyLots      = 2;
extern int     BuyBarPips     = 25;
extern int     BuyBarTP       = 25;
extern int     BuyBarSL       = 150;

extern bool    wantBBsells    = true;
extern double  BBSellLots     = 1;
extern int     SellBarPips    = 25;
extern int     SellBarTP      = 25;
extern int     SellBarSL      = 150;

extern int     BOBEpips       = 60;
extern int     BOTrailingStop = 40;
extern int     StochK         = 40;     
extern int     StochD         = 5;      
extern int     StochSlowing   = 5;
extern int     buystop        = 80;
extern int     sellstop       = 20;

extern double  ratio          = 0.12;

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

int deinit()
  {
   return(0);
  }

void CloseAllThisSymbolBuy()
{
  int totalorders = OrdersTotal();
  double tradesinprofit;
  for(int i=totalorders-1;i>=0;i--)
 {
    OrderSelect(i, SELECT_BY_POS);
    bool result = false;

    if ( OrderSymbol()==Symbol())  // only look if mygrid and symbol...
      {

           if ( OrderType() == OP_BUY )  result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );

      }
  }
  return; 
  } 

void CloseAllThisSymbolSell()
{
  int totalorders = OrdersTotal();
  double tradesinprofit;
  for(int i=totalorders-1;i>=0;i--)
 {
    OrderSelect(i, SELECT_BY_POS);
    bool result = false;
    if ( OrderSymbol()==Symbol())  // only look if mygrid and symbol...
      {

           if ( OrderType() == OP_SELL )  result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );
      }
  }
  return; 
  }

void CheckForClose()
  {
  double  i, OpenBuyLots, BuyOrders, OpenSellLots, SellOrders;
   double  TotalProfit, BuyProfit, SellProfit;

   for(i = 0; i < OrdersTotal(); i++)
     {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
       if (OrderSymbol() == Symbol())
        {
         if (OrderType() == OP_BUY)  BuyProfit  +=  OrderProfit();
         if (OrderType() == OP_SELL) SellProfit +=  OrderProfit();
        }
     }
   TotalProfit = BuyProfit + SellProfit;

    if(BuyProfit/AccountBalance() >= ratio) CloseAllThisSymbolBuy(); 
    if(SellProfit/AccountBalance() >= ratio) CloseAllThisSymbolSell();

    return;
  }

void CheckForPendingClose1()
  {
     int  totalorders = OrdersTotal();

     for(int i=totalorders-1;i>=0;i--)                              
      {
        OrderSelect( i, SELECT_BY_POS);
        if (OrderSymbol()==Symbol() && OrderMagicNumber() == MAGIC1)  
         {  
          if ( OrderType() == OP_BUYSTOP ) bool result = OrderDelete( OrderTicket() );
          if ( OrderType() == OP_SELLSTOP )     result = OrderDelete( OrderTicket() );
         }
      } 
   return;
 }

void CheckForPendingClose2()
  {
     int  totalorders = OrdersTotal();

     for(int i=totalorders-1;i>=0;i--)                              
      {
        OrderSelect( i, SELECT_BY_POS);
        if (OrderSymbol()==Symbol() && OrderMagicNumber() == MAGIC2)  
         {  
          if ( OrderType() == OP_BUYSTOP ) bool result = OrderDelete( OrderTicket() );
          if ( OrderType() == OP_SELLSTOP )     result = OrderDelete( OrderTicket() );
         }
      } 
   return;
 }

void CheckForPendingClose3()
  {
     int  totalorders = OrdersTotal();

     for(int i=totalorders-1;i>=0;i--)                              
      {
        OrderSelect( i, SELECT_BY_POS);
        if (OrderSymbol()==Symbol() && OrderMagicNumber() == MAGIC3)  
         {  
          if ( OrderType() == OP_BUYSTOP ) bool result = OrderDelete( OrderTicket() );
          if ( OrderType() == OP_SELLSTOP )     result = OrderDelete( OrderTicket() );
         }
      } 
   return;
 }

 void DoBE(int byPips)
  {
    for (int i = 0; i < OrdersTotal(); i++) {
     OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
     if (OrderSymbol()==Symbol() && (OrderMagicNumber() == MAGIC1) || (OrderMagicNumber() == MAGIC2) || (OrderMagicNumber() == MAGIC3) || (OrderMagicNumber() == MAGIC4) || (OrderMagicNumber() == MAGIC5))  
        {
            if (OrderType() == OP_BUY) if (Bid - OrderOpenPrice() > byPips * Point) if (OrderStopLoss() < OrderOpenPrice()) {
              OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() +  Point, OrderTakeProfit(), Red);
            }
            if (OrderType() == OP_SELL) if (OrderOpenPrice() - Ask > byPips * Point) if (OrderStopLoss() > OrderOpenPrice()) { 
               OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() -  Point, OrderTakeProfit(), Red);
            }
        }
    }
  }

  void DoTrail()
  {
    for (int i = 0; i < OrdersTotal(); i++) {
     OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
     if ( OrderSymbol()==Symbol() && (OrderMagicNumber() == MAGIC1) || (OrderMagicNumber() == MAGIC2)|| (OrderMagicNumber() == MAGIC3)|| (OrderMagicNumber() == MAGIC4)|| (OrderMagicNumber() == MAGIC5))  
        {

          if (OrderType() == OP_BUY) {
             if(Bid-OrderOpenPrice()>Point*TrailingStop)
             {
                if(OrderStopLoss()<Bid-Point*TrailingStop)
                  {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
                     return(0);
                  }
             }
          }

          if (OrderType() == OP_SELL) 
          {
             if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
             {
                if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                {
                   OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
                   return(0);
                }
             }
          }
       }
    }
 }

void CheckForNewsBreak1()
  {
   double h=High[Highest(NULL,0,MODE_HIGH,NewsLookBack,0)];
   double l=Low[Lowest(NULL,0,MODE_LOW,NewsLookBack,0)];
   double sp=Ask-Bid;
   double ho=h+sp+NewsPips*Point;
   double lo=l-sp-NewsPips*Point;
   double hsl=ho-NewsSL*Point;
   double lsl=lo+NewsSL*Point;
   double htp=ho+NewsTP*Point;
   double ltp=lo-NewsTP*Point;

      OrderSend(Symbol(),OP_BUYSTOP,NewsLots,ho,3,hsl,htp,"",MAGIC1,0,Green);
      OrderSend(Symbol(),OP_SELLSTOP,NewsLots,lo,3,lsl,ltp,"",MAGIC1,0,Red);
 } 

void CheckForNewsBreak2()
  {
   double h=High[Highest(NULL,0,MODE_HIGH,NewsLookBack,0)];
   double l=Low[Lowest(NULL,0,MODE_LOW,NewsLookBack,0)];
   double sp=Ask-Bid;
   double ho=h+sp+NewsPips*Point;
   double lo=l-sp-NewsPips*Point;
   double hsl=ho-NewsSL*Point;
   double lsl=lo+NewsSL*Point;
   double htp=ho+NewsTP*Point;
   double ltp=lo-NewsTP*Point;

      OrderSend(Symbol(),OP_BUYSTOP,NewsLots,ho,3,hsl,htp,"",MAGIC2,0,Green);
      OrderSend(Symbol(),OP_SELLSTOP,NewsLots,lo,3,lsl,ltp,"",MAGIC2,0,Red);
 } 

void CheckForSpreadBreak1()
  {
   double h=High[Highest(NULL,0,MODE_HIGH,NewsLookBack,0)];
   double l=Low[Lowest(NULL,0,MODE_LOW,NewsLookBack,0)];
   double sp=Ask-Bid;
   double ho=h+sp+NewsPips*Point;
   double lo=l-sp-NewsPips*Point;
   double hsl=ho-NewsSL*Point;
   double lsl=lo+NewsSL*Point;
   double htp=ho+NewsTP*Point;
   double ltp=lo-NewsTP*Point;
   double NewsTime1 = (NewsHour1*3600)+(NewsMinutes1*60);
   double NewsTime2 = (NewsHour2*3600)+(NewsMinutes2*60);
   double openbar1  = iBarShift(NULL, 0, NewsTime1);
   double openbar2  = iBarShift(NULL, 0, NewsTime2);

      if(sp > VarSpread && Bid>=openbar1+NewsPips*Point || sp > VarSpread && Ask<=openbar1-NewsPips*Point)
       {
        OrderSend(Symbol(),OP_BUYSTOP,NewsLots,ho,3,hsl,htp,"",MAGIC3,0,PaleGreen);
        OrderSend(Symbol(),OP_SELLSTOP,NewsLots,lo,3,lsl,ltp,"",MAGIC3,0,Pink);
       }
      if(sp > VarSpread && Bid>=openbar2+NewsPips*Point || sp > VarSpread && Ask<=openbar2-NewsPips*Point)
       {
        OrderSend(Symbol(),OP_BUYSTOP,NewsLots,ho,3,hsl,htp,"",MAGIC3,0,PaleGreen);
        OrderSend(Symbol(),OP_SELLSTOP,NewsLots,lo,3,lsl,ltp,"",MAGIC3,0,Pink);
       }
  }

void CheckForSpreadBreak2()
  {
   double hprice=High[Highest(NULL,PERIOD_M1,MODE_HIGH,4,0)];
   double lprice=Low[Lowest(NULL,PERIOD_M1,MODE_LOW,4,0)];
   double h=iHigh(NULL,PERIOD_M1,0);
   double l=iLow(NUL

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

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

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

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

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

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

Стоимость полного кода
1 368₽ ≈ $16.72