newsbreak v11.mq4
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «newsbreak v11.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
NewsBreak — это советник для MetaTrader 4, предназначенный для автоматической торговли на основе событийных стратегий. Основная логика сосредоточена в функции start(), которая проверяет текущее время, состояние ордеров и условия открытия позиций, а затем вызывает соответствующие модули торговли.
Советник поддерживает размещение отложенных ордеров BuyStop и SellStop, управление открытыми позициями через механизмы безубытка и трейлинг-стоп, а также закрытие позиций при достижении заданной доли прибыли от баланса. Дополнительно реализованы модули торговли на основе спредных разрывов и полос Боллинджера.
Работа советника управляется набором внешних параметров, позволяющих настраивать временные окна, размеры лотов, уровни стоп-лосса и тейк-профита, а также включать или отключать отдельные торговые модули. Все торговые операции выполняются через стандартные функции OrderSend, OrderModify и OrderClose платформы MetaTrader 4.
Настройки программы
| Настройка | Описание |
|---|---|
| RiskPercent | Процент риска — Процент риска от баланса, при превышении которого вход в рынок блокируется |
| wantNews1 | Включить разрыв 1 — Включение первого модуля торговли разрывом новостей |
| wantOCONews1 | OCO для окна 1 — Включение автоматического управления отложенными ордерами для первого окна (OCO) |
| NewsHour1 | Час окна 1 — Час первого временного окна торговли |
| NewsMinutes1 | Минуты окна 1 — Минуты первого временного окна торговли |
| wantNews2 | Включить разрыв 2 — Включение второго модуля торговли разрывом новостей |
| wantOCONews2 | OCO для окна 2 — Включение автоматического управления отложенными ордерами для второго окна (OCO) |
| NewsHour2 | Час окна 2 — Час второго временного окна торговли |
| NewsMinutes2 | Минуты окна 2 — Минуты второго временного окна торговли |
| secondsafter | Секунд после окна — Количество секунд после начала временного окна для закрытия отложенных ордеров |
| secondsbefore | Секунд до окна — Количество секунд до начала временного окна для размещения ордеров |
| NewsLots | Лот разрыва — Объём лота для размещения отложенных ордеров разрыва |
| NewsPips | Смещение уровней в пунктах — Смещение в пунктах от экстремумов для уровней отложенных ордеров |
| NewsTP | Тейк-профит разрыва — Тейк-профит в пунктах для отложенных ордеров разрыва |
| NewsSL | Стоп-лосс разрыва — Стоп-лосс в пунктах для отложенных ордеров разрыва |
| NewsLookBack | Баров для анализа — Количество баров для анализа диапазона цен при формировании уровней разрыва |
| BEpips | Безубыток в пунктах — Расстояние в пунктах для перевода позиции в безубыток |
| TrailingStop | Трейлинг-стоп в пунктах — Расстояние в пунктах для активации трейлинг-стопа |
| wantSpreadBO1 | Включить спредный разрыв 1 — Включение первого модуля спредного разрыва |
| wantSpreadBO2 | Включить спредный разрыв 2 — Включение второго модуля спредного разрыва |
| VarSpread | Порог спреда — Порог спреда в пунктах для модулей спредных разрывов |
| BBTF | Таймфрейм BB — Таймфрейм для расчёта полос Боллинджера |
| BarsForRange | Баров для диапазона BB — Количество баров для определения диапазона цен при расчёте полос Боллинджера |
| wantBBbuys | Включить покупки BB — Включение модуля покупок на полосах Боллинджера |
| BBBuyLots | Объём покупки BB — Объём лота для покупки при срабатывании модуля полос Боллинджера |
| BuyBarPips | Покупка BB — порог в пунктах — Порог в пунктах от открытия бара для активации покупки BB |
| BuyBarTP | Покупка BB — тейк-профит — Тейк-профит в пунктах для покупки BB |
| BuyBarSL | Покупка BB — стоп-лосс — Стоп-лосс в пунктах для покупки BB |
| wantBBsells | Включить продажи BB — Включение модуля продаж на полосах Боллинджера |
| BBSellLots | Объём продажи BB — Объём лота для продажи при срабатывании модуля полос Боллинджера |
| SellBarPips | Продажа BB — порог в пунктах — Порог в пунктах от открытия бара для активации продажи BB |
| SellBarTP | Продажа BB — тейк-профит — Тейк-профит в пунктах для продажи BB |
| SellBarSL | Продажа BB — стоп-лосс — Стоп-лосс в пунктах для продажи BB |
| 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 = 100;
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 = 60;
extern double NewsLots = 1;
extern int NewsPips = 8;
extern int NewsTP = 500;
extern int NewsSL = 500;
extern int NewsLookBack = 1;
extern int BEpips = 500;
extern int TrailingStop = 500;
extern bool wantSpreadBO1 = false;
extern bool wantSpreadBO2 = false;
extern int VarSpread = 8;
extern int BBTF = 60;
extern int BarsForRange = 1;
extern bool wantBBbuys = false;
extern double BBBuyLots = 1;
extern int BuyBarPips = 24;
extern int BuyBarTP = 25;
extern int BuyBarSL = 125;
extern bool wantBBsells = false;
extern double BBSellLots = 0.5;
extern int SellBarPips = 24;
extern int SellBarTP = 25;
extern int SellBarSL = 125;
extern double ratio = 0.1;
int init()
{
// код доступен только после оплаты
}
int deinit()
{
return(0);
}
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)
{
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))
{
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(NULL,PERIOD_M1,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;
if(sp > VarSpread && Bid>=lprice+(NewsPips*Point))
{
OrderSend(Symbol(),OP_BUY,NewsLots-(10*Point),Ask,3,hsl,htp,"",MAGIC4,0,Blue);
}
if(sp > VarSpread && Ask<=hprice-(NewsPips*Point))
{
OrderSend(Symbol(),OP_SELL,NewsLots-(10*Point),Bid,3,lsl,ltp,"",MAGIC4,0,Orange);
}
}
void CheckForBBbuys()
{
double hprice=High[Highest(NULL,0,MODE_HIGH,BarsForRange,0)];
double lprice=Low[Lowest(NULL,0,MODE_LOW,BarsForRange,0)];
if(Bid-iOpen(NULL,BBTF,0) >= BuyBarPips*Point) OrderSend(Symbol(),OP_BUY,BBBuyLots,Ask,3,Ask-BuyBarSL*Point,Ask+BuyBarTP*Point,"",MAGIC5,0,LimeGreen);
}
void CheckForBBsells()
{
double hprice=High[Highest(NULL,0,MODE_HIGH,BarsForRange,0)];
double lprice=Low[Lowest(NULL,0,MODE_LOW,BarsForRange,0)];
if(iOpen(NULL,BBTF,0)-Ask >= SellBarPips*Point) OrderSend(Symbol(),OP_SELL,BBSellLots,Bid,3,Bid+SellBarSL*Point,Bid-SellBarTP*Point,"",MAGIC5,0,Magenta);
}
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--)
{
OrderSeПоказано первые 50% кода (символов: 13495)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.