Стратегия не учитывает сделки по стоп ордерам
Atom Ответить
16.03.2012


Создаю простую стратегию на базе Strategy. В ней по окончанию свечи входим в позицию и ставим трейлинг стоп. Что получаем по факту?

Заявка и сделка для лимитного ордера нормально проходит и в стратегии отображается.
Заявка и сделка для стоп ордера проходит криво и в стратегии НЕ отображается.

В итоге PositionManager не учитывает изменение позиции по стопу, и она постепенно растет. Хотя по факту она нулевая. PositionManager.Position > 0.

Похоже сделки для стоп ордеров не учитываются совсем. Странно что раньше не было обнаружено.

Пожелание - исправить ситуацию :)

ЗЫ: в коннекторе нет проблем. Все события приходят нормально.

Теги:


Спасибо:




9 Ответов
Alexander

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


Ну собственно такого точно нет, потому и не было замечено раньше :)
Вы что-то не так делаете.

Что такое "проходит криво"?

Давайте лог, пишите конкретно как подаётся заявка, приводите код.
Спасибо:

ra81

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


Alexander Mukhanchikov Перейти
Ну собственно такого точно нет, потому и не было замечено раньше :)
Вы что-то не так делаете.

Что такое "проходит криво"?

Давайте лог, пишите конкретно как подаётся заявка, приводите код.


Это при старте стратегии.
Код

protected override void OnStarting()
{
    base.OnStarting();

    _candleManager =  _candleManager ?? new CandleManager(Trader);
    _candleToken = _candleToken  ?? _candleManager.RegisterTimeFrameCandles(Security,     (TimeSpan)AlfaTimeFrames.Minute1);

            this
                .When(_candleToken.CandlesFinished())
                .Do(TryMakeTrade).Once();
}


Сначала идет сделка на покупу потом на продажу в TryMakeTrade.
Код
var order = new Order()
                            {
                                Direction = OrderDirections.Buy,
                                Type = OrderTypes.Market,
                                Volume = this.Security.MinLotSize,
                                Security = this.Security,
                                Portfolio = this.Portfolio,
                            };
            RegisterOrder(order);

            this
                .When(order.Matched())
                .Do(SetStop).Once();
            // Сделка висит пока не закроется по стоплоссу.


А вот метод SetStop
Код
        private void SetStop(Order order)
        {
            var averPrice = order.GetAlfaAveragePrice();
            var stopPersent = 0.01;
            var trailLevel = (double)averPrice * stopPersent;

            var stop = new Order()
                           {
                               Type = OrderTypes.Conditional,
                               Direction = OrderDirections.Sell,
                               Portfolio = this.Portfolio,
                               Security = this.Security,
                               Volume = this.Security.MinLotSize,
                               StopCondition = new AlfaStopCondition()
                                                   {
                                                       Slippage = 1,
                                                       StopPrice = (double)averPrice + 0.5,
                                                       TrailingLevel = trailLevel,
                                                   },
                           };

            RegisterOrder(stop);
        }


После подобной манипуляции должна быть общая позиция равна нулю, потому что стоп заявка сразу же исполняется (специально так сформирована). А по факту позиция равна 1 лоту. Если повторить операцию позиция увеличится еще на лот и так далее. Продажи по стопу не учитываются никак.

Кажется что сделки для стоп ордеров просто не считаются и все. Их тупо нет в стратегии. А для простых ордеров все считается.

Вот лог стратегии
Код

SS     | 16.03.2012 12:46:19.047 |       | Стратегия запущена.
SS     | 16.03.2012 12:46:59.781 |       | Свеча завершена, начинаем проверку условий.
SS     | 16.03.2012 12:46:59.781 |       | Проверка завершена, можно входить в позицию.
SS     | 16.03.2012 12:46:59.781 |       | Формируем ордер. Направление: Buy Тип: Market Объем: 10 Инструмент: SBER3
SS     | 16.03.2012 12:47:02.781 |       | Новая позиция 10.
SS     | 16.03.2012 12:47:08.859 |       | Заявка исполнена, формируем стоп. Направление: Sell Тип: Conditional Объем: 10 Инструмент: SBER3
SS     | 16.03.2012 12:47:08.859 |       | Новая Buy сделка 134193310 по цене 100,74 на 10 заявки 212770782.


А вот что пишет студия. Событие продажи как видим приходит.
Код

15:46:53 - New Order. Цена: 101,74 Направление: Buy Тип ордера: Limit
15:46:59 - Order Changed. Цена: 101,74 Направление: Buy Тип ордера: Limit
15:46:59 - Order Changed. Цена: 101,74 Направление: Buy Тип ордера: Limit
15:46:59 - New My Trade. Цена: 100,74 Направление: Buy Тип ордера: Limit
15:47:2 - New Order. Цена: 100,28 Направление: Sell Тип ордера: Conditional
15:47:2 - Order Changed. Цена: 100,28 Направление: Sell Тип ордера: Conditional
15:47:14 - Order Changed. Цена: 100,28 Направление: Sell Тип ордера: Conditional
15:47:20 - Order Changed. Цена: 100,28 Направление: Sell Тип ордера: Conditional
15:47:23 - New My Trade. Цена: 100,71 Направление: Sell Тип ордера: Conditional
15:47:24 - Order Changed. Цена: 100,28 Направление: Sell Тип ордера: Conditional
SimpleStrategy.cs 6,1KB (0)
Автор топика
Спасибо: Sergey Masyura

Alexander

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


Это альфа коннектор, переношу в соответствующую ветку.

В других коннекторах всё в порядке.
Спасибо:

ra81

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


Alexander Mukhanchikov Перейти
Это альфа коннектор, переношу в соответствующую ветку.

В других коннекторах всё в порядке.


Прикрепил выше постом всю стратегию. Можно сразу заводить и смотреть. Один раз по завершению свечи совершит установку ордера на покупку и стоп на продажу. После этого можно посмотреть позицию. Врядли это связано с коннектором :).
Автор топика
Спасибо:

Alexander

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


через Quik \ Plaza какую позицию выводит?
Привидите лог.

И версия S# из последних?
Спасибо:

ra81

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


Alexander Mukhanchikov Перейти
через Quik \ Plaza какую позицию выводит?
Привидите лог.

И версия S# из последних?

Я бы с удовольствием привел позицию с других терминалов, но на текущий момент у меня терминал только один.

Коннектор генерирует события НОРМАЛЬНО. События приходят.

Если вы однозначно утверждаете что у вас стоп заявки при исполнении корректно учитывются и позиция формируется верная, тогда я буду много думать в чем же дело.

Версия S# 4.0.20 релиз.
Автор топика
Спасибо:

Mikhail Sukhov

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


ra81 Перейти
тогда я буду много думать в чем же дело.


Order.DerivedOrder заполняется?
Спасибо:

Alexander

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


Посмотрел оба альфа коннектора.
Ни там ни там не заполняется DerivedOrder и не добавляется ассоциация через метод AddDerivedOrder.

Т.е. и там и там либо не идёт работа со стоп ордерами, либо идёт неверная работа с ними.

Как и сказал сразу - проблема шлюза, а не базовых вещей S#.


Update: Михаил выше тоже про это задал вопрос
Спасибо:

ra81

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


Ок. Поставил себе заметку про DerivedOrder.
Стопы в коннекторах работают нормально. Но вот это поле не используется. Буду доделывать.
Автор топика
Спасибо:


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

loading
clippy