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

Как убрать выставление лишних заявок?
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


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

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

Shaly

Avatar
Date: 5/14/2013
Reply


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

VassilSanych

Avatar
Date: 5/14/2013
Reply


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

Это уже ваше решение.
Я всё-таки выставляю в спред.
Много есть разных способов решения проблемы:
- как я писал, можно изменить стратегию (очевидно же, что если она приводит к пиле, то это ошибка)
- можно после выставления заявки ожидать её исполнения и только потом уже учитывать сигналы
- а можно просто игнорировать такое поведение и просто следить, чтоб эффект был временным, а не влиял на последующие сделки.
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
Сможет ли вывод своей таблицы из квика решить эту проблему? То есть, насколько быстро можно получать данные о текущей позиции, что бы затем использовать их при работе с заявками.

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

Thanks:

VassilSanych

Avatar
Date: 5/16/2013
Reply


Иван З.

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

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

Thanks:
1 2 3  >

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

loading
clippy