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

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


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

Code
 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);
            }
        }

Tags:


Thanks:


yammm

Avatar
Date: 2/7/2013
Reply


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


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

Sergey Masyura

Avatar
Date: 2/8/2013
Reply


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

Code
 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 и остаток и только после этого перетирать.
Thanks: yammm

Mikhail Sukhov

Avatar
Date: 2/8/2013
Reply


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


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


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

loading
clippy