PositionManager.Position & StrategyPositionManager.OnOrderChanged

PositionManager.Position & StrategyPositionManager.OnOrderChanged
Atom
10.04.2011
bleed


Ввиду с проблемой неправильного подсчета 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 бесмысленно и стратегию писать, и вообще работать с библиотекой

Теги:


Спасибо:


Mikhail Sukhov

Фотография
Дата: 11.04.2011
Ответить


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


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

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


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy