NewsBreakv14
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «newsbreakv14.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.