Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Да, хороший совет...
Повторяю
Надо проверять Results.order.
Если ордер выставлен, это не значит что уже совершена сделка.
Кроме этого надо еще проверить, статус ордера и появился он уже в истории или нет.
Биржа не работает с позициями, только ордера.
Я недавно подымал тему по повторному открытию ордеров. Думал, что проблему решил, т.к. неделю все работало очень четко. Но сегодня столкнулся с аналогичной проблемой только при открытии.
На Финаме открылось очень много ордеров, на Открытие 9...хотя во всех случаях должен был открыться только один ордер.
Вот вырезка кода из советника
т.е. из кода видно, что при успешной операции увеличивается переменная OpenOrders, которая изначально равна 0
и если она более 0, то дальнейшего открытия ордера не должно быть, но вся куча ордеров открыта с комментом Ордер1.
В функции открытия ордера проверяю наличие положительного ответа и получение тикета ордера, но почему то эта функция возврвщает фалсе, при том что ордер на самом деле установлен.
Объясните что не так, как решить данную проблему?
Скажите, а для какого рынка Вы пишите этот код?
Для биржевого
Повторяю
Кроме этого надо еще проверить, статус ордера и появился он уже в истории или нет.
Биржа не работает с позициями, только ордера.
Ну Сергей, смотрите....это с документации по результату запроса
deal
Тикетсделки, если она совершена. Сообщается при торговой операцииTRADE_ACTION_DEAL
order
Тикетордера, если он выставлен. Сообщается при торговой операцииTRADE_ACTION_PENDING
у меня не отложенный ордер, я использую TRADE_ACTION_DEAL
Вы наверно работаете лимитниками, тогда все правильно....а тут вход с рынка по текущей цене.Ну Сергей, смотрите....это с документации по результату запроса
deal
Тикетсделки, если она совершена. Сообщается при торговой операцииTRADE_ACTION_DEAL
order
Тикетордера, если он выставлен. Сообщается при торговой операцииTRADE_ACTION_PENDING
у меня не отложенный ордер, я использую TRADE_ACTION_DEAL
Вы наверно работаете лимитниками, тогда все правильно....а тут вход с рынка по текущей цене.SetTypeFilling
SetTypeFilling
Устанавливает тип ордера по исполнению
Устанавливаете то, что сочтёте нужным.
Кстати, только что проверил принтами результаты отправки ордера
так вот тикет во всех случаях выдает равным 0
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);
Кстати, только что проверил принтами результаты отправки ордера
так вот тикет во всех случаях выдает равным 0
Прогресс пошел ... ))
Кстати, только что проверил принтами результаты отправки ордера
так вот тикет во всех случаях выдает равным 0
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 потому что в любом случае рыночные ордера попадают в историю
и по тикету смотрите, что произошло с ордером.