PositionManager.Position & StrategyPositionManager.OnOrderChanged
Ввиду с проблемой неправильного подсчета PositionManager.Position описанной
здесьрешил написать простую рабочую реализацию PositionManager для проведения тестов, по примеру который предложил Михаил по ссылке выше
Итак простая реализация, как мне кажется правильного алгоритма
Код class NewPositionManager : StrategyPositionManager
{
public NewPositionManager(Strategy strategy, bool byOrders) : base(strategy, byOrders) {}
protected override void OnOrderChanged(Order order)
{
if (TraderHelper.IsFilledEmpty(order) || TraderHelper.IsCanceled(order))
return;
else if (TraderHelper.IsFilledPartially(order))
{
//TODO
}
else if(TraderHelper.IsMatched(order))
{
base.Position += (order.Direction == OrderDirections.Buy) ? order.Volume : -1*(order.Volume);
}
}
}
при тестировании на обьеме в
1 контракт выявила также не правильный подсчет позиции, а именно позиция ровно в
2 раза отлична от верной
при отлатке через дебагер обнаружил что метод OnOrderChanged вызывается два раза для одной и тойже заявки, отсюда и неправильный подсчет..
Ошибка? или чем вызван второй вызов OnOrderChanged?
я просто в тупик встал, без правильного PositionManager.Position бесмысленно и стратегию писать, и вообще работать с библиотекой