Как добится корректного отображения Strategy.Position?


Как добится корректного отображения Strategy.Position?
Atom
07.02.2013


Не совсем понимаю как дождаться корректного отображения Strategy.Position, простая проверка не работает, иногда проскакивают лишние ордера.

Код
 private void ProccesDepth(bool isDirectionBuy)
        {
            lock (_sync)
            {
                var order = new Order
                                {
                                    Direction = isDirectionBuy ? OrderDirections.Buy : OrderDirections.Sell,
                                    Price = isDirectionBuy ? _depth.BestBid.Price : _depth.BestAsk.Price,
                                    Type = OrderTypes.Limit,
                                    Volume = VolumeValue,
                                    Comment = "Entry",
                                };

                order
                    .WhenActivated()
                    .Do(() =>
                            {
                                if(!checkCondition)
                                {
                                    CancelOrder(order);
                                }
                            })
                    .Once()
                    .Apply(this);
                

                order
                    .WhenNewTrades()
                    .Do(SetProtectedOrders)
                    .Apply(this);

                // Узкое место
                if (checkCondition && Position == 0)
                    RegisterOrder(order);
            }
        }

Теги:


Спасибо:


yammm

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


Код
 // Узкое место
                if (checkCondition && !_inPosition)
                {
                    RegisterOrder(order);
                    _inPosition = true;
                }


Удалось решить глобальным булом который обнуляется при срабатывании тейка или стопа, но если есть какой-то более лаконичный вариант, буду признателен если поделитесь.
Спасибо:

Sergey Masyura

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


yammm Перейти
Не совсем понимаю как дождаться корректного отображения Strategy.Position, простая проверка не работает, иногда проскакивают лишние ордера.

Код
 private void ProccesDepth(bool isDirectionBuy)
        {
            lock (_sync)
            {
                var order = new Order
                                {
                                    Direction = isDirectionBuy ? OrderDirections.Buy : OrderDirections.Sell,
                                    Price = isDirectionBuy ? _depth.BestBid.Price : _depth.BestAsk.Price,
                                    Type = OrderTypes.Limit,
                                    Volume = VolumeValue,
                                    Comment = "Entry",
                                };

                order
                    .WhenActivated()
                    .Do(() =>
                            {
                                if(!checkCondition)
                                {
                                    CancelOrder(order);
                                }
                            })
                    .Once()
                    .Apply(this);
                

                order
                    .WhenNewTrades()
                    .Do(SetProtectedOrders)
                    .Apply(this);

                // Узкое место
                if (checkCondition && Position == 0)
                    RegisterOrder(order);
            }
        }


Если ордер зарегистрирован, но еще не исолнился - очевидно позиция ноль. Соответсвенно, если зайти в этот метод с выставленным, но еще не исполненным ордером - выставится второй.

Если входите одним ордером, сделайте его членом класса _order. При входе в метод можно проверять его на null и остаток и только после этого перетирать.
Спасибо: yammm

Mikhail Sukhov

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


Sergey Masyura Перейти
Если входите одним ордером, сделайте его членом класса _order. При входе в метод можно проверять его на null и остаток и только после этого перетирать.


Лучше вообще состояния не использовать. Или минимизировать эти места. Event based подход предполагает state less.
Спасибо: yammm


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

loading
clippy