Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
День добрый.
Никто никого не запугал.
У Вас нет switch(trans.type)
Ну само собой приведенный case находится в switch(trans.type). Поскольку там были еще case я не стал выкладывать весь код, чтобы не нагружать лишней информацией.
fxsaber спасибо за пример!
Alexey, именно так и есть. При неттинговом режиме я торгую на одном инструменте 2мя разными роботами. Те 2 поста, которые вы процитировали, дополняют друг друга.
Интересно решить проблему, отталкиваясь от первичного триггера изменения - onTradeTransaction.
Итого текущие проблемы, который встретил:
1. deal_add срабатывает, но позы нет. Пока мыслей нет
2. deal_add срабатывает, но ордер находится в третьем измерении. Поставил слип, последние пару дней вроде помогает. За 1 секунду ордер успевает добраться до истории. У меня не высокочастотные роботы и по рыночным ордерам не работаю, поэтому такой вариант решения подходит.
3. deal_add срабатывает 2 раза. то есть один и тот же deal_add срабатывает 2 раза. Решается проверкой тикета прошлой сделки и сравнения с текущей.
Остается пункт 1. Немного пояснения по нему.
Вчера выставил sell_limit, он сработал, пришла deal_add, но позиция не появилась и мы открыли стоп ордера просто так. Начал смотреть на описание транзакции и увидел что тип сделки DEAL_TYPE_SELL, а тип ордера в ней ORDER_TYPE_BUY. При этом тикет одера наш. Как-то не логично. Решил поставить проверку в OnTradeTransaction на транзакцию deal_add, что тип ордера и тип сделки должны совпадать по направлению.
Поставил робота на демо, пришла снова подобная транзакция , но этот раз позиция изменилась. Но из-за нашей проверки стоп ордера не выставились. Что происходит?!
prostotrader, сразу скажу, это то, что приходит в терминал. Без моих выдумываний.
Вчера выставил sell_limit, он сработал, пришла deal_add, но позиция не появилась и мы открыли стоп ордера просто так. Начал смотреть на описание транзакции и увидел что тип сделки DEAL_TYPE_SELL, а тип ордера в ней ORDER_TYPE_BUY. При этом тикет одера наш. Как-то не логично. Решил поставить проверку в OnTradeTransaction на транзакцию deal_add, что тип ордера и тип сделки должны совпадать по направлению.
А вот тут стОит перечитать справку "Структура торговой транзакции" - в части, какие поля заполняются для типа deal_add.
И брать свойства ордера не из транзакции (где они не заполнены, но нули тоже соответствуют каким-то значениям в enum-типе), а из самого ордера, если он в данный момент доступен (а не в процессе перехода из ордеров в историю).
С помощью этого проще анализировать, как все происходит.
Можно дополнить, чтобы вместе с транзакциями логировались состояния позиций, текущих ордеров и торговая история. Тогда вся картина будет.
А вот тут стОит перечитать справку "Структура торговой транзакции" - в части, какие поля заполняются для типа deal_add.
И брать свойства ордера не из транзакции (где они не заполнены, но нули тоже соответствуют каким-то значениям в enum-типе), а из самого ордера, если он в данный момент доступен (а не в процессе перехода из ордеров в историю).
Согласен, знал об этом, но не обратил внимания. Спасибо, что напомнили.
Однако проблема с тем, что позиция не появилась в одном случае, а в другом появилась, остается и непонятна.
Илья Ребенок:
Однако проблема с тем, что позиция не появилась в одном случае, а в другом появилась, остается и непонятна.
Тикет позиции в транзакции deal_add был, а позиции не было до этого и она не появилась при этом? Тут надо разбираться.
Тикет позиции в транзакции deal_add был, а позиции не было до этого и она не появилась при этом? Тут надо разбираться.
позиции не было до этого
позиции не было до этого
А тикет позиции в транзакции был?
А тикет позиции в транзакции был?
Постом выше я наверное немного внес непонимание. Позиция была, потом была закрыта по стоп ордерам. То есть кол-во позиции стало 0. Потом сработала сделка, но позиция не появилась
Я так понимаю вы об этом. В транзакции была информация о тикете позиции, но этот тикет = тикету прошлого ордера. Как в общем-то и должно быть при неттинговом режиме, если я верно понимаю.
Position: 82675534
Постом выше я наверное немного внес непонимание. Позиция была, потом была закрыта по стоп ордерам. То есть кол-во позиции стало 0. Потом сработала сделка, но позиция не появилась
Я так понимаю вы об этом. В транзакции была информация о тикете позиции, но этот тикет = тикету прошлого ордера. Как в общем-то и должно быть при неттинговом режиме, если я верно понимаю.
Если позиция по символу (совокупная, всех роботов и ручных сделок вместе) стала 0.0, то следующая сделка откроет (DEAL_ENTRY_IN) новую позицию, с новым тикетом (==тикету ордера).
Собственно, как мне кажется, при неттинге смотреть на позицию вообще не надо - каждый робот должен учитывать "свою" - как результаты сделок по своим ордерам.
Наличие позиций и DEAL_ENTRY-флаги никак не должны участвовать в логике.
Нужно смотреть только на мэджик и комментарий новых сделок и текущих ордеров, как на идентификаторы свой/чужой.
Рабочий код показывал. Там ровно это.
Попытка решить задачу через OnTradeTransaction - это слабое представление о количестве подводных камней. Обойти которые в конкретной задаче еще иногда можно. Но стоит только немного задачу поменять, как вся логика нарушается при OnTradeTransaction-реализации.
Разработчики сделали событийную торговую модель, но ни одного торгового рабочего примера не предоставили. Потому что это полная задница, во что выливается код и как сильно он зависит от каждого примера.
Поэтому рекомендовал бы смотреть в сторону синхронных торговых операций и OnTrade-функции. Там все на порядки проще и логика очень гибкая для изменений. Более того, надежней.
Переход на Async+Transactions сравни переходу с высокоуровневого языка на ассемблер. Т.е. его нужно производить на самом последнем этапе создания ТС, когда она ПОЛНОСТЬЮ исследована, готова к РЕАЛУ и осталось последнее - ускорить торговые операции БЕЗ изменения торговой логики.