← Voltar

Не работает котирование

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

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

Лог: :::spoiler

15:19:43.203 | | QuikTrader | Экспорт запущен. 15:19:42.921 | | QuikTrader | New order: TransactionId=49849438, Id=1091158826, Price=1601,55, Balance=50, Security=UXZ1@UX, State=Done 15:19:43.484 | | QuikTrader | New order: TransactionId=0, Id=1091159261, Price=1600,3, Balance=48, Security=UXZ1@UX, State=Done 15:19:43.546 | | QuikTrader | New order: TransactionId=0, Id=1091577287, Price=1768,7, Balance=0, Security=UXZ1@UX, State=Done 15:19:50.421 | | TS | Стратегия запущена. 15:24:22.640 | | TS | Пробой канала DOWN 15:24:22.859 | | MQS | Стратегия запущена. 15:24:23.109 | | MQS | Регистрация новой заявки на Sell с ценой 1583,00 и объемом 15. 15:24:23.140 | | QuikTrader | RegisterOrder: TransactionId=55179001, Id=0, Price=1583,00, Balance=15, Security=UXZ1@UX, State=None 15:24:23.171 | | MQS | Заявка 55179001 на Sell отправлена с ценой 1583,00 объемом 15. 15:24:23.906 | Warning | MQS | Заявка 55179001 не имеет состояния. 15:24:24.031 | | QuikTrader | New order: TransactionId=55179001, Id=1091971814, Price=1583,00, Balance=15, Security=UXZ1@UX, State=Active 15:24:32.906 | | MQS | Цена текущей 1583,00 и лучшей 1582,20. 15:24:32.906 | | MQS | Лучший бид 1581,05 и лучший аск 1582,2. 15:24:32.921 | | MQS | Котирование заявки 55179001 на Sell с ценой 1583,00 объемом 15. 15:24:32.937 | | MQS | Перекотирование зарегистрировано для заявки 55179002 на Sell с ценой 1582,20 объемом 15. 15:24:33.625 | Warning | MQS | Заявка 55179002 не имеет состояния. 15:24:33.625 | | QuikTrader | New order: TransactionId=0, Id=1091972970, Price=1582,2, Balance=15, Security=UXZ1@UX, State=Active 15:24:33.906 | Warning | MQS | Заявка 55179002 не имеет состояния. 15:24:34.906 | Warning | MQS | Заявка 55179002 не имеет состояния. 15:24:35.906 | Warning | MQS | Заявка 55179002 не имеет состояния. 15:24:36.906 | Warning | MQS | Заявка 55179002 не имеет состояния. 15:24:37.906 | Warning | MQS | Заявка 55179002 не имеет состояния. 15:24:38.906 | Warning | MQS | Заявка 55179002 не имеет состояния. 15:24:39.906 | Warning | MQS | Заявка 55179002 не имеет состояния. 15:24:40.906 | Warning | MQS | Заявка 55179002 не имеет состояния. 15:24:41.906 | Warning | MQS | Заявка 55179002 не имеет состояния. 15:24:42.906 | Warning | MQS | Заявка 55179002 не имеет состояния. 15:24:43.906 | Warning | MQS | Заявка 55179002 не имеет состояния. 15:24:44.906 | Warning | MQS | Заявка 55179002 не имеет состояния. 15:24:45.906 | Warning | MQS | Заявка 55179002 не имеет состояния. 15:24:46.906 | Warning | MQS | Заявка 55179002 не имеет состояния. 15:24:47.906 | Warning | MQS | Заявка 55179002 не имеет состояния. 15:24:48.906 | Warning | MQS | Заявка 55179002 не имеет состояния. ... до бесконечности

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


            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. При тестировании данной стратегии на истории котирование работает.

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

Este tópico foi útil?

Compartilhar tópico

Comentários (20)

Entrar ou Criar conta, Faça login ou cadastre-se para deixar um comentário

Alexander
Alexander

А зачем в котирование передавать пустые Unit?

new Unit(), new Unit()

pehas
pehas Autor

А зачем в котирование передавать пустые Unit?

new Unit(), new Unit()

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


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

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

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

Alexander
Alexander

А зачем в котирование передавать пустые 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
pehas Autor

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

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

Mikhail Sukhov
Mikhail Sukhov

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

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

Alexander
Alexander

Mikhail Sukhov:

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

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

Тут такая же проблема

Mikhail Sukhov
Mikhail Sukhov

Alexander Mukhanchikov: Тут такая же проблема

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

pehas
pehas Autor

Mikhail Sukhov:

Alexander Mukhanchikov: Тут такая же проблема

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

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

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

Alexander
Alexander

pehas:

Mikhail Sukhov:

Alexander Mukhanchikov: Тут такая же проблема

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

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

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

Эм, вообще-то

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

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

Mikhail Sukhov
Mikhail Sukhov

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

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

Alexander
Alexander

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

Alexander
Alexander

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

Помогло?

pehas
pehas Autor

Alexander Mukhanchikov:

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

Помогло?

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

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

Вот что выдается в логе: В чем может быть проблема?

Alexander
Alexander

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

}

> 
> Вот что выдается в логе:
> ![](http://s50.radikal.ru/i130/1111/74/445680e4964d.png)
> В чем может быть проблема?


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

[Вот тут](http://stocksharp.com/forum/2107/Oshibka--kotirovaniie-porozhdaiet-nieskol-ko-vypolniennykh-zaiavok/) похожая проблема, почитайте тему.
И да, попробуйте 4.0.6 с codeplex
Alexander
Alexander

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

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

pehas
pehas Autor

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
Alexander

На 4.0.7 работает

pehas
pehas Autor

Alexander Mukhanchikov: На 4.0.7 работает

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