0
Почему не прогнать, я специально делал открытие позиций чтобы можно было отладить и протестировать хотя бы приблизительно.
avatar

AM2

  • 10 декабря 2015, 20:46
0
Смотрите, если устраивает, то все.
avatar

AM2

  • 10 декабря 2015, 19:40
0
Вот:




//+------------------------------------------------------------------+
//|                                                         T3MA.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property description "Simple expert advisor"

//--- Inputs
extern double Lots      = 0.1;      // лот
extern int StopLoss     = 500;      // лось
extern int TakeProfit   = 500;      // язь
extern int Slip         = 30;       // реквот
extern int Shift        = 1;        // сдвиг
extern int Magic        = 123;      // магик

extern string IndName   = "T3MA-ALARM";
extern int IndPeriod    = 4;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {
   int    r=0;
   double sl=0,tp=0;
//--- get Ind
   double FBlue=iCustom(Symbol(),0,IndName,IndPeriod,0,Shift);
   double FRed=iCustom(Symbol(),0,IndName,IndPeriod,1,Shift);
//--- sell conditions
   if(FRed<100)
     {
      if(StopLoss>0) sl=NormalizeDouble(Bid+StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(Bid-TakeProfit*Point,Digits);
      r=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slip,sl,tp,"",Magic,0,Red);
      return;
     }
//--- buy conditions
   if(FBlue<100)
     {
      if(StopLoss>0) sl=NormalizeDouble(Ask-StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(Ask+TakeProfit*Point,Digits);
      r=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slip,sl,tp,"",Magic,0,Blue);
      return;
     }
//---
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void ClosePos()
  {
//--- get Ind
   double FBlue=iCustom(Symbol(),0,IndName,IndPeriod,0,Shift);
   double FRed=iCustom(Symbol(),0,IndName,IndPeriod,1,Shift);

   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderMagicNumber()==Magic || OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUY)
              {
               if(FRed<100)
                 {
                  bool c=OrderClose(OrderTicket(),OrderLots(),Bid,Slip,White);
                 }
               break;
              }
            if(OrderType()==OP_SELL)
              {
               if(FBlue<100)
                 {
                  c=OrderClose(OrderTicket(),OrderLots(),Ask,Slip,White);
                 }
               break;
              }
           }
        }

     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   double FBlue=iCustom(Symbol(),0,IndName,IndPeriod,0,Shift);
   double FRed=iCustom(Symbol(),0,IndName,IndPeriod,1,Shift);

   if(CountTrades()<1) OpenPos();
   if(CountTrades()>0) ClosePos();

   Comment("\n Blue: ",FBlue,
           "\n Red: ",FRed);
//---
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 10 декабря 2015, 19:38
0
скопировал твой код

Этот советник T3MA-ALARM делай, если хочешь.
avatar

AM2

  • 10 декабря 2015, 17:37
0
Теперь буду смотреть только когда свободное время будет и повнимательнее не путайте больше советник с индикатором!
avatar

AM2

  • 10 декабря 2015, 16:24
0
Посмотрю сегодня.
avatar

AM2

  • 10 декабря 2015, 14:15
0
У вас в этом месяце есть один заказ. Если только будет свободное время или сделает кто то еще.
avatar

AM2

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


avatar

AM2

  • 10 декабря 2015, 14:01
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

AM2

  • 10 декабря 2015, 13:53
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);
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 10 декабря 2015, 13:08
0
Опишите полностью ТЗ как можно подробнее, а то вы каждый раз пишете разные вещи.

при открытии нового бара открывается ордер сначала на продажу потом на покупку!


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

AM2

  • 10 декабря 2015, 11:44
0
А можно как то сделать так в советнике чтобы можно было выбрать важность новости. Очень интересно погонять советник только на важных новостях


В индикаторе можно.
avatar

AM2

  • 10 декабря 2015, 11:26
0
Может архив не обновился. Сейчас посмотрю. Обновил: www.opentraders.ru/downloads/927/
avatar

AM2

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

avatar

AM2

  • 10 декабря 2015, 09:48
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

AM2

  • 10 декабря 2015, 09:34
0
Посмотрите вариант: www.opentraders.ru/downloads/927/

avatar

AM2

  • 10 декабря 2015, 09:06
0
Я уже три раза время потерял.
avatar

AM2

  • 9 декабря 2015, 23:08
0
Если не такой большой секрет пропишите все условия, тогда будет предмет для обсуждения.
avatar

AM2

  • 9 декабря 2015, 23:06
+1
Да это вернее будет. *yes* 
avatar

AM2

  • 9 декабря 2015, 14:19