Как убрать выставление лишних заявок?
Atom
13.05.2013


Код

 private void ProcessCandle(Candle candle)
        {
            lock(_mainlock)
             {
            var timeFrame = (TimeSpan)candle.Arg;
            var time = timeFrame.GetCandleBounds(Security).Min - timeFrame;
            _band.Process(new CandleIndicatorValue(candle) { IsFinal = true });
            this.AddInfoLog("Новая свечка {0}, {1}, {2}, {3}, {4}", candle.HighPrice, candle.CloseTime, _band.LastValue, _band.PrevIndValue, _band.InitDirection);


            if (candle.OpenTime >= time && _band.IsFormed )
            
            {

                if (_band.Direction == -1 && _band.LastValue < _band.PrevIndValue && Position >= 0 && _band.LevelHigh2 != 0)
                {
                    //отменяем все ордера  и выставляем новую заявку
                    CancelActiveOrders();
                    var order = this.CreateOrder(OrderDirections.Sell, Security.BestAsk.Price - 1m, this.Position + Volume);
                    RegisterOrder(order);
                }
                
                else
                    
                    if (_band.Direction == 1 && _band.LastValue > _band.PrevIndValue && Position <= 0 && _band.LevelLow2 != 0)
                    {
                        //отменяем все ордера  и выставляем новую заявку
                        CancelActiveOrders();
                        var order = this.CreateOrder(OrderDirections.Buy, Security.BestBid.Price + 1m, this.Position * -1m + Volume);
                        RegisterOrder(order);
                    }

                    else
                        if (_band.InitDirection == 2 && Position > 0)
                        {
                            //отменяем все ордера  и выставляем новую заявку
                            CancelActiveOrders();
                            var order = this.CreateOrder(OrderDirections.Sell, Security.BestAsk.Price, this.Position);
                            RegisterOrder(order);
                        }
                        else
                            if (_band.InitDirection == -2 && Position < 0)
                            {
                                //отменяем все ордера  и выставляем новую заявку
                                CancelActiveOrders();
                                var order = this.CreateOrder(OrderDirections.Buy, Security.BestBid.Price, this.Position * -1m);
                                RegisterOrder(order);
                            }
            }
            }

        }


Это код, который выставляет заявки. Но в моменты высокой активности он начинает ставить "лишнее". Есть способы устранения?

Теги:


Спасибо:



Именинники: o.cheban82, NLRR

1 2 3  >
Иван З.

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


Если это стратегия на линиях болинджера, и с очень маленьким тайм фреймом то попробуйте увеличить таймфрейм. Не очень понятно, что вы имеете в виду под
Цитата:
Но в моменты высокой активности он начинает ставить "лишнее".

Сложно сказать, что у вас происходит. По подробней бы, желательно с рисунками.
Спасибо:

Shaly

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


Стратегия пробойная, да, и таймфрейм маленький. В добавок к этому она разворотная. Получается во время активных торгов она первой сделкой закрывает позицию с разворотом, а затем при дальнейшем движении (формировании новых экстремумов), начинает выставлять заявки с двойным объемом, при этом в журнале новая позиция не отражается. Lock не помог. На демо торгах такой проблемы не наблюдалось.
Спасибо:

Иван З.

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


Скорее всего ваш робот совершает действия быстрее чем регистрируются заявки на бирже. По этому позиция в журнале не отображается, робот о ней не знает и делает еще заявки. Об этом очень много говорилось на этом форуме, и к сожалению ни кто не пришел к простому способу защиты робота от такой проблемы. Придется нагородить массу проверок, но в итоге он перестанет выставлять заявки в нужный момент. Увеличивайте скорость обмена с биржей, либо увеличивайте таймфрейм. Если найдете другой способ прошу поделиться очень интересно!
Спасибо:

VassilSanych

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


Иван З. Перейти
Скорее всего ваш робот совершает действия быстрее чем регистрируются заявки на бирже

Врядли. Более вероятно, что выставляя заявки на границах спреда, он получает рассогласование между проверками и реальной позицией после активации этих заявок.
Вообще-то это больше похоже на "пилу" и в любом случае является минусом стратегии.
Нужно как-то ограничить активность стратегии в противоположных направлениях и добавить проверки и исправления текущей ситуации, если надо.
PS
Кстати в данном случае вполне ожидаемы ошибки снятия заявок. Может стоит реагировать и на них в том числе.
Спасибо:

Shaly

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


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

VassilSanych

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


Shaly Перейти
Да, на снятие заявок очень много ошибок. Так что не выставлять в спреде, а исполнять по рынку?

Это уже ваше решение.
Я всё-таки выставляю в спред.
Много есть разных способов решения проблемы:
- как я писал, можно изменить стратегию (очевидно же, что если она приводит к пиле, то это ошибка)
- можно после выставления заявки ожидать её исполнения и только потом уже учитывать сигналы
- а можно просто игнорировать такое поведение и просто следить, чтоб эффект был временным, а не влиял на последующие сделки.
Спасибо:

Shaly

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


Сможет ли вывод своей таблицы из квика решить эту проблему? То есть, насколько быстро можно получать данные о текущей позиции, что бы затем использовать их при работе с заявками.
Спасибо:

Иван З.

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


Выставление заявки в спреде требует обязательной проверки ее исполнения. Исполнение по рынку избавит вас от проскальзывания и ошибок исполнения станет значительно меньше, снимать заявки не придется, но проблему скорости не снимет, и это в корне изменит стратегию не в лучшую сторон.
Вывод своей таблицы из квика ни чего не даст. Проблема в скорости обмена от квика до биржи.

VassilSanych
Цитата:
Я всё-таки выставляю в спред.

Как я понимаю используемый таймфрейм не чувствителен к скорости обмена данными.

Про скорость можно посмотреть здесь
http://www.stocksharp.com/doc/

на сайте vimeo.com/stocksharp можно посмотреть видео с тестированием скорости
Спасибо:

VassilSanych

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


Shaly Перейти
Сможет ли вывод своей таблицы из квика решить эту проблему? То есть, насколько быстро можно получать данные о текущей позиции, что бы затем использовать их при работе с заявками.

Все таблицы Квика сильно запаздывают относительно таблицы всех сделок

Спасибо:

VassilSanych

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


Иван З. Перейти

Как я понимаю используемый таймфрейм не чувствителен к скорости обмена данными.

Таймфрейм влияет на количество сигналов и вероятность возникновения ситуации с неправильной позицией.
Подозреваю, что в стретегии автора, кроме обработки окончания свечи, есть и другие правила. Иначе поведение с "большим движением" маловероятно даже на RI.

Спасибо:
1 2 3  >

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

loading
clippy