нет цены?

 

Эксперт выставляет ордера в заданное время. По большей части инструментов все работает нормально, а по некоторым выставление ордеров не происходит. Но вручную ордера ставятся без проблем. Я так понимаю, что если нет цены , то и в ручную не выставит. Пример: выставить ордера по СТ (Cotton) в >= 20:10. Появляется 11,12 минута - ничего не происходит. Вручную ставит.

Кто что подскажет?

 
maxtor:

Эксперт выставляет ордера в заданное время. По большей части инструментов все работает нормально, а по некоторым выставление ордеров не происходит. Но вручную ордера ставятся без проблем. Я так понимаю, что если нет цены , то и в ручную не выставит. Пример: выставить ордера по СТ (Cotton) в >= 20:10. Появляется 11,12 минута - ничего не происходит. Вручную ставит.


Кто что подскажет?



Приложи код, посмотрю.
 
Обработку ошибок надо сделать при установке ордера и можно будет понять почему
 
 
extern int TakeProfit = 500;            
extern int StopLoss = 5;              
extern int lev= 30;  
extern int risk = 50; 
                       
extern int HourOpen = 20;       
extern int MinutesOpen = 10;
extern int SecondsOpen = 30;
extern int HourClose = 16;
extern int MinutesClose = 30;
extern int SecondsClose = 0;
 
int  ho, mo,  so, Lots; 
int pos;
int init()
  {
   return(0);
  }
int deinit()
  {
   return(0);
  }
int start()
  {
mo=Minute(); 
so=Seconds(); 
ho=Hour(); 
  Lots=MathCeil(AccountBalance()*risk/10000.0)/10.0;
   if (Lots<0.1) Lots=0.1;
  
  
//*-----------------------------------------------------------------------  
//|Блок выставления ордеров   
//*-----------------------------------------------------------------------
       if(mo==MinutesOpen && so>=SecondsOpen && ho==HourOpen)
 
       {
        if(OrderTotal(OP_BUYSTOP)==0)
       {
       OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+lev*Point,3,
                                         (Ask+lev*Point)-StopLoss*Point,
                                          Ask+(TakeProfit+lev)*Point,"Покупка",222,0,Blue);
       }
  
     if(OrderTotal(OP_SELLSTOP)==0)
       {
       OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-lev*Point,3,
                                          (Bid-lev*Point)+StopLoss*Point,
                                           Bid-(TakeProfit+lev)*Point,"Продажа",222,0,Red);
       }
     }
//|удаление всех ордеров по данному инструменту                    
   if(TimeHour(TimeCurrent())==HourClose && TimeMinute(TimeCurrent())>=MinutesClose && TimeSeconds(TimeCurrent())>=SecondsClose)//и здесь тоже может не сработать
     {
     for(pos=OrdersTotal()-1; pos>=0; pos--)
       {
       if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES) == true)
         {
         if(OrderSymbol()==Symbol())
           {
           if(OrderType()==OP_BUY)
              {
              OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3,Blue); 
              } 
              if(OrderType()==OP_SELL)
              {
              OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3,Red); 
              }
              if(OrderType()==OP_BUYSTOP)
              {
              OrderDelete(OrderTicket(),Blue); 
              }
              if(OrderType()==OP_SELLSTOP)
              {
              OrderDelete(OrderTicket(),Red);
              }
           }               
         }
       else
         Print("Ошибка ", GetLastError());
       }
     }
   return(0);
  }
int OrderTotal(int type)
  {
  int order=0;
  for(int pos=OrdersTotal()-1; pos>=0; pos--)
    {
    if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES) == true)
      {
      if(OrderSymbol()==Symbol() && OrderType()==type)
        {
        order++;             
        }
      }
    else
      Print("Ошибка ", GetLastError());
    }
  return(order);
    }
Вот код эксперта. Может дело во времени выставления? Дело в том что в 18-19 (время МТ4) ордера ставятся без проблем.
 
Вижу знакомые строчки в коде :))  maxtor  я же вам уже писал там где вы взяли этот код, что не нужно указывать точное время особенно секунды

mo==MinutesOpen && so>=SecondsOpen
Вот вам индикатор, который показывает время последней пришедшей коттировки от ДЦ,  поставте его себе и всё сразу поймёте.

//+------------------------------------------------------------------+
//|                                                   ServerTime.mq4 |
//|                                      Copyright © 2005, komposter |
//|                                      mailto:komposterius@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, komposter"
#property link      "mailto:komposterius@mail.ru"
 
#property indicator_chart_window
 
extern color TextColor = Yellow;
int init()
{
        ObjectCreate( "ServerTime", OBJ_LABEL, 0,0,0,0,0,0,0);
        ObjectSet( "ServerTime", OBJPROP_CORNER, 0);
        ObjectSet( "ServerTime", OBJPROP_XDISTANCE, 0);
        ObjectSet( "ServerTime", OBJPROP_YDISTANCE, 12);
        ObjectSetText(  "ServerTime", "", 12, "Arial", TextColor);
return(0);
}
 
int deinit() { ObjectDelete ( "ServerTime" ); return(0); }
 
int start() { ObjectSetText(  "ServerTime", TimeToStr( CurTime(), TIME_SECONDS ), 12, "Arial", TextColor ); return(0); }




 

Да строчки знакомые :) Дело в том что мне нужно точное время, иначе смысла в этом эксперте для меня нет. Вот и возник вопрос: почему минутки рисуются, ордера вручную ставятся, а экспертом нет. Вот в чем дело-то

 

А возможно брать цену с последней пришедшей котировки и выставлять ордера по ней в заданное время, скажем через 1-10 минут?

 
maxtor:

А возможно брать цену с последней пришедшей котировки и выставлять ордера по ней в заданное время, скажем через 1-10 минут?


Можно, но отложенные. Да и там есть стоп-левел - если цена слишком близко рыночной не получится. Так что наверно у вас не получится.
 
Itso:
maxtor:

А возможно брать цену с последней пришедшей котировки и выставлять ордера по ней в заданное время, скажем через 1-10 минут?


Можно, но отложенные. Да и там есть стоп-левел - если цена слишком близко рыночной не получится. Так что наверно у вас не получится.

Хотя бы посмотреть как это выглядит для начала, попробовать. А потом решать возможно или нет
 

Так никто не ответил:

почему вручную выставляются ордера когда нет котировки, а экспертом нет.

Никто не знает что ли?

 
maxtor:

Так никто не ответил:

почему вручную выставляются ордера когда нет котировки, а экспертом нет.

Никто не знает что ли?


if(mo==MinutesOpen && so>=SecondsOpen && ho==HourOpen)
Судя по вашему коду, вы хотите выставить ордер точно в заданную минуту. Однако, если в эту минуту от сервера не приходил ни один тик на терминал, то следовательно, процедура int start()

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

Причина обращения: