NewsBreak
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «newsbreakv4.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
NewsBreak — торговый советник для MetaTrader 4, реализующий стратегию торговли на основе пробоя ценовых уровней в окрестности заданных новостных событий. Советник формирует отложенные ордера BuyStop и SellStop при достижении определённого временного окна, рассчитывая уровни входа на основе экстремумов текущего часового графика с учётом спреда.
Поддерживаются два независимых временных окна для новостных событий, каждое из которых может быть включено или отключено отдельно. Между окнами реализована логика очистки отложенных ордеров первой группы, а также механизм OCO (One Cancels Other), контролирующий наличие пары ордеров.
Для открытых позиций второй группы реализованы функции перевода в безубыток и использования скользящего стоп-лосса. Параметры лота, расстояния пробоя, тейка и стоп-лосса настраиваются независимо.
Настройки программы
| Настройка | Описание |
|---|---|
| wantNews1 | Новостное окно 1 — Включает или отключает первое новостное временное окно. |
| NewsHour1 | Час новостного окна 1 — Час первого новостного временного окна. |
| NewsMinutes1 | Минута новостного окна 1 — Минута начала первого новостного временного окна. |
| wantNews2 | Новостное окно 2 — Включает или отключает второе новостное временное окно. |
| NewsHour2 | Час новостного окна 2 — Час второго новостного временного окна. |
| NewsMinutes2 | Минута новостного окна 2 — Минута начала второго новостного временного окна. |
| wantOCO | OCO (отмена одного другим) — Включает механизм OCO (One Cancels Other) для управления отложенными ордерами первой группы. |
| NewsLots | Размер лота — Размер лота для открытия отложенных ордеров. |
| NewsPips | Расстояние пробоя (пипсы) — Расстояние в пунктах от экстремумов графика для выставления уровней отложенных ордеров. |
| NewsTP | Тейк-профит (пипсы) — Тейк-профит отложенных ордеров в пунктах. |
| NewsSL | Стоп-лосс (пипсы) — Стоп-лосс отложенных ордеров в пунктах. |
| BEpips | Безубыток (пипсы) — Расстояние в пунктах для перевода открытой позиции в безубыток. |
| TrailingStop | Скользящий стоп-лосс (пипсы) — Расстояние в пунктах для скользящего стоп-лосса. |
| wantNewsBO | Пробой новостей (группа 2) — Включает или отключает торговлю по пробою новостей для второй группы ордеров. |
| wantSpreadBO | Фильтр спреда (группа 2) — Включает или отключает фильтр спреда для второй группы ордеров. |
Поиск по коду файла
#define MAGIC1 20060819
#define MAGIC2 12345678
#include <stdlib.mqh>
#define NL "\n"
extern bool wantNews1 = true;
extern int NewsHour1 = 11;
extern int NewsMinutes1 = 0;
extern bool wantNews2 = true;
extern int NewsHour2 = 12;
extern int NewsMinutes2 = 30;
extern bool wantOCO = true;
extern double NewsLots = 5;
extern int NewsPips = 15;
extern int NewsTP = 60;
extern int NewsSL = 55;
extern int BEpips = 60;
extern int TrailingStop = 35;
extern bool wantNewsBO = true;
extern bool wantSpreadBO = true;
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 DoBE(int byPips)
{
for (int i = 0; i < OrdersTotal(); i++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if ( OrderSymbol()==Symbol() && (OrderMagicNumber() == MAGIC2))
{
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() == 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=iHigh(Symbol(),PERIOD_M1,0);
double l=iLow(Symbol(),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;
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=iHigh(Symbol(),PERIOD_M1,0);
douПоказано первые 50% кода (символов: 5667)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.