Soning

 
Уровень 4

  Торгую в компаниях:


Группа "Стол заказов MQL"

Рейтинг 2081



РЕКОМЕНДУЮ




Лучшее от Soning



Martin для малых депозитов Комментариев 8
2014-03-08 14:51:42Рейтинг 0

новостной советник

Разработать советника, который за 3 секунды до новости выставляет два ордера:
выше цены на покупку со стоп-лоссом
ниже цены на продажу со стоп-лоссом

время выхода новости советник берет из ленты Экономический календарь feeds2.feedburner.com/fxteam/dzId

сразу после выставления ордера советник прилепляет трейл-стоп к ордеру.

среди настроек:
lot величина лота
spred на сколько пунктов от текущей цены ставить ордер
trail-stop на сколько пунктов ставить трейл-стоп
  • 0
  • Просмотров: 6697
  • 8 декабря 2015, 19:03
  • Soning
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Написание советника.
Следующая запись в группе  
Посмотреть и поправить "рыбу" советника
08 декабря 2015
09 декабря 2015

Комментарии (23)

+
0
время выхода новости советник берет из ленты Экономический календарь feeds2.feedburner.com/fxteam/dzId


Если есть готовый код который будет парсить данные с сайта, то тогда можно сделать.
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 8 декабря 2015, 19:14
+
+1
Обязательно необходимо указать платформу МТ4 или МТ5, для которой создается заказ.
Так это вам надо указывать, когда создаете заказ, а не программисту.

Гуглить не пробовали?
Советники:
www.mql5.com/ru/code/12828
www.mql5.com/ru/code/11916
Индикатор:
www.mql5.com/ru/code/12768
avatar

  27  Oxy Сообщений: 3418 - ..ιllιlι.lι.ιllι.ιlι..

  • 8 декабря 2015, 19:23
+
0
вот готовый от кима, только время ручками ставить надо www.opentraders.ru/downloads/966/
avatar

  10  cardon Сообщений: 376

  • 8 декабря 2015, 19:31
+
0
терминал MT5
avatar

  4  Soning Автор Сообщений: 12

  • 8 декабря 2015, 20:55
+
0
Я делал как то для МТ4: mql.opentraders.ru/21089.html
Если есть индикатор подобный для пятерки, тогда можно попробовать.
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 8 декабря 2015, 21:03
+
0
В МТ5 есть календарь. Возможно оттуда можно программно читать, но когда не делал, с нуля это долго будет, основа нужна, примеры кода.
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 8 декабря 2015, 21:16
+
0
Нашел подходящий пример. В кодобазе на мкл есть скрипт отображающий новости в календаре вертикальными линиями. Он пробегается по графическим объектам OBJ_EVENT и строит линии. На этой основе можно попробовать.


//+------------------------------------------------------------------+
//|                                                   News VLine.mq5 |
//|                                            Copyright 2010, Urain |
//|                            https://login.mql5.com/ru/users/Urain |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, Urain"
#property link      "https://login.mql5.com/ru/users/Urain"
#property version   "1.00"
#property script_show_inputs
//---
input color           color_line=clrOrange;     // Цвет линий
input ENUM_LINE_STYLE style_line=STYLE_DASHDOT; // Стиль рисования линий
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   long chid=ChartID();
   int total=ObjectsTotal(chid,0,OBJ_EVENT);
   for(int i=0;i<total;i++)
      ObjectNews(chid,i,ObjectName(chid,i,0,OBJ_EVENT));
  }
//+------------------------------------------------------------------+
//| ObjectNews                                                       |
//+------------------------------------------------------------------+
void ObjectNews(long chid,int num,string tool)
  {
   datetime time=StringToTime(tool);
   string name="news"+(num>99?(string)num:num>9?"0"+(string)num:"00"+(string)num);
   if(ObjectFind(chid,name)<0)
      ObjectCreate(chid,name,OBJ_VLINE,0,time,0);
   ObjectSetString(chid,name,OBJPROP_TOOLTIP,tool);
   ObjectSetInteger(chid,name,OBJPROP_COLOR,color_line);
   ObjectSetInteger(chid,name,OBJPROP_STYLE,style_line);
   ObjectSetInteger(chid,name,OBJPROP_BACK,true);
   ObjectSetInteger(chid,name,OBJPROP_SELECTED,false);
  }
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 10 декабря 2015, 09:34
+
0
Небольшая разница в календарях есть:

avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 10 декабря 2015, 09:48
+
0
Пока тружусь над новостным по календарю МТ5:




//+------------------------------------------------------------------+
//|                                                         News.mq5 |
//|                                              Copyright 2015, AM2 |
//|                                     https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link      "https://www.forexsystems.biz"
#property version   "1.00"

//--- входные параметры эксперта
input int      TakeProfit = 500;       // Тейкпрофит
input int      StopLoss   = 500;       // Стоплосс
input int      BeforTime  = 10;        // Время до новости в секундах
input int      Expiration = 10;        // Истечение ордера в часах
input int      Delta      = 300;       // Отступ от цены
input int      Slip       = 50;        // Проскальзывание
input double   Lot        = 0.1;       // Количество лотов для торговли 
input long     Magic      = 123;       // Магик
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void BuyStop()
  {
   double sl=0,tp=0,pr=0;
// Лучшее предложение на покупку
   double Ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
   pr=NormalizeDouble(Ask+Delta*_Point,_Digits);
   if(StopLoss>0) sl=NormalizeDouble(pr-StopLoss*_Point,_Digits);
   if(TakeProfit>0) tp=NormalizeDouble(pr+TakeProfit*_Point,_Digits);
//--- готовим запрос 
   MqlTradeRequest request={0};
   request.action=TRADE_ACTION_PENDING;                                // отложенный ордер
   request.symbol=_Symbol;                                             // Cимвол
   request.price = pr;                                                 // цена открытия
   request.sl = sl;                                                    // стоп
   request.tp = tp;                                                    // тейк
   request.volume = Lot;                                               // количество лотов для торговли
   request.magic = Magic;                                              // магик
   request.type = ORDER_TYPE_BUY_STOP;                                 // ордер байстоп
   request.type_filling = ORDER_FILLING_FOK;                           // тип исполнения ордера - все или ничего
   request.deviation=Slip;                                             // проскальзывание от текущей цены
   request.type_time=ORDER_TIME_SPECIFIED;                             // Ордер будет действовать до даты истечения
   request.expiration=TimeCurrent()+Expiration*3600;                   // время истечения ордера
//----проверим торговый запрос 
   MqlTradeCheckResult check={0};
   if(!OrderCheck(request,check))
      Print(__FUNCTION__,"(): Неверные данные для структуры торгового запроса!");
//--- отправим торговый приказ 
   MqlTradeResult result={0};
   if(OrderSend(request,result))
      //--- выведем в лог ответ сервера   
      Print(__FUNCTION__,":",result.comment);
   if(result.retcode==10016) Print(result.bid,result.ask,result.price);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void SellStop()
  {
   double sl=0,tp=0,pr=0;
// Лучшее предложение на продажу                           
   double Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
   pr=NormalizeDouble(Bid-Delta*_Point,_Digits);
   if(StopLoss>0) sl=NormalizeDouble(pr+StopLoss*_Point,_Digits);
   if(TakeProfit>0) tp=NormalizeDouble(pr-TakeProfit*_Point,_Digits);
//--- готовим запрос 
   MqlTradeRequest request={0};
   request.action=TRADE_ACTION_PENDING;                                // отложенный ордер
   request.symbol=_Symbol;                                             // Cимвол
   request.price = pr;                                                 // цена открытия
   request.sl = sl;                                                    // стоп
   request.tp = tp;                                                    // тейк
   request.volume = Lot;                                               // количество лотов для торговли
   request.magic = Magic;                                              // магик
   request.type = ORDER_TYPE_SELL_STOP;                                // ордер селлстоп
   request.type_filling = ORDER_FILLING_FOK;                           // тип исполнения ордера - все или ничего
   request.deviation=Slip;                                             // проскальзывание от текущей цены
   request.type_time = ORDER_TIME_SPECIFIED;                           // Ордер будет действовать до даты истечения   
   request.expiration=TimeCurrent()+Expiration*3600;                   // время истечения ордера
//----проверим торговый запрос 
   MqlTradeCheckResult check={0};
   if(!OrderCheck(request,check))
      Print(__FUNCTION__,"(): Неверные данные для структуры торгового запроса!");
//--- отправим торговый приказ 
   MqlTradeResult result={0};
   if(OrderSend(request,result))
      //--- выведем в лог ответ сервера   
      Print(__FUNCTION__,":",result.comment);
   if(result.retcode==10016) Print(result.bid,result.ask,result.price);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   datetime t=0;
   string name="";
   string text="";
   int ot=ObjectsTotal(0,0,OBJ_EVENT);

   for(int i=0;i<ot;i++)
     {
      name=ObjectName(0,ot-i,0,OBJ_EVENT);
      text=ObjectGetString(0,name,OBJPROP_TEXT,0);
      ObjectGetInteger(0,name,OBJPROP_TIME,0,t);

      if(t-TimeCurrent()<=BeforTime && PositionsTotal()<1 && OrdersTotal()<1)
        {
         BuyStop();
         SellStop();
        }
     }

   Comment("\n Время сервера: ",TimeCurrent(),
           "\n Название новости: ",text,
           "\n Время новости: ",t,
           "\n Всего новостей: ",ot-1);
  }
//+------------------------------------------------------------------+


Редактирован: 10 декабря 2015, 13:09
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 10 декабря 2015, 13:08
+
0
Сделал, поставил на тест.




//+------------------------------------------------------------------+
//|                                                         News.mq5 |
//|                                              Copyright 2015, AM2 |
//|                                     https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link      "https://www.forexsystems.biz"
#property version   "1.00"

//--- входные параметры эксперта
input int      TakeProfit = 500;       // Тейкпрофит
input int      StopLoss   = 500;       // Стоплосс
input int      BeforTime  = 10;        // Время до новости в секундах
input int      Expiration = 10;        // Истечение ордера в часах
input int      Delta      = 300;       // Отступ от цены
input int      Slip       = 50;        // Проскальзывание
input double   Lot        = 0.1;       // Количество лотов для торговли 
input long     Magic      = 1012;      // Магик
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void BuyStop()
  {
   double sl=0,tp=0,pr=0;
// Лучшее предложение на покупку
   double Ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
   pr=NormalizeDouble(Ask+Delta*_Point,_Digits);
   if(StopLoss>0) sl=NormalizeDouble(pr-StopLoss*_Point,_Digits);
   if(TakeProfit>0) tp=NormalizeDouble(pr+TakeProfit*_Point,_Digits);
//--- готовим запрос 
   MqlTradeRequest request={0};
   request.action=TRADE_ACTION_PENDING;                                // отложенный ордер
   request.symbol=_Symbol;                                             // Cимвол
   request.price = pr;                                                 // цена открытия
   request.sl = sl;                                                    // стоп
   request.tp = tp;                                                    // тейк
   request.volume = Lot;                                               // количество лотов для торговли
   request.magic = Magic;                                              // магик
   request.type = ORDER_TYPE_BUY_STOP;                                 // ордер байстоп
   request.type_filling = ORDER_FILLING_FOK;                           // тип исполнения ордера - все или ничего
   request.deviation=Slip;                                             // проскальзывание от текущей цены
   request.type_time=ORDER_TIME_SPECIFIED;                             // Ордер будет действовать до даты истечения
   request.expiration=TimeCurrent()+Expiration*3600;                   // время истечения ордера
//----проверим торговый запрос 
   MqlTradeCheckResult check={0};
   if(!OrderCheck(request,check))
      Print(__FUNCTION__,"(): Неверные данные для структуры торгового запроса!");
//--- отправим торговый приказ 
   MqlTradeResult result={0};
   if(OrderSend(request,result))
      //--- выведем в лог ответ сервера   
      Print(__FUNCTION__,":",result.comment);
   if(result.retcode==10016) Print(result.bid,result.ask,result.price);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void SellStop()
  {
   double sl=0,tp=0,pr=0;
// Лучшее предложение на продажу                           
   double Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
   pr=NormalizeDouble(Bid-Delta*_Point,_Digits);
   if(StopLoss>0) sl=NormalizeDouble(pr+StopLoss*_Point,_Digits);
   if(TakeProfit>0) tp=NormalizeDouble(pr-TakeProfit*_Point,_Digits);
//--- готовим запрос 
   MqlTradeRequest request={0};
   request.action=TRADE_ACTION_PENDING;                                // отложенный ордер
   request.symbol=_Symbol;                                             // Cимвол
   request.price = pr;                                                 // цена открытия
   request.sl = sl;                                                    // стоп
   request.tp = tp;                                                    // тейк
   request.volume = Lot;                                               // количество лотов для торговли
   request.magic = Magic;                                              // магик
   request.type = ORDER_TYPE_SELL_STOP;                                // ордер селлстоп
   request.type_filling = ORDER_FILLING_FOK;                           // тип исполнения ордера - все или ничего
   request.deviation=Slip;                                             // проскальзывание от текущей цены
   request.type_time = ORDER_TIME_SPECIFIED;                           // Ордер будет действовать до даты истечения   
   request.expiration=TimeCurrent()+Expiration*3600;                   // время истечения ордера
//----проверим торговый запрос 
   MqlTradeCheckResult check={0};
   if(!OrderCheck(request,check))
      Print(__FUNCTION__,"(): Неверные данные для структуры торгового запроса!");
//--- отправим торговый приказ 
   MqlTradeResult result={0};
   if(OrderSend(request,result))
      //--- выведем в лог ответ сервера   
      Print(__FUNCTION__,":",result.comment);
   if(result.retcode==10016) Print(result.bid,result.ask,result.price);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   datetime t=0;
   datetime t0=0;
   string name="";
   string name0="";
   string text="";
   int ot=ObjectsTotal(0,0,OBJ_EVENT);

   for(int i=0;i<ot;i++)
     {
      name=ObjectName(0,i+1,0,OBJ_EVENT); //имя новости больше локального времени
      name0=ObjectName(0,i,0,OBJ_EVENT);  //имя новости меньше локального времени
      ObjectGetInteger(0,name,OBJPROP_TIME,0,t);//время новости больше локального времени
      ObjectGetInteger(0,name0,OBJPROP_TIME,0,t0);//время новости меньше локального времени
      if(TimeCurrent()>t0 && TimeCurrent()<t)
        {
         text=ObjectGetString(0,name,OBJPROP_TEXT,0);
         break;
        }
     }

   if(t-TimeCurrent()<=BeforTime && PositionsTotal()<1 && OrdersTotal()<1)
     {
      BuyStop();
      SellStop();
     }

   Comment("\n Время сервера: ",TimeCurrent(),
           "\n Название новости: ",text,
           "\n Время новости: ",t);
  }
//+------------------------------------------------------------------+

avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 10 декабря 2015, 13:53
+
0
Есть 2 ордера за 10 секунд до новости:
www.opentraders.ru/downloads/971/



Редактирован: 10 декабря 2015, 14:07
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 10 декабря 2015, 14:01
+
0
AM2, на 90% то, что я заказывал.
Еще одну мелочь добавить:
Когда открытый ордер достигнет безубытка с запасом, переводить его на трейл-стоп (заданный в параметрах).
После успешной установки трейл-стопа, снимать тейк-профит.

сегодня и завтра потестирую, отпишусь
Редактирован: 10 декабря 2015, 18:49
avatar

  4  Soning Автор Сообщений: 12

  • 10 декабря 2015, 18:39
+
0
Добавил отключаемый трал и бу: www.opentraders.ru/downloads/971/
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 10 декабря 2015, 22:57
+
0
Уважаемый Андрей, советник сразу после установки на график делает ордера. Новостей не ждёт
avatar

  18  Kashtan Сообщений: 737 - Игорь

  • 13 декабря 2015, 23:25
+
0
Новостей не ждёт


Это происходит, когда на графике нет меток с новостями.
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 14 декабря 2015, 11:25
+
0
Вот я сейчас поставил, и тоже самое. Меток нет и поставил ордера. Как правильно пользоваться им.
P.S. Народ притих, никаких вопросов не задаёт, похоже у всех всё работает)))))))))))
Редактирован: 14 декабря 2015, 17:11
avatar

  18  Kashtan Сообщений: 737 - Игорь

  • 14 декабря 2015, 17:10
+
0
Календарь->Показать на графиках->Добавить все события
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 14 декабря 2015, 17:14
+
0
… Интересно это мне одному так невезёт! В моём терминале после вкладки почта идёт сразу маркет(на демке) А не реале после почты — компания. Календаря нету(
avatar

  18  Kashtan Сообщений: 737 - Игорь

  • 14 декабря 2015, 17:28
+
0
А так то я всегда вот этим календаём пользуюсь proekt28053.ru/_forex.php
О том что он есть в метатрейдере, я и не знал
avatar

  18  Kashtan Сообщений: 737 - Игорь

  • 14 декабря 2015, 17:31
+
0
Сейчас в поддержку написал, и ответили что такой вкладки нет и не было. А если и была, то в очень ранних версиях терминала. Интересно, откуда в Вашем Андрей терминале она есть. Может от брокера зависит?
avatar

  18  Kashtan Сообщений: 737 - Игорь

  • 14 декабря 2015, 17:54
+
0
Терминал МТ5 и демка от метаквотов:

avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 14 декабря 2015, 18:17
+
0
Поясни, для чайника, что означают цифры:
Трейлингстоп
Уровень БУ
Пункты БУ

И какое соотношение между ними выбрать, чтобы сначала выставлялся безубыток, а потом запускался трал?
avatar

  4  Soning Автор Сообщений: 12

  • 18 декабря 2015, 07:44
+
0
Трал значение 300 — при этом стоп начинает с безубытка тянуться за ценой, можно отключить если поставить 0. Уровень бу 200пп. стоп переносится в безубыток на расстояние Пункты БУ. Тоже также отключается. Соотношение подбирайте опытным путем.
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 18 декабря 2015, 13:25

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий
Начать торговлю с Альпари