PositionManager.Position & StrategyPositionManager.OnOrderChanged


PositionManager.Position & StrategyPositionManager.OnOrderChanged
Atom
4/10/2011


Ввиду с проблемой неправильного подсчета PositionManager.Position описанной здесь

решил написать простую рабочую реализацию PositionManager для проведения тестов, по примеру который предложил Михаил по ссылке выше

Итак простая реализация, как мне кажется правильного алгоритма
Code
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 бесмысленно и стратегию писать, и вообще работать с библиотекой

Tags:


Thanks:


Mikhail Sukhov

Avatar
Date: 4/11/2011
Reply


bleed Go to
Ошибка? или чем вызван второй вызов OnOrderChanged?


На это вообще закладываться нельзя. ТС шлет сообщения об изменении исходя из своей внутренней логики. Делайте словарь с проверкой.

Насчет баги. На этой неделе постараюсь выложить новую версию с фиксами.
Thanks:


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy