Советник для выставления отложенных ордеров в выходные - страница 2

 
так есть ли такой советник или скрипт в жизни?
 
Можно, с первым тиком советник поставит отложенный. Но с первым тиком большой спред (может цена установки ордера быть в уровне заморозки или как ее там) и неизвестна цена открытия рынка. Тут глубже Вам надо думать
 
Evgenii Averkiev #:
так есть ли такой советник или скрипт в жизни?

Хочу более детально расписать ситуацию с установкой отложенного ордера в выходные дни:

  1. В предыдущих сообщениях данной темы уже было озвучено, что выставить в выходные дни отложенный ордер невозможно, т.к. с момента закрытия торгов на рынке Форекс в пятницу текущей недели и до момента открытия рынка в понедельник следующей недели торговый сервер не принимает и не исполняет торговые приказы.
  2. Если по какой-то причине Вам понадобилось, чтобы отложенный ордер установился в момент прихода первого тика или в любое другое время (при условии, что рынок открыт!) в понедельник следующей недели, тогда потребуется советник (робот), который отследит это событие и установит его. Но тут, как уже предупредил Evgeniy Zhdan, могут возникнуть различные проблемы.
  3. Такой советник лично мне на глаза не попадался, но написать его сможет любой программист. Обратитесь на форуме, может кто-нибудь откликнется и напишет бесплатно такой советник. Есть ещё платный вариант написания советника.
С уважением, Владимир.
 
Мне не понятно, если кто-то пишет программу, и использует отложенные ордеры.
Я никогда не использовал отложенные ордеры.
Они нужны только для ручной торговли.
А если вы пишете прогу, то нет необходимости использовать их. Тем более их ставить, удалить, передвигать и завалить журнал и историю всяким мусором.
Все эти проверки надо делать программным путем.
 

Вот нечто похожее.

sinput ENUM_ORDER_TYPE OrdT=ORDER_TYPE_BUY;
sinput double Price=0.0;
sinput double PriceTP=0.0;
sinput double MinPrice=0.0;
sinput double MaxPrice=DBL_MAX;
sinput double lot=1.0;
sinput ENUM_ORDER_TYPE_FILLING OrdF=ORDER_FILLING_RETURN;
sinput bool async=true;
sinput uint Magic=1001;

MqlTradeRequest TrRq={};
MqlTradeResult  TrRes={};
MqlTradeCheckResult TrChk={};

MqlTick last_tick;
MqlDateTime last_time;

double tick_sz;

bool order_sent=false;

void ClearStructures(void)
  {
   ZeroMemory(TrRq);
   ZeroMemory(TrRes);
   ZeroMemory(TrChk);
  }


int OnInit()
  {
   return(INIT_SUCCEEDED);
  }


void OnDeinit(const int reason)
  {
  }

void OnTick()
  {
   if(order_sent)return;

   bool res=false;

   TimeCurrent(last_time);
   if(last_time.hour<7||
     (last_time.hour==14 && last_time.min<5)||
     (last_time.hour==18 && last_time.min>=45)||
     (last_time.hour==19 && last_time.min<5)||
     (last_time.hour==23 && last_time.min>=50)) return;
   SymbolInfoTick(_Symbol,last_tick);

   if(OrdT==ORDER_TYPE_BUY
      ||OrdT==ORDER_TYPE_BUY_LIMIT)
     {
      if(last_tick.ask>MaxPrice||last_tick.ask==0.0)return;
     }
   else if(OrdT==ORDER_TYPE_SELL
      ||OrdT==ORDER_TYPE_SELL_LIMIT)
     {
      if(last_tick.bid<MinPrice||last_tick.bid==0.0)return;
     }
   else return;

   tick_sz=SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE);

   ClearStructures();

   TrRq.symbol=_Symbol;
   TrRq.magic=Magic;
   TrRq.action=((OrdT==ORDER_TYPE_BUY||OrdT==ORDER_TYPE_SELL)?TRADE_ACTION_DEAL:TRADE_ACTION_PENDING);
   TrRq.type=OrdT;
   TrRq.type_filling=OrdF;
   TrRq.price=(Price==0.0?0.0:NormalizeDouble(MathRound(Price/tick_sz)*tick_sz,_Digits));
   if(PriceTP!=0.0)
     {
      TrRq.tp=(PriceTP==NormalizeDouble(MathRound(PriceTP/tick_sz)*tick_sz,_Digits));
     }
   TrRq.volume=lot;
   TrRq.type_time=ORDER_TIME_DAY;

   res=OrderCheck(TrRq,TrChk);
   if(!res)return;

   res=async?OrderSendAsync(TrRq,TrRes):OrderSend(TrRq,TrRes);
   if(!res
     ||(TrRes.retcode!=TRADE_RETCODE_PLACED
        && TrRes.retcode!=TRADE_RETCODE_DONE
        && TrRes.retcode!=TRADE_RETCODE_DONE_PARTIAL ))return;
   order_sent=true;
   return;
  }

Примитивный пример, который можно дополнить по вкусу.

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