В стратегии цена стоп заявки рассчитывается как "GetAveragePrice исполнившейся Short заявки " - 80 Стратегия работало какое-то время, все было нормально, стоп-заявки исполнялись. В какой то момент почему-то при расчете стопа GetAveragePrice было 0 и цена получилась отрицательная, произошел сбой:
System.ArgumentOutOfRangeException: Цена заявки должна быть положительной. Parameter name: order Actual value was -80. at #=qGoBuDlT6LOhOqFv3WY9JfVoUGMLwCQqmxGn3ux1xsRU=.#=qrmBGhucdwUvMBWxvyf90OGFH_$dcrvDHgJnWvyziAz4=(Order #=qRqhlCAIZNVQm5yp$9tOMHw==, Boolean #=qcRD_tAfwy2bBT7qJZOuzHw==) at #=qGoBuDlT6LOhOqFv3WY9JfVoUGMLwCQqmxGn3ux1xsRU=.#=qF6Ws2dOW1i8aCwov_qo_Xw==(Order #=qZn3kSxtavZ876oTZ3s7DtQ==, Boolean #=qjNfQ2svAOHqFj5BSaDISdQ==) at StockSharp.Algo.BaseTrader.RegisterOrder(Order order) at StockSharp.Algo.Strategies.Strategy.RegisterOrder(Order order)
Подскажите почему так могло получится? Каким образом и в какой момент в библиотеке происходит расчет AveragePrice для исполнившейся заявки? Выходит нельзя полагаться на GetAveragePrice ?
Версия S# 4.1.1
Comentarios (15)
Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario
Неужели ни кто не сталкивался с таким? Может разработчики подскажут каким образом и в какой момент в библиотеке происходит расчет AveragePrice для исполнившейся заявки? Проблема в нестабильности заполнения значения на стороне библиотеки или квика?
Может надо проверку делать исполнился ордер или нет?
Это могло произойти в том случае, если не успела придти информация по своим сделкам по данному ордеру. Т.е. надо дожидаться когда все сделки придут - средняя цена вычисляется именно по совершившимся сделкам данного ордера.
Подскажите пожалуйста, как тогда правильнее в стратегии выставлять защитные заявки, по событию NewMyTrades или по правилу OrderPartiallyMatched? Сейчас я выставляю при вызове правила OrderPartiallyMatched, где как раз и получается ситуация когда GetAveragePrice нулевая.
Подскажите пожалуйста еще ответы на такие вопросы:
Что-то я запутался. Если выставляемые защитные заявки зависят от средней цены исполнения и баланса исполнившейся заявки, а эти данные приходят в разное время и по разным событиям, как тогда правильно выставлять защитные заявки и в каком событии, чтобы гарантированно эти поля были заполнены?
Извиняюсь, но еще раз уточню. Если выставлять защитные заявки как по ссылке, те по правилу заявки WhenNewTrades, я так понимаю все равно остается риск того что Balance у заявки не успеет обновиться (так как это делается по другому событию OrderChanged), правильно?
Да, такая ситуация вполне вероятна. А зачем там баланс, если защищается именно каждая сделка?
Весь объем по заявке в MyTrade.Order.Volume, объем прошедший по сделке в MyTrade.Trade.Volume
У меня по логике стратегии нужно еще определять исполнилась ли заявка полностью или нет, а если исполнилась то должно известна быть средняя цена исполнения. Это в правиле WhenNewTrades как я понимаю никак не определить?