Проблема с заявками
Atom Ответить
18.08.2014


esper Перейти
Выложили 4.2.16.0

Фичи:
  • Transaq. Версия библиотек обновлена до v2.10.
  • Connector. Добавлен метод GetFilteredMarketDepth для получения стакана без своих заявок.
  • Connector. При выключенных UpdateSecurityLastQuotes и UpdateSecurityByLevel1 значения полей инструментов не изменяются.
  • Emulator. Изменены примеры тестирования (передача level1 данных для инструмента).
  • OrderGrid. Добавлена ссылка для копирования текста ошибки.
  • OrderWindow. Добавлены предопределенные значения цен и объема.
  • SciChart. Контекстное меню для добавления элементов показывается только в интерактивном режиме.
  • Security. Изменены значения по умолчанию для MinPrice и MaxPrice.
  • Security. Добавлено поле BinaryOptionType.

Баги:
  • Connector. Ошибка обработки OrderFail.
  • Emulator. Ошибка с неверным временем при тестировании на тиках.
  • QuotingStrategy. Ошибка перестановки заявок.
  • MarketDepthControl. Не показывается дробная часть для цены.


Добрый день, у меня перестали отправляться заявки по LUA, в логе:

t["ACCOUNT"] = "SPBFUT00866"
t["CLASSCODE"] = "FORTS"
t["SECCODE"] = "SPU4"
t["QUANTITY"] = "3"
t["EXPIRY_DATE"] = "GTC"
t["OPERATION"] = "B"
t["TYPE"] = "L"
t["ACTION"] = "NEW_ORDER"
t["PRICE"] = "5762"
t["EXECUTION_CONDITION"] = "PUT_IN_QUEUE"
t["TRANS_ID"] = "45414414"
sendTransaction(t)

2014/08/18 12:37:59.377| |FixServer |From client quik: TestRequest
2014/08/18 12:38:00.969| |FixServer |From client quik: TestRequest

более ничего не происходит, ордер висит в статусе Pending, подскажите где копать? В DDE режиме все работает. Ордера отправляются только в версии 4.2.8.0, в версиях 4.2.14.0 и 4.2.16.0 наблюдается вышеуказанная ошибка. Робот полностью один и тот же.

Также в версии 4.2.8.0 в файле StockSharp.QuikLua.FatalError.log выдается постоянно ошибка:

[18.08.2014 12:51:45] StockSharp.Fix.resources, Version=4.2.8.0, Culture=ru, PublicKeyToken=null: System.IO.FileNotFoundException: Не удается найти указанный файл. (Исключение из HRESULT: 0x80070002)
в System.Reflection.RuntimeAssembly.nLoadFile(String path, Evidence evidence)
в System.Reflection.Assembly.LoadFile(String path)
в CurrentDomain_AssemblyResolve(Object sender, ResolveEventArgs args)

Теги:


Спасибо:




38 Ответов
< 1 2 
esper

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


VirKato Перейти
Код

Robot_SBER@TQBR_Client 20.08.2014 17:07:58 Error Заявка 61647829 (0x32DEFB3) не была принята по причине System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
   в QuickFix.FieldMap.SetField(IField field)
   в QuickFix.FIX44.NewOrderSingle.set_SecurityType(SecurityType value)
   в StockSharp.Fix.FixMessageAdapter.#=qyC$rb1ME$5D8fHjjzLcDQ5sXhsIfDopfy3EzTHl9Oak=(OrderRegisterMessage #=q$sYF1wcBtdkPHN$_4cxULw==)
   в StockSharp.Fix.FixMessageAdapter.OnSendInMessage(Message message)
   в StockSharp.Messages.MessageAdapter`1.OnInMessageProcessor(Message message, IMessageAdapter adapter).

Security.Type чему равно?
Спасибо:

vsnoopy83

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


Михаил Сухов Перейти
vsnoopy83 Перейти

Вообще ошибка 'vy ne mozhete snyat' dannuyu zayavku'..


Это не наша ошибка. Это вообще даже не ошибка.

vsnoopy83 Перейти

обычно появляется при ReRegister операциях, раньше они применялись только на фортсе, в последних изменениях была фича: Для торговых площадок MICEX изменено значение IsSupportAtomicReRegister на true. не совсем понятно MICEX стал поддерживать ререгистер? может с этим связана ошибка.


С т.з. Квика не знаю, а шлюз ММВБ давно поддерживает.



Такая ошибка может возникнуть, когда мы пытаемся двинуть заявку, которая уже исполнилась, мы шлем транзакцию и в ответ получаем ошибку, вы не можете снять данную заявку в луа версии и не найдена активная заявка для перестановки в dde версии. Или второй вариант, если пытаться снять уже исполненную заявку, такие ошибки обычно при резких движухах рынка бывают. Ну и правда это не ошибка, просто сервер дает ответ, что данную заявку уже не снять, т.к. она исполнена или уже была снята ранее.
Автор топика
Спасибо:

VirKato

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


esper Перейти

Security.Type чему равно?


После перехода на 4.2.18 type изменился с
Код

StockSharp.Messages.SecurityTypes.Index
на null


В коде указал
Код

 ticker.type = StockSharp.Messages.SecurityTypes.Index

Заявки начали проходить, в квике появляются. В роботе статус остается pending и id = null.
При попытках:
Код

this.ReRegisterOrder(newBuy);
или
this.CancelOrder(CurrBuy) ;

Все так же:
Код

2014/08/21 16:42:37.207|       |FixServer |From client quik: OrderCancelRequest
2014/08/21 16:42:37.227|       |None      |SendTransaction: t = {}
t["CLASSCODE"] = "TQBR"
t["SECCODE"] = "SBER"
t["ORDER_KEY"] = "0"
t["ACTION"] = "KILL_ORDER"
t["TRANS_ID"] = "59960745"
sendTransaction(t)

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

esper

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


Для FORTS-а это работает? Скрипт точно загружен последней версии? Какой версии сам квик?
Спасибо:

VirKato

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


Версия QUIK 6.12.0.31;
Перепроверил, что везде используется версия 4.2.18 с датой изменения 19.08 21:54.
Спасибо:

esper

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


На FORTS что с заявками? В новой версии добавил доп. дебаг логи, проверьте на ней.
Спасибо:

VirKato

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


esper Перейти
На FORTS что с заявками? В новой версии добавил доп. дебаг логи, проверьте на ней.

Проверить заявки на Фортсе не смогу.
Полный лог Lua (4.2.19):
Код

2014/08/22 13:15:14.039|Warning|FixServer |Пользователь quik принудительно разлогинен из-за ошибок отправки данных.
2014/08/22 13:16:33.110|       |FixServer |Клиент quik (127.0.0.1:52178) авторизован.
2014/08/22 13:16:33.470|       |FixServer |Отправка Logon клиенту.
2014/08/22 13:16:33.471|       |FixServer |Сессия запущена.
2014/08/22 13:16:33.484|       |FixServer |From client quik: OrderMassStatusRequest
2014/08/22 13:16:33.484|       |FixServer |From client quik: RequestForPositions
2014/08/22 13:16:33.485|       |None      |Lookup (OrderStatus, 47790394, , )
2014/08/22 13:16:33.485|       |None      |GetOrders
2014/08/22 13:16:33.486|       |None      |GetOrders done
2014/08/22 13:16:33.486|       |None      |GetTrades
2014/08/22 13:16:33.486|       |None      |GetTrades done
2014/08/22 13:16:33.486|       |None      |Lookup (PortfolioLookup, 47790395, , )
2014/08/22 13:16:33.486|       |None      |GetPortfolios
2014/08/22 13:16:33.486|       |None      |GetPortfolios done
2014/08/22 13:16:33.486|       |None      |GetPositions
2014/08/22 13:16:33.495|       |None      |GetPositions done
2014/08/22 13:16:33.986|       |FixServer |Клиент quik (127.0.0.1:52179) авторизован.
2014/08/22 13:16:34.345|       |FixServer |Отправка Logon клиенту.
2014/08/22 13:16:34.345|       |FixServer |Сессия запущена.
2014/08/22 13:16:34.348|       |FixServer |From client quik: SecurityListRequest
2014/08/22 13:16:34.349|       |None      |Lookup (SecurityLookup, 47790396, , )
2014/08/22 13:16:34.349|       |None      |GetSecurities
2014/08/22 13:16:34.376|Error  |None      |Пустой код инструмента для класса PSEQ.
2014/08/22 13:16:34.703|Error  |None      |Пустой код инструмента для класса TQBR.
2014/08/22 13:16:34.706|Error  |None      |Пустой код инструмента для класса TQOB.
//пропущено много строк
2014/08/22 13:16:35.466|Error  |None      |Пустой код инструмента для класса PSIF.
2014/08/22 13:16:35.466|Error  |None      |Пустой код класса для getClassesList.
2014/08/22 13:16:35.561|       |None      |GetSecurities done
2014/08/22 13:16:53.036|       |FixServer |From client quik: MarketDataRequest
2014/08/22 13:16:53.037|       |FixServer |From client quik: MarketDataRequest
2014/08/22 13:16:56.873|       |None      |Lookup (QuoteChange, 0, SBER, TQBR)
2014/08/22 13:16:56.873|       |None      |Lookup (Level1Change, 0, SBER, TQBR)
2014/08/22 13:17:06.717|       |FixServer |From client quik: NewOrderSingle
2014/08/22 13:17:06.717|       |None      |SendTransaction: t = {}
t["ACCOUNT"] = "account"
t["CLASSCODE"] = "TQBR"
t["SECCODE"] = "SBER"
t["QUANTITY"] = "5"
t["CLIENT_CODE"] = "client"
t["EXPIRY_DATE"] = "GTC"
t["OPERATION"] = "B"
t["TYPE"] = "L"
t["ACTION"] = "NEW_ORDER"
t["PRICE"] = "76.36"
t["EXECUTION_CONDITION"] = "PUT_IN_QUEUE"
t["TRANS_ID"] = "47790403"
sendTransaction(t)

2014/08/22 13:17:16.829|       |FixServer |From client quik: OrderCancelRequest
2014/08/22 13:17:16.846|       |None      |SendTransaction: t = {}
t["CLASSCODE"] = "TQBR"
t["SECCODE"] = "SBER"
t["ORDER_KEY"] = "0"
t["ACTION"] = "KILL_ORDER"
t["TRANS_ID"] = "47790404"
sendTransaction(t)


В итоге: заявка выставлена и активна в квике. При попытке снятия - ошибка Квика "нельзя снять данную заявку". Построчно сверил с логами на работающем тестовом квике - отличаются только в строке << t["ORDER_KEY"] = "0" >>. В тестовом квике статус заявки обновляется и id присваевается.
Спасибо:

VirKato

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


Похоже, что без Id заявки снять ее не получится. Почему могут не подкачиваться ордера (Не обновляется статус, не приходит id)?
В Sample заявки тоже не подгружаются, хотя подгружаются: Портфели, Инструменты.
Спасибо:

esper

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


esper Перейти
В новой версии добавил доп. дебаг логи


Спасибо:

VirKato

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


esper Перейти
В новой версии добавил доп. дебаг логи

Куда смотреть? В MonitorWindow - все хорошо. Ошибку возвращает QUIK, т.к. Lua пытается снять заявку без биржевого id. При этом quik может снять заявку только при указании id биржы, а не trans id (поправьте меня, если я ошибаюсь).
Где в логах посмотреть - почему не обновляется статус заявки?
Спасибо:

GrandTucan

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


Сейчас разбираюсь с коннектором QuikLua, заметил, что такую особенность: после постановки заявки событие QuikTrader.NewOrders приходит сразу же: при этом Id=0 (биржевой номер заявки). А событие QuikTrader.OrdersChanged, в котором передается присвоенный биржей Id приходит очень долго: где-то через 20-30 секунд после NewOrders (Order.LatencyRegistration 20-30 секунд). Хотя в терминале вижу зарегистрированную биржей заявку почти мгновенно. QUIK 6.14.02.12, StockSharp 4.2.20.0 (но то же самое было и в 4.2.18.0).

Такого раньше не было. Соответственно если попытаться передвинуть заявку в течение этих 20-30 секунд, Quik не поймет какую заявку двигать и напишет ошибку "нельзя снять данную заявку". Если выждать время, то приходит событие QuikTrader.OrdersChanged с присвоенным биржей Id и тогда заявку можно нормально двигать.

Однако в примере Sample из той же версии StockSharp 4.2.20.0 заявка появляется в окне "Заявки..." практически мгновенно после постановки. С обоими заполненными полями TransactionId и Id.

Вероятно в библиотеке происходит какой-то затык при вызове QuikTrader.OrdersChanged.

Прошу обратить внимание на эту проблему. Или же поправить, если неправ :)
Спасибо:

esper

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


Заявка из Connector.NewOrder приходит с состоянием Pending и у нее должен быть заполнен номер транзакции. Далее, когда заявка будет зарегистрирована, она придет через Connector.OrdersChanged, у нее должен быть биржевой номер и состояние или Active или Done, это исключая ошибки регистрации. Именно когда она стала Active ее можно снять.

Если в Sample данные по номеру и состоянию приходят быстро, значит API работает, "затык", скорее всего, в вашем коде. Проверяйте время работы ваших обработчиков, все события приходят в одном потоке и ожидание в одном обработчике может тормозить другие.
Спасибо:

esper

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


VirKato Перейти
esper Перейти
В новой версии добавил доп. дебаг логи
Куда смотреть?

Смотреть надо дебаг логи для Lua.
Спасибо:
< 1 2 

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

loading
clippy