← Назад

Выставление заявок в Quik

Робот не выставляет заявки через Quik на спотовом рынке. На учебном счете все работает хорошо. Не эмуляция, а обычный game счет. Я убрал в квике все возможные запросы на выставление заявок (всплывающие окна подтверждения), но увы. Код клиента тоже указан правильно, и в квике он береться всегда по умолчанию. Денег тоже достаточно. Игровой счет работает, транзакции проходят, а реальный - нет. Что это может быть?

Комментарии (33)

Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий

Kefir
Kefir

Счет один в квике?

yar1k0v
yar1k0v Автор

нет, их несколько... спот, фьюч и демо

Kefir
Kefir

yar1k0v: нет, их несколько... спот, фьюч и демо

В логе что пишет? Попробуй вложенный файл, если не выставляет смотри что в логе?

yar1k0v
yar1k0v Автор

Спасибо, завтра проверю.

yar1k0v
yar1k0v Автор

2013/05/30 11:32:20.214|       |RS_CEEN@UX_100820|Стратегия запущена. [0,-1]. Позиция при старте 0.
2013/05/30 11:32:39.860|       |MQS_CEEN@UX_100820|Стратегия запущена. [0,1]. Позиция при старте 0.
2013/05/30 11:32:39.861|       |MQS_CEEN@UX_100820|Котирование на Sell объема 1.
2013/05/30 11:32:39.861|       |MQS_CEEN@UX_100820|Приостановка правил. _rulesSuspendCount 1.
2013/05/30 11:32:39.874|       |MQS_CEEN@UX_100820|Возобновление правил. _rulesSuspendCount 0.
2013/05/30 11:32:39.888|       |MQS_CEEN@UX_100820|Цена текущей NULL и лучшей 4,557.
2013/05/30 11:32:39.888|       |MQS_CEEN@UX_100820|Лучший бид 4,51 и лучший аск 4,558.
2013/05/30 11:32:39.896|       |MQS_CEEN@UX_100820|Регистрация новой Limit (0x1D8B182) заявки на Sell с ценой 4,557 и объемом 1. 
2013/05/30 11:32:39.925|Warning|MQS_CEEN@UX_100820|Заявка 41529553 в процессе регистрации.
2013/05/30 11:32:39.929|Error  |MQS_CEEN@UX_100820|Заявка 41529553 (0x1D8B182) не была принята по причине StockSharp.Quik.ApiException: Код ошибки Failed Сообщение  Указанный класс не найден: "UX".
2013/05/30 11:32:39.934|Error  |MQS_CEEN@UX_100820|Заявка 41529553 не принята биржей по причине 'Код ошибки Failed Сообщение  Указанный класс не найден: "UX"'.
2013/05/30 11:32:39.935|       |MQS_CEEN@UX_100820|Текущее кол-во ошибок 1. Максимальное 100.

Кто то знает, как это можно исправить? Спасибо.

Kefir
Kefir

yar1k0v: ...

Кто то знает, как это можно исправить? Спасибо. Таблица "Инструменты" правильно настроена?

yar1k0v
yar1k0v Автор

По умолчанию. Бумага, Код бумаги, Код класса, Статус, Лот, Шаг цены Еще почему то не работает Strategy.CancelActiveOrders, ну работает, только медленно... Не успевает все заявки снять.

yar1k0v
yar1k0v Автор

я не могу понять, почему код класса UX, если он должен быть GTS

esper
esper

yar1k0v: я не могу понять, почему код класса UX, если он должен быть GTS

На днях выйдет фикс этой ошибки.

yar1k0v
yar1k0v Автор

спасибо большое =) жду с нетерпением!

yar1k0v
yar1k0v Автор

Выложили 4.1.13.2 (фикс версии 4.1.13.1)

Баги:

•SciChart. Падает при рисовании на пустом графике.

•Plaza. Не принимается ExpiryDate.

Ошибка выставления заявок в Quik •FinamHistorySource. Поддержка Т+ инструментов.

Ошибка с кодом класса так и не была исправлена, по крайней мере на УБ.

esper
esper

yar1k0v: Ошибка с кодом класса так и не была исправлена, по крайней мере на УБ. Какие параметры у инструмента Type, ExchangeBoard?

yar1k0v
yar1k0v Автор

А, извеняюсь... все правильно. Пример CEEN GTS UX Stock. Но вот заявки почему то не проходят.

esper
esper

yar1k0v: А, извеняюсь... все правильно. Пример CEEN GTS UX Stock. Но вот заявки почему то не проходят. Что в Debug логах? Через события ошибки приходят?

yar1k0v
yar1k0v Автор

2013/06/06 12:54:56.345|       |MQS_CEEN@UX_100820|Регистрация новой Limit (0xBF2074) заявки на Buy с ценой 4,394 и объемом 1. 
2013/06/06 12:54:56.346|       |MQS_CEEN@UX_100820|Заявка 46442904 больше не активна.
2013/06/06 12:54:56.352|Error  |MQS_CEEN@UX_100820|Заявка 46442905 (0xBF2074) не была принята по причине StockSharp.Quik.ApiException: Код ошибки Failed Сообщение Не указан код клиента.
2013/06/06 12:54:56.353|Error  |MQS_CEEN@UX_100820|Заявка 46442905 не принята биржей по причине 'Код ошибки Failed Сообщение Не указан код клиента'.

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

Проверил настройки шаблона в квике, Verifier написал что все работает правильно, но ошибка выскакивает все та же.

yar1k0v
yar1k0v Автор

trader.FormatTransaction += transaction => transaction.SetClientCode("100820");
trader.FormatTransaction += transaction => transaction.SetVolume(100);

указав явно в транзакции код, как оказалось, пришлось указывать и обьем... все заработало, но теперь снимать эти заявки через trader.CancelOrders(фильтр) или еще как то - нельзя.

Выдает вот что:


2013/06/06 13:59:20.237|       |SSS_CEEN@UX_100820|Стратегия запущена. [0,-1]. Позиция при старте 0.
2013/06/06 13:59:20.282|       |MQS_CEEN@UX_100820|Стратегия запущена. [0,1]. Позиция при старте 0.
2013/06/06 13:59:20.283|       |MQS_CEEN@UX_100820|Котирование на Sell объема 1.
2013/06/06 13:59:20.284|       |MQS_CEEN@UX_100820|Приостановка правил. _rulesSuspendCount 1.
2013/06/06 13:59:20.302|       |MQS_CEEN@UX_100820|Возобновление правил. _rulesSuspendCount 0.
2013/06/06 13:59:20.317|       |MQS_CEEN@UX_100820|Цена текущей NULL и лучшей 4,403.
2013/06/06 13:59:20.317|       |MQS_CEEN@UX_100820|Лучший бид NULL и лучший аск NULL.
2013/06/06 13:59:20.324|       |MQS_CEEN@UX_100820|Регистрация новой Limit (0x374A867) заявки на Sell с ценой 4,403 и объемом 1. 
2013/06/06 13:59:20.461|Error  |MQS_CEEN@UX_100820|Заявка 50352676 (0x374A867) не была принята по причине System.Threading.LockRecursionException: В этом режиме не разрешены рекурсивные приобретения блокировки записи.
   в StockSharp.Quik.QuikTrader.RegisterTransaction(Transaction transaction)
   в StockSharp.Quik.QuikTrader.OnRegisterOrder(Order order)
   в StockSharp.Algo.BaseTrader.RegisterOrder(Order order).
2013/06/06 13:59:20.466|Error  |MQS_CEEN@UX_100820|Заявка 50352676 не принята биржей по причине 'В этом режиме не разрешены рекурсивные приобретения блокировки записи.'.
2013/06/06 13:59:20.467|       |MQS_CEEN@UX_100820|Текущее кол-во ошибок 1. Максимальное 100.
2013/06/06 13:59:20.467|       |MQS_CEEN@UX_100820|Цена текущей NULL и лучшей 4,403.
2013/06/06 13:59:20.467|       |MQS_CEEN@UX_100820|Лучший бид 4,38 и лучший аск 4,404.
2013/06/06 13:59:20.467|       |MQS_CEEN@UX_100820|Регистрация новой Limit (0x341345D) заявки на Sell с ценой 4,403 и объемом 1. 
2013/06/06 13:59:20.721|       |SSS_CEEN@UX_100820|Новая позиция: 100820-CEEN@UX=99.
2013/06/06 13:59:20.726|       |MQS_CEEN@UX_100820|Новая позиция: 100820-CEEN@UX=99.
2013/06/06 13:59:20.914|       |MQS_CEEN@UX_100820|Позиция изменилась на 99. Оставшийся объем -98.
2013/06/06 13:59:20.914|       |MQS_CEEN@UX_100820|Заканчиваем котирование.
2013/06/06 13:59:20.916|       |MQS_CEEN@UX_100820|Стратегия останавливается. [0,1]. Позиция при старте 99.
2013/06/06 13:59:20.920|       |MQS_CEEN@UX_100820|Правило 'Изменение стакана инструмента CEEN@UX (0x21AF1A5)'. Приостановлено.
2013/06/06 13:59:20.925|       |MQS_CEEN@UX_100820|Ожидание снятия всех активных заявок.
2013/06/06 13:59:20.931|       |MQS_CEEN@UX_100820|Отмена заявки 50352676.
2013/06/06 13:59:20.989|Error  |MQS_CEEN@UX_100820|System.InvalidOperationException: Транзакция 'CLASSCODE=GTS; SECCODE=CEEN; ORDER_KEY=0; ACTION=KILL_ORDER; TRANS_ID=50352678; CLIENT_CODE=100820; QUANTITY=100;' не была зарегистрирована. Причина 'Вы не можете снять данную заявку'.
   в StockSharp.Quik.QuikTrader.RegisterTransaction(Transaction transaction)
   в StockSharp.Quik.QuikTrader.OnCancelOrder(Order order)
   в StockSharp.Algo.BaseTrader.CancelOrder(Order order)
   в StockSharp.Algo.Strategies.Strategy.#=qxzPu2iHWuvn_zxvI9KER6E7zV7ZeSx0lx5gmJPCzrF8=(Order #=qmCVH59OmTnP6dM_iH$xuyQ==)
   в StockSharp.Algo.Strategies.Strategy.#=qfEdBj0Rc7NnXhD7vCfecDE$T$IQub7LkWbO$_STdqytwqbW4CaJq0mIRYZosAt7T(Order #=qSy7qlVSDDWQnWqFCXlcV0A==)
   в Ecng.Collections.CollectionHelper.ForEach[T](IEnumerable`1 source, Action`1 action)
   в StockSharp.Algo.Strategies.Strategy.#=q_SvJvUxJcrg5geypnfdBT$0TD_AmaMmMkIlPreredgI=()
   в StockSharp.Algo.Strategies.Strategy.#=q4Vjqp5booV7IQdXIgyGlo85pWPA8SEOTHD7k7HoqLVw=(ProcessStates #=qXPUjcWlGh9Cr6gtJEwp6Mg==)
   в StockSharp.Algo.Strategies.Strategy.Stop()
   в StockSharp.Algo.Strategies.QuotingStrategy.#=quJJ66$B0UoPkEWPFMUbYFUYA4yv4Mnws4aVcYx3xyKw=()
   в StockSharp.Algo.MarketRule`2.#=q7L98I26Wj9gUHVZVvYhjfNmvDWVbzzwXggGYrb6OKyQ=.#=qlYQnxf18dU6h8iYG0VgkAQ==(#=qvr5BgeY6d49b0wPGzxamhw== #=ql6p6agGBfPKLz1XmB5CubA==)
   в StockSharp.Algo.MarketRule`2.#=q$EDkGbMRa981JHTAbo$_bZPD5A4kZHGnLjsL$YqXasw=()
   в StockSharp.Algo.MarketRuleHelper.#=qH2Y4Je3rhWV957$s7ps2yw==(IMarketRuleContainer #=qJpv0YbmmXNN9ri$CoYbEXw==, IMarketRule #=qWka7BzS$FJQ4leJX6BPhPg==, Func`1 #=qdJohKodKMjdrTUKlaOZXCg==)
   в StockSharp.Algo.Strategies.Strategy.#=qhBqOxQ5SIAbyY2y6N4BACOwIZpzjdVxd3qFW06_7OgM0tQM6wJbNghxpuK7RYc7MClbCYLtb7iXjJB0B0nSiAA==(IMarketRule #=qNNh7Xd9rPYJBZBVS_X7gig==, Func`1 #=qhxFvJ7$pKfzObQ00FWkAIw==)
2013/06/06 13:59:20.992|       |MQS_CEEN@UX_100820|Заявка 50352676 больше не активна.
2013/06/06 13:59:20.992|       |MQS_CEEN@UX_100820|Заявка 50352676 больше не активна.
2013/06/06 13:59:20.993|Error  |MQS_CEEN@UX_100820|Заявка 50352677 (0x341345D) не была принята по причине System.Threading.LockRecursionException: В этом режиме не разрешены рекурсивные приобретения блокировки записи.
   в StockSharp.Quik.QuikTrader.RegisterTransaction(Transaction transaction)
   в StockSharp.Quik.QuikTrader.OnRegisterOrder(Order order)
   в StockSharp.Algo.BaseTrader.RegisterOrder(Order order).


но это при trader.IsAsyncMode = false.

если асинхронний режим включить, то все работает отлично, но только нужно указать в транзакциях код клиента и обьем. А это не удобно 😢

esper
esper

По коду клиента действительно баг. Если объем не указывать, то какая ошибка?

yar1k0v
yar1k0v Автор

Вот такая ошибка если в транзакции не указывать обьем. Кратность лота акции CEEN 100, но пишет, что 1. Определял через MinLotSize.


2013/06/06 15:02:09.818|Warning|MQS_CEEN@UX_100820|Заявка 54121160 в процессе регистрации.
2013/06/06 15:02:09.896|Error  |MQS_CEEN@UX_100820|Заявка 54121160 (0x335A642) не была принята по причине StockSharp.Quik.ApiException: Код ошибки Failed Сообщение Неверно указано количество.
2013/06/06 15:02:09.903|Error  |MQS_CEEN@UX_100820|Заявка 54121160 не принята биржей по причине 'Код ошибки Failed Сообщение Неверно указано количество'.

Скажите пожалуйста, исправление выйдет или нет?

esper
esper

yar1k0v: Скажите пожалуйста, исправление выйдет или нет? По коду клиента будет фикс, по объему проблема пока не понятна, у заявки объем указан правильно? Посмотрите какие поля будут в транзакции по событию FormatTransaction.

yar1k0v
yar1k0v Автор

Смотрите, когда я определяю кратность лота по акции CEEN (Security.MinLotSize), то мне отображает 1, хотя должно быть 100.

Посмотрите какие поля будут в транзакции по событию FormatTransaction. А какие именно вам нужны? Их там много =)

esper
esper

Покажите ToString() для транзакции. Как вы объем задаете для заявки? Если неверной приходит MinLotSize, то какие данные в квике в этой колонке? таблицы правильно настроены?

yar1k0v
yar1k0v Автор

По моему я нашел где ошибка. Иногда это бывает так очевидно =) В квике, в таблице лот, все значения равны 1. Верифаер ошибок не нашел. Но вместо колонки лот, должна быть колонка кратность лота.

yar1k0v
yar1k0v Автор

Я заменил колонку и кратность лота теперь отображается правильно, но в транзакциях обьем все равно равен 1 (а не 100, как кратность лота).

Код ошибки:


013/06/10 12:46:30.463|       |MQS_CEEN@UX_100820|Регистрация новой Limit (0x41C1A0) заявки на Sell с ценой 4,479 и объемом 1. 
2013/06/10 12:46:30.467|Warning|MQS_CEEN@UX_100820|Заявка 45982966 в процессе регистрации.
2013/06/10 12:46:30.467|Warning|MQS_CEEN@UX_100820|Заявка 45982967 в процессе регистрации.
2013/06/10 12:46:30.482|Error  |MQS_CEEN@UX_100820|Заявка 45982966 (0x1C50583) не была принята по причине StockSharp.Quik.ApiException: Код ошибки Failed Сообщение Неверно указано количество.
2013/06/10 12:46:30.486|Error  |MQS_CEEN@UX_100820|Заявка 45982966 не принята биржей по причине 'Код ошибки Failed Сообщение Неверно указано количество'.
2013/06/10

Не знаю, что с этим делать.

esper
esper

Умножить вручную объем на кратность лота.

yar1k0v
yar1k0v Автор

Я именно так и делаю при создании стратегии, но это игнорируется API. Приходиться указывать только таким способом:

trader.FormatTransaction += transaction => transaction.SetVolume(100);

И в SetVolume() прийдеться каждый раз передавать новое значение при смене инструмента, а это не очень удобно! Так же я не понимаю, почему при создании QuikTrader и отключении асинхронности виставления заявок, программа (робот) просто крэшиться?

var trader = new QuikTrader(quikPath) { IsAsyncMode = false };
esper
esper

yar1k0v: Я именно так и делаю при создании стратегии, но это игнорируется API. Приходиться указывать только таким способом:

trader.FormatTransaction += transaction => transaction.SetVolume(100);

> И в SetVolume() прийдеться каждый раз передавать новое значение при смене инструмента, а это не очень удобно!
Еще раз, как вы создаете заявку и какой объем там указываете, что содержит транзакция? Если вы укажите там 100 все должно работать.
> **[yar1k0v](@message(26311)):**
> Так же я не понимаю, почему при создании QuikTrader и отключении асинхронности виставления заявок, программа (робот) просто крэшиться?
> ```csharp
var trader = new QuikTrader(quikPath) { IsAsyncMode = false };

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

yar1k0v
yar1k0v Автор

Сначала я создаю стратегию и указываю обьем в ней:


_strategy = new Strategy
{
Volume = MySecurities.SelectedSecurity.MinLotSize * (decimal)Properties.Settings.Default.Volume,
Security = MySecurities.SelectedSecurity,
Portfolio = Portfolios.SelectedPortfolio,
Trader = _trader,
CancelOrdersWhenStopping = true,
DisposeOnStop = true
};

Метод, выставляющий заявку:


        private void MakeOrder(OrderDirections direction)
        {
            var price = direction == OrderDirections.Buy ? Security.GetMarketDepth().BestBid.Price : Security.GetMarketDepth().BestAsk.Price;

            var order = new Order
            {
                Price = price,
                Portfolio = Portfolio,
                Volume = Volume,
                Direction = direction
            };

            var _strategy = new MarketQuotingStrategy(order, Security.MinStepSize, Security.MinStepSize);
            ChildStrategies.Add(_strategy);
        }

Но транзакция содержит обьем, равный 1.

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

yar1k0v
yar1k0v Автор

Когда выйдет исправление?

yar1k0v
yar1k0v Автор

На УБ для спотового рынка нужно использовать колонку кратность лота а не размер лота...

esper
esper

На последней версии ошибка с кодом клиента исчезла?

yar1k0v: На УБ для спотового рынка нужно использовать колонку кратность лота а не размер лота... Так поставьте у себя в квике нужную колонку вместо той, что идет по умолчанию.

yar1k0v
yar1k0v Автор

Ошибка с кодом исчезла. Спасибо) Я то колонку сменил, но возникает трабла на срочном рынке при трейде фьючем. Торговля идет по нескольким акциям и фьючу. Так вот, для фьюча кратность налл... Просто хочу узнать, как сделать так, что бы была таблица кратности и размера лота?

yar1k0v
yar1k0v Автор

Кроме шуток, я не нашел в DdeSecurityColumns колонку с кратностью лота =) this.Trader.SecuritiesTable.Columns.Add(DdeSecurityColumns.?);

Как быть?