Выставление отложенных ордеров - страница 5

 

ну в описании написано что параметр expiration вообще задается в барах, я ни фига не понимаю....

спасибо за вариант, но что то не то, ордер на покупку все равно исчезает и идут повторные попытки его выставить

кстати в тестере теперь ордера не исчезают в конце дня :) при том варианте который вы предложили

если я сам руками ставлю лимитный ордер, он стоит как вкопанный с теми же параметрами цены и уровней стопа и профита.

 я ни фига не понимаю... что не так с этой херней

пойду вздремну :) мож завтра что увижу на свежую голову. 

 

Нашел в чем косяк с лимит заявками :) На свежую голову оказалось проще посмотреть :)

В общем  косяк в политике исполнения ордера. Стандартным образом не получается ее указать. Пришлось схитрить :) 

Вот полностью рабочий и готовый к употреблению результат. И я еще нагуглил на форуме что результат может быть разный у разных брокеров, так что если у кого не заработает смотрите поле type_filling.

void openbuy(double linebuy, double linesell, double tpbuy, double tpsell)
{
 
 if(SymbolInfoDouble(my_symbol,SYMBOL_ASK)<linebuy)
  { 
   m_Trade.BuyStop(Lots,linebuy,my_symbol,linesell,tpbuy,ORDER_TIME_GTC,SYMBOL_EXPIRATION_DAY,"BuyStop");  // если мы тут buy ордера нет, выставляем его
  }
 else
  {
   MqlTradeRequest request; 
   MqlTradeResult result;
   ZeroMemory(request);
   ZeroMemory(result);
   request.action       = TRADE_ACTION_PENDING;
   request.symbol       = my_symbol;
   request.volume       = Lots;
   request.deviation    = 0;
   request.magic        = 261085;
   request.type_filling = ORDER_FILLING_RETURN;
   request.sl           = linesell;
   request.tp           = tpbuy;
   request.type         = ORDER_TYPE_BUY_LIMIT;
   request.price        = linebuy;
   request.type_time    = ORDER_TIME_DAY;
   request.expiration   = ORDER_TIME_DAY;
   m_Trade.OrderSend(request,result);  // если мы тут buy ордера нет, выставляем его
  }
}
//=====================================================
void opensell(double linebuy, double linesell, double tpbuy, double tpsell)
{
 
 if(SymbolInfoDouble(my_symbol,SYMBOL_BID)>linesell)
  {
   m_Trade.SellStop(Lots,linesell,my_symbol,linebuy,tpsell,ORDER_TIME_GTC,SYMBOL_EXPIRATION_DAY,"SellStop");  // если мы тут sell ордера нет, выставляем его
  }
 else
  {
   MqlTradeRequest request; 
   MqlTradeResult result;
   ZeroMemory(request);
   ZeroMemory(result);
   request.action       = TRADE_ACTION_PENDING;
   request.symbol       = my_symbol;
   request.volume       = Lots;
   request.deviation    = 0;
   request.magic        = 261085;
   request.type_filling = ORDER_FILLING_RETURN;
   request.sl           = linebuy;
   request.tp           = tpsell;
   request.type         = ORDER_TYPE_SELL_LIMIT;
   request.price        = linesell;
   request.type_time    = ORDER_TIME_DAY;
   request.expiration   = ORDER_TIME_DAY;
   m_Trade.OrderSend(request,result);  // если мы тут sell ордера нет, выставляем его
  }
}
Причина обращения: