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


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


Code

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

        }


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

Tags:


Thanks:


1 2 3  >
Иван З.

Avatar
Date: 5/13/2013
Reply


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

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

Shaly

Avatar
Date: 5/13/2013
Reply


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

Иван З.

Avatar
Date: 5/13/2013
Reply


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

VassilSanych

Avatar
Date: 5/13/2013
Reply


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

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

Shaly

Avatar
Date: 5/14/2013
Reply


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

VassilSanych

Avatar
Date: 5/14/2013
Reply


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

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

Shaly

Avatar
Date: 5/16/2013
Reply


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

Иван З.

Avatar
Date: 5/16/2013
Reply


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

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

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

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

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

VassilSanych

Avatar
Date: 5/16/2013
Reply


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

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

Thanks:

VassilSanych

Avatar
Date: 5/16/2013
Reply


Иван З. Go to

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

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

Thanks:
1 2 3  >

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

loading
clippy