Как правильно открыть ордер по рынку? - страница 4

 
Gennady Mazur:
Да, хороший совет...

Повторяю

Надо проверять  Results.order. 

Если ордер выставлен, это не значит что уже совершена сделка.  

Кроме этого надо еще проверить, статус ордера и появился он уже в истории или нет.

Биржа не работает с позициями, только ордера. 

 
Gennady Mazur:

Я недавно подымал тему по повторному открытию ордеров. Думал, что проблему решил, т.к. неделю все работало очень четко. Но сегодня столкнулся с аналогичной проблемой только при открытии.
На Финаме открылось очень много ордеров, на Открытие 9...хотя во всех случаях должен был открыться только один ордер.

Вот вырезка кода из советника

    

 т.е. из кода видно, что при успешной операции увеличивается переменная OpenOrders, которая изначально равна 0

и если она более 0, то дальнейшего открытия ордера не должно быть, но вся куча ордеров открыта с комментом Ордер1. 

  В функции открытия ордера проверяю наличие положительного ответа и получение тикета ордера, но почему то эта функция возврвщает фалсе, при том что ордер на самом деле установлен.

Объясните что не так, как решить данную проблему? 

Скажите, а для какого рынка Вы пишите этот код?
 
prostotrader:
Скажите, а для какого рынка Вы пишите этот код?
Для биржевого
 
Gennady Mazur:
Для биржевого
Ок, щас посмотрю...
 
Sergey Chalyshev:

Повторяю

Кроме этого надо еще проверить, статус ордера и появился он уже в истории или нет.

Биржа не работает с позициями, только ордера. 

Ну Сергей, смотрите....это с документации по результату запроса

deal

Тикетсделки, если она совершена. Сообщается при торговой операцииTRADE_ACTION_DEAL

order

Тикетордера, если он выставлен. Сообщается при торговой операцииTRADE_ACTION_PENDING


 у меня не отложенный ордер, я использую TRADE_ACTION_DEAL

Вы наверно работаете лимитниками, тогда все правильно....а тут вход с рынка по текущей цене.
 
Gennady Mazur:

Ну Сергей, смотрите....это с документации по результату запроса

deal

Тикетсделки, если она совершена. Сообщается при торговой операцииTRADE_ACTION_DEAL

order

Тикетордера, если он выставлен. Сообщается при торговой операцииTRADE_ACTION_PENDING


 у меня не отложенный ордер, я использую TRADE_ACTION_DEAL

Вы наверно работаете лимитниками, тогда все правильно....а тут вход с рынка по текущей цене.
Еще раз прочитайте мой ответ, или пишите в servicedesk.
 
Vladimir Karputov:

SetTypeFilling 

SetTypeFilling

Устанавливает тип ордера по исполнению


Устанавливаете то, что сочтёте нужным.

Кстати, только что проверил принтами результаты отправки ордера

так вот тикет во всех случаях выдает равным 0 

 

  bool res=false;
  res=OrderSend(Request,Results);
  if(res)
  {
    Print(_Symbol+" Test True order "+(string)Results.deal);
    if(Results.deal>0) return(true);
    else return(false);
  }
    Print(_Symbol+" Test False order "+(string)Results.deal);
  return(false);
 
Gennady Mazur:

Кстати, только что проверил принтами результаты отправки ордера

так вот тикет во всех случаях выдает равным 0 

Прогресс пошел ... )) 



 

 
Gennady Mazur:

Кстати, только что проверил принтами результаты отправки ордера

так вот тикет во всех случаях выдает равным 0 

 

  bool res=false;
  res=OrderSend(Request,Results);
  if(res)
  {
    Print(_Symbol+" Test True order "+(string)Results.deal);
    if(Results.deal>0) return(true);
    else return(false);
  }
    Print(_Symbol+" Test False order "+(string)Results.deal);
  return(false);

А где коды возврата? Как понять - была ошибка или нет?

 

Я же дал пример: двойная защита и вывод тикета и кода возврата. 

 

Не нашел пример. Поясню так.

Отправляя ордер по-рынку ордер должен исполнится или отклонится (так как у Вас заливка FOK)

Поэтому не нужно ждать deal, а нужно получить ТИКЕТ.

Получив тикет, ВЫ "идёте" с этим тикетом в OnTradeTransaction()

слушаете TRADE_TRANSACTION_HISTORY_ADD потому что в любом случае рыночные ордера попадают в историю

и по тикету смотрите, что произошло с ордером. 

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