Alexander:
Ortn:
Alexander:
Так Order исполнился, поля изменились...
Вы не поняли. У меня в один момент времени есть два ордера с одним id и различными статусами(!), при этом то который хранится в trader правильный (тк показывает, что заявка исполнена и это действительно так) а у другого статус неверный.
Я понял.
Очевидно значит что вы не так сохраняете Order. Напишите как сохраняете, как копируете.
Я уже выше написал, но могу написать максимально подробно, если это поможет.
У меня создается только одна заявка (пока тестирую автоматическое оптимальное исполнение больших заявок).
Т.е. в классе робота есть одно поле
Order activeorder;
Создается она так:
activeorder = new Order
{
Type = OrderTypes.Limit,
Portfolio = _portfolio,
Price = sell,
Security = _security,
Volume = _size,
Direction = OrderDirections.Sell,
};
_trader.RegisterOrder(activeorder);
Затем когда у меня в _trader происходит событие NewTrades и я решаю что заявку надо передвинуть я делаю следующее:
// блокирую нитку
mut.WaitOne();
if ((activeOrder.State == OrderStates.Active || activeOrder.State == OrderStates.None) && (activeorder.Balance > 0))
activeorder = _trader.ReRegisterOrder(activeorder , sell, activeorder .Balance);
mut.ReleaseMutex();
Так вот в некоторых случаях activeorder висит со статусом None и Balance = 1 хотя заявка уже была исполнена. И это происходит не всегда (примерно в 30% случаях)
зы по OrdersChanged приходит обновление Balance == 0 по заявке но в той заявке, которая сохраняется у меня (activeorder) ничего не меняется (в некоторых случаях)