Как добится корректного отображения 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);
            }
        }

Теги:


Спасибо:




3 Ответов
yammm

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


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


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

Sergey Masyura

Фотография
Автор статей
Дата: 07.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

Фотография
Автор статей Программист Трейдер
Дата: 07.02.2013
Ответить


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


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


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

loading
clippy