← Atrás

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

¿Le resultó útil este tema?

Compartir tema

Comentarios (1)

Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario

Mikhail Sukhov
Mikhail Sukhov

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

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

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