ФОРТС: не происходит модификация отложенных ордеров [Invalid request] - страница 2

 
iiivasyaiii:

Есть еще момент, после того как ордеры перестали модифицироваться и  пропали из стакана, они остаются во вкладке торговля, и их от туда невозможно удалить, причем даже после перезапуска терминала и компа. Такая вот чертовщина. Может, кто сталкивался с подобным или разработчики чего скажут.
Подскажите, пожалуйста, в чем может быть проблема? 

 Видимо у вас демо сервер, у меня тоже непонятно что творится на демо.

Цена уже несколько раз сходила туда сюда, а ордера зависли и не срабатывают и не удаляются.

глюк 

 
Sergey Chalyshev:

 Видимо у вас демо сервер, у меня тоже непонятно что творится на демо.

Цена уже несколько раз сходила туда сюда, а ордера зависли и не срабатывают и не удаляются.

 

Да, Сергей, на демо. Похоже тут какая-то проблема с ордерами. Не модифицируются (хотя функция модификации возвращает "тру"), из стакана исчезают не пойми куда,  а во вкладке торговля остаются как вкопанные - ни чем не удалить. Причем весной тестировал подобный алгоритм с модификацией ордеров (тоже на демке) такого не возникало. Ну разве что один раз за полмесяца тестирования ордер тоже куда-то пропал, только я не обратил тогда внимания и не стал разбираться - зря видать. А теперь подобные выпады случаются по несколько раз за сессию, может дело в новом билде? Интересно у разработчиков терминала есть мысли по этому поводу?
 

Ребята, щас проверил демо - всё работает.

2015.08.27 19:19:49.343 Trades  '1007933': buy limit 3.00 Si-12.15 at 65657
2015.08.27 19:19:49.344 Trades  '1007933': sell limit 7.00 Si-12.15 at 71849
2015.08.27 19:19:49.350 Trades  '1007933': buy limit 3.00 Si-12.15 at 65657 placed for execution in 6 ms
2015.08.27 19:19:49.352 Trades  '1007933': sell limit 7.00 Si-12.15 at 71849 placed for execution in 7 ms
2015.08.27 19:19:50.489 Trades  '1007933': cancel order #21037280 sell limit 7.00 Si-12.15 at 71849
2015.08.27 19:19:50.496 Trades  '1007933': cancel order #21037280 sell limit 7.00 Si-12.15 at 71849 placed for execution in 6 ms
2015.08.27 19:19:50.686 Trades  '1007933': sell limit 2.00 Si-12.15 at 71849
2015.08.27 19:19:50.694 Trades  '1007933': sell limit 2.00 Si-12.15 at 71849 placed for execution in 8 ms
2015.08.27 19:20:07.400 Trades  '1007933': cancel order #21037279 buy limit 3.00 Si-12.15 at 65657
2015.08.27 19:20:07.408 Trades  '1007933': cancel order #21037279 buy limit 3.00 Si-12.15 at 65657 placed for execution in 7 ms
2015.08.27 19:20:07.636 Trades  '1007933': buy limit 1.00 Si-12.15 at 65657
2015.08.27 19:20:07.644 Trades  '1007933': buy limit 1.00 Si-12.15 at 65657 placed for execution in 7 ms
2015.08.27 19:21:39.428 Trades  '1007933': modify order #21037429 buy limit 1.00 Si-12.15 at 65657 sl: 0 tp: 0 -> 65659, sl: 0 tp: 0
2015.08.27 19:21:39.436 Trades  '1007933': modify order #21037429 buy limit 1.00 Si-12.15 at 65657 sl: 0 tp: 0 -> 65659, sl: 0 tp: 0 placed for execution in 7 ms
2015.08.27 19:21:47.025 Trades  '1007933': modify order #21037429 buy limit 1.00 Si-12.15 at 65659 sl: 0 tp: 0 -> 66620, sl: 0 tp: 0
2015.08.27 19:21:47.034 Trades  '1007933': modify order #21037429 buy limit 1.00 Si-12.15 at 65659 sl: 0 tp: 0 -> 66620, sl: 0 tp: 0 placed for execution in 8 ms
2015.08.27 19:21:55.031 Trades  '1007933': modify order #21037289 sell limit 2.00 Si-12.15 at 71849 sl: 0 tp: 0 -> 71847, sl: 0 tp: 0
2015.08.27 19:21:55.038 Trades  '1007933': modify order #21037289 sell limit 2.00 Si-12.15 at 71849 sl: 0 tp: 0 -> 71847, sl: 0 tp: 0 placed for execution in 6 ms
2015.08.27 19:22:09.510 Trades  '1007933': modify order #21037289 sell limit 2.00 Si-12.15 at 71847 sl: 0 tp: 0 -> 70223, sl: 0 tp: 0
2015.08.27 19:22:09.519 Trades  '1007933': modify order #21037289 sell limit 2.00 Si-12.15 at 71847 sl: 0 tp: 0 -> 70223, sl: 0 tp: 0 placed for execution in 8 ms
2015.08.27 19:22:22.547 Trades  '1007933': cancel order #21037429 buy limit 1.00 Si-12.15 at 66620
2015.08.27 19:22:22.549 Trades  '1007933': cancel order #21037289 sell limit 2.00 Si-12.15 at 70223
2015.08.27 19:22:22.554 Trades  '1007933': cancel order #21037429 buy limit 1.00 Si-12.15 at 66620 placed for execution in 6 ms
2015.08.27 19:22:22.556 Trades  '1007933': cancel order #21037289 sell limit 2.00 Si-12.15 at 70223 placed for execution in 6 ms
 
Михаил:

Ребята, щас проверил демо - всё работает.

Михаил, я это не отрицаю. Модификации работают как надо, всё четко, но до поры до времени. В течении дня пару раз наступает какой-то момент (хорошо бы понять какой, всё не могу отследить) и модификация не происходит, ордер зависает на одном месте в стакане, а потом и во все исчезает из стакана. А в это время журнал терминала рапортует о том, что отдаются запросы на модификацию, сообщает, что ордер якобы размещен и изредка выдает сообщение, что модификация не удалась (см. ниже). 

HP 0 22:01:02.604 Trades '1007836': modify order #20484688 sell limit 1.00 LKOH-9.15 at 23916 sl: 0 tp: 0 -> 23691, sl: 0 tp: 0

PO 0 22:01:02.667 Trades '1007836': modify order #20484688 sell limit 1.00 LKOH-9.15 at 23916 sl: 0 tp: 0 -> 23691, sl: 0 tp: 0 placed for execution in 59 ms

IL 0 22:01:02.968 Trades '1007836': modify order #20484688 sell limit 1.00 LKOH-9.15 at 23916 sl: 0 tp: 0 -> 23697, sl: 0 tp: 0

JK 0 22:01:03.028 Trades '1007836': modify order #20484688 sell limit 1.00 LKOH-9.15 at 23916 sl: 0 tp: 0 -> 23697, sl: 0 tp: 0 placed for execution in 59 ms

GK 2 22:01:03.029 Trades '1007836': failed modify order #20484688 sell limit 1.00  at 23916.00000 sl: 0.00000 tp: 0.00000 -> 23691.00000, sl: 0.00000 tp: 0.00000 [Invalid request]

CQ 0 22:01:03.132 Trades '1007836': modify order #20484688 sell limit 1.00 LKOH-9.15 at 23916 sl: 0 tp: 0 -> 23691, sl: 0 tp: 0

QQ 0 22:01:03.179 Trades '1007836': modify order #20484688 sell limit 1.00 LKOH-9.15 at 23916 sl: 0 tp: 0 -> 23691, sl: 0 tp: 0 placed for execution in 59 ms

EM 0 22:01:03.602 Trades '1007836': modify order #20484688 sell limit 1.00 LKOH-9.15 at 23916 sl: 0 tp: 0 -> 23697, sl: 0 tp: 0

EM 0 22:01:03.665 Trades '1007836': modify order #20484688 sell limit 1.00 LKOH-9.15 at 23916 sl: 0 tp: 0 -> 23697, sl: 0 tp: 0 placed for execution in 59 ms


 

Вы исправьте на код, который я Вам дал и проверьте.

Сделайте исправления по истечению ордера, при установке.

И будет всё работать.

У меня ни на демо, ни на реале нет ошибок. 

 
Михаил:

Ребята, щас проверил демо - всё работает.

Видите, у Вас в логе он модифицируется как надо: был 65657, модифицировался на 65659, при следующей модификации он уже с 65659 модифицируется на 66620. Всё четко идет, так в целом и меня работает большую часть дня, но вот когда начинаются глюки...

то начинает происходить то, что описано в моём логе: ордер на 23916, отдает запрос на модификацию на 23691, пишет вроде что запрос принят к исполнению (как у Вас), но при следующей модификации он модифицируется опять со старой цены 23916, а не с новой 23691. И так продолжается до того пока не перезапустишь робота.

 
Михаил:

Вы исправьте на код, который я Вам дал и проверьте.

Сделайте исправления по истечению ордера, при установке.

И будет всё работать.

У меня ни на демо, ни на реале нет ошибок. 

Я вчера привел код в соответствии с Вашими рекомендациями. Единственное, что исполнение оставил ORDER_TIME_SPECIFIED_DAY.

Вы же рекомендуете ORDER_TIME_DAY. В таком случае, подскажите, а как быть при типе истечения "ORDER_TIME_DAY", если ордер не успел исполнится сегодня и должен соответственно еще пожить и "помодифицироваться" завтра. По идее же ордер в конце дня будет снят, и на следующий день уже не чему будет модифицироваться. Как Вы это обходите?

 
iiivasyaiii:

Я вчера привел код в соответствии с Вашими рекомендациями. Единственное, что исполнение оставил ORDER_TIME_SPECIFIED_DAY.

Вы же рекомендуете ORDER_TIME_DAY. В таком случае, подскажите, а как быть при типе истечения "ORDER_TIME_DAY", если ордер не успел исполнится сегодня и должен соответственно еще пожить и "помодифицироваться" завтра. По идее же ордер в конце дня будет снят, и на следующий день уже не чему будет модифицироваться. Как Вы это обходите?

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

Не рабочее время - ордер снимается, рабочее - ордер выставляется.

Опция ORDER_TIME_SPECIFIED_DAY не очень хороша тем, что установив ордер в пределах лимитов, на

следующий день Вы можете выйти за эти лимиты и он просто будет "висеть" неприкаянным. 

 

И всегда, при инициализации нужно проверять, какие параметры поддерживает сервер:

 

//+------------------------------------------------------------------+
//| Expert Check Market Parametrs function                           |
//+------------------------------------------------------------------+
bool CheckMarketParam( const string a_symbol )
{
//--- Check for full mode
  ENUM_SYMBOL_TRADE_MODE trade_mode = ENUM_SYMBOL_TRADE_MODE( SymbolInfoInteger( a_symbol, SYMBOL_TRADE_MODE ) );
  
  if ( trade_mode != SYMBOL_TRADE_MODE_FULL )
  {
    MessageBox( "Символ " + a_symbol + " не поддерживает полную торговлю!", "Ошибка", MB_OK | MB_ICONHAND );
    return( false );
  }
//--- Check trade execution mode
  ENUM_SYMBOL_TRADE_EXECUTION market_info = ENUM_SYMBOL_TRADE_EXECUTION( SymbolInfoInteger( a_symbol, SYMBOL_TRADE_EXEMODE ) );
    
  if ( market_info != SYMBOL_TRADE_EXECUTION_EXCHANGE )
  {
    MessageBox( "Символ " + a_symbol + " не поддерживает TRADE EXECUTION EXCHANGE режим!", "Ошибка", MB_OK | MB_ICONHAND );
    return( false );
  }
//--- Check orders mode
  int order_mode = int( SymbolInfoInteger( a_symbol, SYMBOL_ORDER_MODE ) );
  
  if ( ( SYMBOL_ORDER_MARKET & order_mode )!= SYMBOL_ORDER_MARKET )
  {
    MessageBox( "Символ " + a_symbol + " не поддерживает Market Execution режим установки ордеров!", "Ошибка", MB_OK | MB_ICONHAND );
    return( false );
  }
  
  if ( ( SYMBOL_ORDER_LIMIT & order_mode )!= SYMBOL_ORDER_LIMIT )
  {
    MessageBox( "Символ " + a_symbol + " не поддерживает Limit режим установки ордеров!", "Ошибка", MB_OK | MB_ICONHAND );
    return( false );
  }
  
  if ( ( SYMBOL_ORDER_STOP_LIMIT & order_mode ) != SYMBOL_ORDER_STOP_LIMIT )
  {
    MessageBox( "Символ " + a_symbol + " не поддерживает Stop Limit режим установки ордеров!", "Ошибка", MB_OK | MB_ICONHAND );
    return( false );
  }
  
  if ( ( SYMBOL_ORDER_STOP & order_mode )!= SYMBOL_ORDER_STOP )
  {
    MessageBox( "Символ " + a_symbol + " не поддерживает Stop режим установки ордеров!", "Ошибка", MB_OK | MB_ICONHAND );
    return( false );
  }
  
  if ( ( SYMBOL_ORDER_SL & order_mode) != SYMBOL_ORDER_SL )
  {
    MessageBox( "Символ " + a_symbol + " не поддерживает Stop Loss режим установки ордеров!", "Ошибка", MB_OK | MB_ICONHAND );
    return( false );
  }
  
  if ( ( SYMBOL_ORDER_TP & order_mode) != SYMBOL_ORDER_TP )
  {
    MessageBox( "Символ " + a_symbol + " не поддерживает Take Profit режим установки ордеров!", "Ошибка", MB_OK | MB_ICONHAND );
    return( false );
  }
//---Filing mode
  int filling_mode = int( SymbolInfoInteger( a_symbol, SYMBOL_FILLING_MODE ) );
  
  if ( ( SYMBOL_FILLING_IOC & filling_mode ) != SYMBOL_FILLING_IOC )
  {
    MessageBox( "Символ " + a_symbol + " не поддерживает filling IOC режим исполнения ордеров!", "Ошибка", MB_OK | MB_ICONHAND );
    return( false );
  }
  
  if ( ( SYMBOL_FILLING_FOK & filling_mode ) != SYMBOL_FILLING_FOK )
  {
    MessageBox( "Символ " + a_symbol + " не поддерживает filling FOK режим исполнения ордеров!", "Ошибка", MB_OK | MB_ICONHAND );
    return( false );
  }      
//---Ckeck expiration
  int symbol_exp_type = int( SymbolInfoInteger( a_symbol, SYMBOL_EXPIRATION_MODE ) );
  
  if ( ( symbol_exp_type & SYMBOL_EXPIRATION_DAY ) != SYMBOL_EXPIRATION_DAY )
  {
    MessageBox( "Символ " + a_symbol + " не поддерживает экспирацию DAY!", "Ошибка", MB_OK | MB_ICONHAND );
    return( false );
  }
  if ( ( symbol_exp_type & SYMBOL_EXPIRATION_SPECIFIED_DAY ) != SYMBOL_EXPIRATION_SPECIFIED_DAY )
  {
    MessageBox( "Символ " + a_symbol + " не поддерживает экспирацию SPECIFIED DAY!", "Ошибка", MB_OK | MB_ICONHAND );
    return( false );
  }
  return( true );
} 
 
Михаил:

И всегда, при инициализации нужно проверять, какие параметры поддерживает сервер:

 

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