Не работает котирование
Atom Ответить
14.11.2011


Приветствую! Есть проблема с котированием

Стратегия котирования выставляет заявку в квик. Перекотирует ее один раз, а дальше не может отследить состояние вновь выставленной заявки. Пишет "Заявка ХХХХХХХХХ не имеет состояния"

Лог:


Код запуска котирования
Код

            var MarketPrice = this.Security.GetMarketPrice(Direction);
            var order = this.CreateOrder(Direction, MarketPrice, 15);

            // Регистрация заявки через котирование
            var quotingStrategy = new MarketQuotingStrategy(order, new Unit(), new Unit());
            this.ChildStrategies.Add(quotingStrategy);


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

Версия S# - 4.0.5. При тестировании данной стратегии на истории котирование работает.

В чем может быть проблема?

Теги:


Спасибо:




20 Ответов
Alexander

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


А зачем в котирование передавать пустые Unit?
Цитата:
new Unit(), new Unit()
Спасибо:

pehas

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


Alexander Mukhanchikov Перейти
А зачем в котирование передавать пустые Unit?
Цитата:
new Unit(), new Unit()


Взял из примера SimpleSMA..
Код

// регистрируем заявку (через котирование)
var strategy = new MarketQuotingStrategy(order, new Unit(), new Unit());
base.ChildStrategies.Add(strategy);


Да в принципе, такая же проблема и с действием ClosePosition() для правила. Оно тоже пытается закрыть позицию котированием. И получаются те же сообщения. Одна перекотировка, а далее только сообщения о том, что заявка не имеет состояния.
На истории все работает.

Может проблема в неправильной синхронизации шлюза ITrader с биржей? Возможно по какой-то из таблиц отваливается экспорт DDE или еще что?
Что вообще значит "Заявка не имеет состояния" ?
Автор топика
Спасибо:

Alexander

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


pehas Перейти
Alexander Mukhanchikov Перейти
А зачем в котирование передавать пустые Unit?
Цитата:
new Unit(), new Unit()


Взял из примера SimpleSMA..
Код

// регистрируем заявку (через котирование)
var strategy = new MarketQuotingStrategy(order, new Unit(), new Unit());
base.ChildStrategies.Add(strategy);


Да в принципе, такая же проблема и с действием ClosePosition() для правила. Оно тоже пытается закрыть позицию котированием. И получаются те же сообщения. Одна перекотировка, а далее только сообщения о том, что заявка не имеет состояния.
На истории все работает.

Может проблема в неправильной синхронизации шлюза ITrader с биржей? Возможно по какой-то из таблиц отваливается экспорт DDE или еще что?
Что вообще значит "Заявка не имеет состояния" ?



Значит заявка не переходит в состояние Active.
А Verifier ошибок не выдаёт?
Спасибо:

pehas

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


Alexander Mukhanchikov Перейти

Значит заявка не переходит в состояние Active.
А Verifier ошибок не выдаёт?


Verifier пишет зеленым "Все настроено правильно". Лимитированные заявки отрабатывают. А вот с котированием такая проблема..
Автор топика
Спасибо:

esper

Фотография
Программист
Дата: 15.11.2011
Ответить


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

Mikhail Sukhov

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


pehas Перейти

Verifier пишет зеленым "Все настроено правильно". Лимитированные заявки отрабатывают. А вот с котированием такая проблема..


А что это за заявка такая в логе с номером транзакции 0?
Спасибо:

Alexander

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


Mikhail Sukhov Перейти
pehas Перейти

Verifier пишет зеленым "Все настроено правильно". Лимитированные заявки отрабатывают. А вот с котированием такая проблема..


А что это за заявка такая в логе с номером транзакции 0?



Тут такая же проблема
Спасибо:

Mikhail Sukhov

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


esper Перейти
Сейчас сделал небольшую программу, которая просто выполняет котирование, запустил примерно 20 раз - такой ситуации ни разу не возникло.


А у тебя MOVE был заявки или снятие + регистрация новой? Судя по логу, там заявка была именно "подвинута".
Спасибо:

Mikhail Sukhov

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




Не, там наверняка какая-то бага в настройках. А тут 0 судя по всему от MOVE. Что-то вспоминаю насчет этого, и воспоминания говорят о том, что Квик для таких заявок возвращает нулевой номер транзакции.
Спасибо:

pehas

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


Mikhail Sukhov Перейти


Не, там наверняка какая-то бага в настройках. А тут 0 судя по всему от MOVE. Что-то вспоминаю насчет этого, и воспоминания говорят о том, что Квик для таких заявок возвращает нулевой номер транзакции.


Доктор, скажите, есть ли от этого лекарство? Huh И что такое MOVE заявка?

Сегодня в торговой сессии не успел потестировать получше. Попробую еще на акциях завтра погонять. Может это фьючерс глючит так. Прикол украинской биржи. Например, у нас не работает метод Strategy.ClosePosition(), так как на UX на фьючерсе нельзя выставить заявку с нулевой ценой. Приходится пользовать самописный метод для закрытия позиции. Или закрываться через котирование действием ClosePosition, что опять таки не работает из за той ошибки.. Sad
Автор топика
Спасибо:

Alexander

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


pehas Перейти
Mikhail Sukhov Перейти


Не, там наверняка какая-то бага в настройках. А тут 0 судя по всему от MOVE. Что-то вспоминаю насчет этого, и воспоминания говорят о том, что Квик для таких заявок возвращает нулевой номер транзакции.


Доктор, скажите, есть ли от этого лекарство? Huh И что такое MOVE заявка?

Сегодня в торговой сессии не успел потестировать получше. Попробую еще на акциях завтра погонять. Может это фьючерс глючит так. Прикол украинской биржи. Например, у нас не работает метод Strategy.ClosePosition(), так как на UX на фьючерсе нельзя выставить заявку с нулевой ценой. Приходится пользовать самописный метод для закрытия позиции. Или закрываться через котирование действием ClosePosition, что опять таки не работает из за той ошибки.. Sad


Эм, вообще-то
1) Move на акциях нет
2) ClosePosition не работает на срочном рынке, т.к. срочный рынок не поддерживает market заявок
Спасибо:

Alexander

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


Попробуйте для Exchange.Ux выставить IsSupportAtomicReRegister в false
Спасибо:

Alexander

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


Alexander Mukhanchikov Перейти
Попробуйте для Exchange.Ux выставить IsSupportAtomicReRegister в false


Помогло?
Спасибо:

russ

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


Также есть проблемы с котированием.
Версия 4.0.5
Тестирую через _trader = new EmulationTrader
Проблема такая, отправляю заявку на котирование 1 раз, а сделок получается две.
Немного кода стратегии:
Код

public class VolumeStrategy : Strategy
{
        private Order activeQuotingOrder = null;
        ......

        protected override void OnStarting()
        {
            this
                .When(base.Security.SecurityNewTrades())
                .Do(CalcVolume);

            base.OnStarting();
        }

        private void CalcVolume()
        {
            
            Trade tr = base.Security.LastTrade;

           
            if (tr.Volume > 10)
            {
                decimal currPos = this.PositionManager.Position;
                if (currPos > 0)
                    return;

                //проверяем есть ли сейчас заявка на котирование
                if (activeQuotingOrder == null)
                {

                    var direction = OrderDirections.Buy;

                    // создаем заявку
                    var order = this.CreateOrder(direction, base.Security.GetMarketPrice(direction), base.Volume);


                    // регистрируем заявку (через котирование)
                    var strategy = new MarketQuotingStrategy(order, new Unit(), new Unit());
                    base.ChildStrategies.Add(strategy);
                    
                    //ЗАПОМИНАЕМ В ПЕРЕМЕННУЮ ТЕКУЩУЮ ЗАЯВКУ, КОТОРУЮ ОТПРАВИЛИ НА КОТИРОВАНИЕ
                    activeQuotingOrder = order;
                }                
            }
        }
}


Вот что выдается в логе:

В чем может быть проблема?
Спасибо:

Alexander

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


russ Перейти
Также есть проблемы с котированием.
Версия 4.0.5
Тестирую через _trader = new EmulationTrader
Проблема такая, отправляю заявку на котирование 1 раз, а сделок получается две.
Немного кода стратегии:
Код

public class VolumeStrategy : Strategy
{
        private Order activeQuotingOrder = null;
        ......

        protected override void OnStarting()
        {
            this
                .When(base.Security.SecurityNewTrades())
                .Do(CalcVolume);

            base.OnStarting();
        }

        private void CalcVolume()
        {
            
            Trade tr = base.Security.LastTrade;

           
            if (tr.Volume > 10)
            {
                decimal currPos = this.PositionManager.Position;
                if (currPos > 0)
                    return;

                //проверяем есть ли сейчас заявка на котирование
                if (activeQuotingOrder == null)
                {

                    var direction = OrderDirections.Buy;

                    // создаем заявку
                    var order = this.CreateOrder(direction, base.Security.GetMarketPrice(direction), base.Volume);


                    // регистрируем заявку (через котирование)
                    var strategy = new MarketQuotingStrategy(order, new Unit(), new Unit());
                    base.ChildStrategies.Add(strategy);
                    
                    //ЗАПОМИНАЕМ В ПЕРЕМЕННУЮ ТЕКУЩУЮ ЗАЯВКУ, КОТОРУЮ ОТПРАВИЛИ НА КОТИРОВАНИЕ
                    activeQuotingOrder = order;
                }                
            }
        }
}


Вот что выдается в логе:

В чем может быть проблема?



Приведите полный лог.
Я так понимаю к Квику отношения никакого? Тогда почему сообщение здесь? :)

Вот тут похожая проблема, почитайте тему.
И да, попробуйте 4.0.6 с codeplex
Спасибо:

pehas

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


Alexander Mukhanchikov Перейти
Alexander Mukhanchikov Перейти
Попробуйте для Exchange.Ux выставить IsSupportAtomicReRegister в false


Помогло?


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

Alexander

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


Удалось за 2 недели протестировать предложенное решение?

Или, раз нет ответа, проблема решена?
Спасибо:

pehas

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


Alexander Mukhanchikov Перейти
Удалось за 2 недели протестировать предложенное решение?

Или, раз нет ответа, проблема решена?


Хмм.. Письма на мыло о новом сообщении на форуме приходят с ооочень большой задержкой. Несколько дней. Иногда и больше недели.. Извиняйте, что пропал.

Я с тех пор уже переписал робота на работу через обычную регистрацию заявок. Убрал котирование полностью по всему коду.
Обновился до версии 4.0.6. И обновил квик до 5.24.0.58
Сегодня в качестве теста попробовал подключить котирование вместо обычной регистрации ордера. Стратегия котирования запускается, но никаких заявок в квик не выставляет вообще.
Запускал так
Код

            var quotingStrategy = new MarketQuotingStrategy(Direction, Volume);
            base.ChildStrategies.Add(quotingStrategy);

И так
Код

            var quotingStrategy = new MarketQuotingStrategy(order, new Unit(), new Unit());
            base.ChildStrategies.Add(quotingStrategy);

Результат тот же. Последний лог: MQS: Стратегия запущена и больше никаких сигналов от стратегии, и никаких заявок ни в стокшарпе ни в квике.

Во втором случае использую new Unit(), new Unit() как в документации по котированию (раньше в эмуляции это работало).

З.Ы.
Кстати, в документации (по крайней мере версии 4.0.6) стратегия котирования определяется как
new MarketQuotingStrategy(order, new Unit())
Хотя такого конструктора в самой библиотеке нет. Нужны два юнита
Автор топика
Спасибо:

Alexander

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


На 4.0.7 работает
Спасибо:

pehas

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


Alexander Mukhanchikov Перейти
На 4.0.7 работает


Да, только сегодня утром заметил, что есть новая версия. Попробую
Автор топика
Спасибо:


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

loading
clippy