Открытие. Проблема с установкой SELLIMIT - код 10008 - ордера нет

 

Всем привет, осваиваю фортс и в связи с этим вопрос. Есть брокер О 

пытаюсь открыть сделку SELLIMIT  - руками все ок. а вот советником никак.

 

код :

void OpenSELLLIMIT()
  {

     
      request.symbol = symToWork;
      request.volume = lotss;

      request.action=TRADE_ACTION_PENDING; // операция с рынка
                                                                                                                                               //                   request.type_filling=ORDER_FILLING_CANCEL;
      request.type=ORDER_TYPE_SELL_LIMIT;
      request.price=SymbolInfoDouble(symToWork,SYMBOL_BID)+OrderPricePip*i*SymbolInfoDouble(symToWork,SYMBOL_POINT);


         request.type_time=ORDER_TIME_DAY;
       

      bool sender=OrderSend(request,result);
      if(result.retcode==TRADE_RETCODE_DONE)
        {
         if(Sounds)PlaySound("ok.wav"); Print("Result = "+(string)result.retcode+
            " symbol "+(string)request.symbol+" volume "+(string)request.volume+" action "+(string)request.action+" tp "+(string)request.tp+" sl "
            +(string)request.sl+" type "+(string)request.type+" price "+(string)request.price+"   "+ErrorDescription(result.retcode));
        }
      else
        {
         if(Sounds)PlaySound("stops.wav");
         Print("Result = "+(string)result.retcode+
               " symbol "+(string)request.symbol+" volume "+(string)request.volume+" action "+(string)request.action+" tp "+(string)request.tp+" sl "
               +(string)request.sl+" type "+(string)request.type+" price "+(string)request.price+"   "+ErrorDescription(result.retcode));
        }
     
  }

 

возвращает код 10008 но в терминале ордера нет :-)

в журнале также пишет PLACED

 

при   чем если размещать СЕЛЛИТИСТОП то все ок.

 

в чем может быть трабл?  

 
Vladislav Andruschenko:

Всем привет, осваиваю фортс и в связи с этим вопрос. Есть брокер О 

пытаюсь открыть сделку SELLIMIT  - руками все ок. а вот советником никак.

 

код :

 

возвращает код 10008 но в терминале ордера нет :-)

в журнале также пишет PLACED

 

при   чем если размещать СЕЛЛИТИСТОП то все ок.

 

в чем может быть трабл?  

if(result.retcode==TRADE_RETCODE_DONE)

TRADE_RETCODE_DONE это для ФОРЕКС, а для ФОРТС TRADE_RETCODE_PLACED

 

И ещё. Какой Вы хотите отослать ордер?

Рыночный или отложенный? 

 

если ставлю       request.type_filling=(ENUM_ORDER_TYPE_FILLING)TypeFilling;

RETURN

все работает  

 
Михаил:

TRADE_RETCODE_DONE это для ФОРЕКС, а для ФОРТС TRADE_RETCODE_PLACED

спасибо большое
 
я так опнял ордер сразу снимается при ФОК 
 
Vladislav Andruschenko:
я так опнял ордер сразу снимается при ФОК 

Рыночный или лимитный:

//+------------------------------------------------------------------+
//| Expert set order function                                        |
//+------------------------------------------------------------------+
void SetOrder( const string aSymbol, ulong &order_ticket, const double price, const double volume, const bool buy_sell )
{
  MqlTradeRequest request = {0};
  MqlTradeResult  result  = {0};
   
//--- Fill structure
  request.magic = 987654321;
  request.symbol = aSymbol;
  request.volume = volume; 
  request.type_filling = ORDER_FILLING_IOC;  //По вкусу
  request.type_time = ORDER_TIME_DAY;
    
  if ( price == 0 )
  {
    request.action = TRADE_ACTION_DEAL;
    request.comment = "Рыночный ордер...";
//---    
    if ( buy_sell )
    {
      request.type = ORDER_TYPE_BUY;
    }
    else
    {
      request.type = ORDER_TYPE_SELL;
    }
  }
  else
  { 
    request.action = TRADE_ACTION_PENDING;
    request.price = price;
    request.comment = "Лимитный ордер...";
//---    
    if (buy_sell)
    {
      request.type = ORDER_TYPE_BUY_LIMIT;
    }
    else
    {
      request.type = ORDER_TYPE_SELL_LIMIT;
    }   
  }  
//--- Send order
  if ( OrderSend( request, result ) )
  {
    if ( result.retcode == TRADE_RETCODE_PLACED ) 
    {
      order_ticket = result.order;
    }
  }
  else
  {
    Print( "Установка ордера не выполнена! ", aSymbol,  "; Объём = ", volume, "; Код возврата = ", result.retcode);
  }
}

 

Отложенный:

//+------------------------------------------------------------------+
//| Place order                                                      |
//+------------------------------------------------------------------+
void PlaceOrder( ulong &ticket, const double price, const double volume, const bool buy_sell )
{
  MqlTradeRequest request = {0};
  MqlTradeResult  result  = {0};
  ticket = 0;
     
//--- Fill structure
  request.action = TRADE_ACTION_PENDING;
  request.magic  = 987654321;
  request.symbol = a_symbol;
  request.volume = volume;
  request.price  = price;
    
  if ( buy_sell )
  {
    request.type = ORDER_TYPE_BUY_LIMIT;
  }
  else
  {
    request.type = ORDER_TYPE_SELL_LIMIT;
  } 
  request.comment = "Отложенный ордер...";      
  request.type_filling = ORDER_FILLING_RETURN;
  request.type_time = ORDER_TIME_DAY;
  
//--- Send order
  if ( OrderSend( request, result ) )
  {
    if ( result.retcode == TRADE_RETCODE_PLACED ) 
    {
      ticket = result.order;

    }
  }
  else
  {
    Print( "Ордер не установлен! ", a_symbol, ", Цена = ", price, "; Объём = ", volume, "; Код возврата = ", result.retcode );
  }
}
 

спасибо, более менее понятно, две функции у Вас одинаковые по сути, если сделать выбор типа исполнения

только начал изучать фортс. буду копать дальше.  

 
Vladislav Andruschenko:

спасибо, более менее понятно, две функции у Вас одинаковые по сути, если сделать выбор типа исполнения

только начал изучать фортс. буду копать дальше.  

Добро пожаловать на ФОРТС!

Будут любые вопросы - обращайтесь. 

 
Спасибо, я так понял это целая ветка "приколов"
 
Vladislav Andruschenko:
Спасибо, я так понял это целая ветка "приколов"
По разному бывает :)
 

я просто хочу сделать панель для фортс на основе своей, вот пытаюсь, но срабатывает отложенник не всегда

я так понял есть свои нюансы

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