Мы сделали новый коннектор к Quik. Доступен начиная с версии 4.2.4.0
Коннектор обраладет следующими преимуществами:
- Быстрее скорость транспортировки данных.
- Значительно упрощена настройка таблиц в Quik (все колонки по умолчанию, нужно просто открыть таблицы в терминале, без дополнительных каких-либо настроек).
- Возможность подключаться удаленно к Quik.
- Робот может быть скомпилирован под 64 бита.
Подробнее, о настроках и миграции.
Коннектор сделан с использование протокола FIX 4.4. Поэтому появилась новая возможность - подключение к Quik не из StockSharp программ. Если у вас есть код или готовая программа, использующая FIX, то вы можете попробовать подключиться к Quik терминалу через FIX протокол.
Давайте попробуем данный тип подключения, и отпишемся здесь о своих замечаниях. А к осени воздадим почет DDE+Trans2Quik как самой старой технологии, и первому коннектору в S#. И отправим на заслуженный покой.
Comentarios (163)
Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario
Скачал StockSharp_4.2.4_Sources, распаковал, добавляю скрипт StockSharp.QuikLua.lua в Quik и запускаю. Ошибка:
Этот файл есть по указанному пути? Может его разблокировать надо?
Да, есть. По указанному пути в папке все файлы, которые в папке References в архиве для скачивания. Попробовал скопировать папку в C:\References - та же самая ошибка.
На папку перед распаковкой делали Unblock?
Распаковывал в совершенно новую папку. На всякий случай проверил Unlocker'ом. Нет там блокировок никаких. Может библиотек каких не хватает в папке?
Версия Quik какая?
Кнопка была. Нажал разблокировать, разархивировал. Ошибка осталась. Квик 6.12.4.11
У меня не воспроизводится ни на 6.12.4.11, ни на более поздних версиях, специально качал архив с box.net для проверки. Необходимо искать кто у вас не дает загрузить файл. В свойствах dll файла есть такая кнопка?
Кнопки нет такой. Свойства файла
UPD: Попробовал запустить скрипт на виртуальном сервере - та же ошибка. Наверное дело в квике
UPD2: Скачал с БКС заново квик - не помогло
Тогда пробуем установить Visual C++ redistributable
Заработало
вопрос в тему: Гидра умеет с помощью этого коннектора к Квику подключаться, и если да, то как ее надо настраивать?
В ближайших версиях, смотрите по changelog-у.
Теперь если есть возможность подключаться удаленно, проддерживается ли подключение двух роботов к одному квику одновременно?
Да.
Решение на базе FIX Server появилось в рамках продукта S#.Broker. Данный продукт доступен только для корпоративных клиентов.
В коннекторе Quik используется сокращенная по функционалу версию, которая позволяет подключение только 1 клиенту. Возможно, после окончания тестирования, расширим для эту опцию до нескольких клиентов. Но она будет доступна только для учеников или по брокерской лицензии.
Можно же всегда сделать одного робота с кучей стратегий. Так и риски регулировать удобнее, и за общей позицией следить и т.д.
С одним терминалом могут работать:
Hydra + боевые роботы это вещь... надеюсь, хотя бы такое ограничение можно сделать для пользователей. Иметь 2 источника: 1 для данных, 1 для execution неудобно
Новый коннектор не бесплатен?
Бесплатен. А что вы сделали, что сейчас ошибка вылезла?
Просто запустил робота в первый раз. До этого я только с импортом скрипта возился.
С DDE работает нормально.
С базовой лицензией не работает. Лицензию перегенерировал. «Лицензия №56157 не поддерживает “FixTrader”» При переключении на соединение через DDE ошибка сохраняется.
Это как именно?
Лицензию нужно видимо обновить в личном кабинете.
Удалил лицензию в личном кабинете и сгенерировал заново. Все равно ошибка, номер лицензии при этом уже другой
С DDE работает. Ошибка у меня (.
Для примера создал лейбл на главном экране Sample, событие не вызывается, сделки не приходят. Понимаю, что там коллекция, разбирать времени не было, но событие не приходит. Trader.NewTrades += tr => this.GuiAsync(() => ); 4. При попытке отправить из Sample заявку в терминал выскочила ошибка(в приложении), не поддерживается лицензия. Позже обновил лицензию через LicensTool, но не помогло, выскакивает такая же ошибка.
Подскажите, что с лицензией то делать? Ошибка была в приложении к сообщению в картинке.
Буду выкладывать по мере повторения поступления ошибок, сейчас самое главное для меня получить сделки из таблицы всех сделок.
Спасибо за ответы!
Будет фикс, постараемся сегодня выложить.
_trader.NewTrades += trades
События так и не приходят, и стаканы так и не открываются. Стаканы то бог с ним, можно вручную открыть, данные начинают приходить, а вот со сделками беда.
Если к нужному инструменту сделать RegisterTrades(инструмент), начинают приходить, но только новые сделки, а как же получить историю с начала дня.
Хочу обратить внимание, что при DDE соединении при подписке на событие trades сделки из таблицы всех сделок приходят по умолчанию, даже без RegisterTrades(инструмент). Если здесь механизм другой, прошу подсказать как им пользоваться, как получить все сделки с начала дня.
В Sample, открываю таблицу всех сделок, сделок нет. При этом все остальные таблицы заполняются.
Интересно также, что после того, как нажимаешь в Sample кнопку отключится фактически отключения не происходит, продолжают приходить данные.
Спасибо, за ответы, будем проверять в понедельник, по поводу правильно не правильно я ж не знаю, как должно быть правильно, знаю только как работало)) Смущает, что при подписке на трейды по бумаге не приходит история, но будем разбираться.
После применения Level1 таблица всех сделок заработала, значит и к роботам прикрутим, но вот стаканы автоматически не открываются. т.е. выбираешь бумагу нажимаешь кнопку стакан, Sample стакан открывается, а в квике нет, при этом если вручную в квике открыть стакан, то в стакан sample начинают приходить данные. Ошибок никаких не вижу.
Для текущей версии читаем документацию и далее смотрим на скрин.
Все по инструкции, (см. скрин), есть таблица текущих параметров с названием Инструменты, есть первые 3 колонки правильные, но стакан не открывается, да это и мелочь на самом деле, не сложно его открыть руками, но вот сегодня опять не пришла история сделок с начала дня при подписке по Level1.
Также для избежания постоянной путаницы может быть есть смысл в стандартном файле настроек info_lua.wnd изменить название таблицы параметров на Инструменты. Т.к. я вот был уверен, что в этих настройках все так, как должно быть для корректной работы.
Попробуйте на 4.2.6
Сделки с начала дня пришли, стаканы открылись, все работает, проверяем функционал дальше. Спасибо!!
Осталась последняя проблема, не отображается корректно максимальная и минимальная цена на фортсе. Показывает 2147483647 и 1 соответственно, подскажите как получить эти данные, очень нужны для фортса и рыночных заявок.
На изменения по инструменту подписаны?
да, нажимаю сначала Level1, дожидаюсь пока придут все данные в таблице инструментов и потом только смотрю максимальную и минимальную цену.
Раньше в dde нужно было дополнительно эту информацию получать. Может здесь тоже что то подобное?
Так Level1 нужно нажимать после появления нужного инструмента.
Да естественно, Level1 активен только при выборе инструмента, когда он уже загружен в Sample
Здравствуйте , версия 4.2.6.0 при попытке запустить скрипт Луа в Квик выскакивает ошибка : error loading module 'StockSharp' from file 'C:\References\StockSharp.QuikLua.dll': The specified module could not be found. Подскажите пожалуйста в чем проблема.
Было.
Да , но это : "Тогда пробуем установить Visual C++ redistributable" в моем случае никак не помогает , ошибка та же.
Возможно у вас 64 разрядная система и вы установили redistributable именно для неё, тогда ошибка останется, надо ставить x86.
Да, так и было. Спасибо.
Добавил в доку.
Подскажите есть ли новости по поводу получения максимальной и минимальной возможной цены?
Вроде все заработало, один вопрос: при перерегистрации заявок раньше по dde в окне сообщения об этом не сообщалось, теперь сообщается:
"Перестановка заявок завершена успешно. New Order1 ID: 2396988446, new Order2 ID: 0"
эти сообщения можно отключить? Из за них можно попустить что то важное, например время открытия вечерки или остановки торгов для расширения лимитов.
И кстати непонятно почему ID Order2 0.
Спасибо!
В новом коннектроре на Луа есть одна большая проблема: до того пока не произойдет обнвление того или инного поля оно остается пустым, я уже упоминал об этом на примере стакана: на стакан подписался , но стакана еще нет и пока стакан не изменится в коннекторе он таки будет пустым. То же самое например с полями инструментов , например поля теор цены и волатильность опционов так и будут пустыми пока не произойдет событие в котором придет их обновление.
Думаю это неправильно , должно быть так:
Получил новый инструмент подписался на него и автоматом должны перечитаться из квика и заполнится все поля инструмента. Также со стаканом , как только я подписываюсь на стакан , коннектор должен принудительно взять стакан из квика, а не ждать пока произойдет обновление стакана.
Вот самое главное что разработчики пропустили в новом коннекторе .
Еще раз, процесс подписки и получения данных асинхронный. Если по каким-то причинам для каких-то коннекторов сразу после вызова метода RegisterMarketDepth (не дожидаясь события изменения стакана), можно получить заполненный стакан, это не значит, что это правильный подход в использовании S# и он будет работать всегда и для всех коннекторов.
Действительно приходят свойства и стаканы, но почемуто очень и очень медленно и мучительно долго, через ДДЕ все приходит в моменте, а тут нужно минут 10 чтобы все пришло.
Еще заметил что новый коннектор никак не учитывает настройки получения данных прописанные в квике в Связь- Списки , и подгружает все инструменты , может потому он так и тормозит ?
Может стоит отключить автоматическую подписку на все инструменты ? пусть каждый подписывается только на те инструменты которые ему нужны.
Интересно, а как с таблицей всех сделок, он хоть учитывает подписку на эти данные или тоже грузит все подряд?
Я и подписываюсь только на то что мне нужно . Вы уверены что коннектор не делает автоматом: connector.RegisterSecurity(sec) при получении ногого инструмента ?
Почему же такие тормоза ? Почему через ДДЕ все приходит намного быстрее ? По идее через Луа наоборот должно быть пошустрее.
Может проблема в самом скрипте луа то есть в длл что в него подгружается, ведь даже если я не подписался отсекать будет уже коннектор, может нужно что бы отсекал скрипт луа ? может все данные идут одним потоком в соннектор из луа?
есть информация с какой версии квика будет работать корректно, а то есть брокеры с довольно старыми?
Давайте подойдем с другой стороны, у вас что-то не работает?
мне бы настроить версию 6.5.2.11
Нет необходимости загружать именно этот файл настроек, все необходимые настройки описаны здесь.
При запуске Samples (S# 4.2.20, QUIK 6.14.0.12), через LUA, выскакивает ошибка "Операция является недоступной из-за текущего состояния объекта" http://gyazo.com/9167c69e6a43796ee40866289782da7b , в StockSharp.QuikLua ошибки нет. Что не так?
Скопируйте ошибку текстом.
Error System.InvalidOperationException: Операция является недопустимой из-за текущего состояния объекта. в #=qlzAhmNJcRJj7yRqMy$HGIbaJ9VOJwEcYz4f_WwOTVNE=.#=qDgLWy14y870wz4tzTCEUQg==(Stream #=q0z4clprxecT1NtlVhkbsfQ==) в StockSharp.Fix.FixReader.ReadNextTag() в StockSharp.Fix.FixMessageAdapter.#=qacR_9DBjtFT9tmjFdlb977Xn632wOgT$bDM2ysPPVHA=()
Хорошо бы еще дебаг логи для QuikTrader-а увидеть.
В StockSharp.QuikLua только: "2014/08/29 22:52:01.685| |FixServer |FixServer started." (LogLevel=2)
Пробовал подключиться через другого брокера (Quik 6.13.0.104), результат аналогичный🤨
Логи нужны не LUA, а робота. В частности QuikTrader в режиме Debug
0001/01/01 00:00:00.000| |QuikTrader|Connect 2014/09/01 17:00:56.454|Debug |FIX |Sending to 80.249.134.243:15101: 8=FIX.4.49=10135=A34=149=*****52=20140901-13:00:56.44056=StockSharpTS98=0108=60141=Y553=*****554=********10=172 0001/01/01 00:00:00.000|Debug |QuikTrader|BP:Connect,T=2014.09.01 17:00:56.523,Error=Операция является недопустимой из-за текущего состояния объекта. 2014/09/01 17:00:56.523|Error |QuikTrader|System.InvalidOperationException: Операция является недопустимой из-за текущего состояния объекта. в #=qlzAhmNJcRJj7yRqMy$HGIbaJ9VOJwEcYz4f_WwOTVNE=.#=qDgLWy14y870wz4tzTCEUQg==(Stream #=q0z4clprxecT1NtlVhkbsfQ==) в StockSharp.Fix.FixReader.ReadNextTag() в StockSharp.Fix.FixMessageAdapter.#=qacR_9DBjtFT9tmjFdlb977Xn632wOgT$bDM2ysPPVHA=() 2014/09/01 17:00:56.523| |QuikTrader|Disconnect 2014/09/01 17:00:56.523|Warning|QuikTrader|Невозможно выполнить отключение, так как соединение находится в состоянии Failed.
Посмотрите еще лог Lua. Есть ли там хоть какие-то признаки подключения. Судя по стрнной ошибке и что ее нет у других - у вас проблемы сетевого характера (фаервол, неправильный порт, адрес и т.д.), а не коннектора.
Попробовал подключится через другого брокера, антивирусы/фаерволы отключил, порты и адреса проверил. После запуска Квика лог Lua:
2014/09/01 22:20:24.074| |FixServer |FixServer started. 2014/09/01 22:20:24.074|Debug |None |OnInit done 2014/09/01 22:20:24.075|Debug |None |Main 2014/09/01 22:21:06.545|Debug |None |OnParam 2014/09/01 22:21:06.555|Debug |Quik |Out. Level1Change,T=2014.09.01 22:21:06.558,Sec=S#:RU000A0JPZ35@EQOB, Native:,Type:,Changes=[PriceStep, 0,01] 2014/09/01 22:21:06.564|Debug |None |OnParam done ... 2014/09/01 22:21:07.729|Debug |None |OnDepoLimit 2014/09/01 22:21:07.729|Debug |Quik |Out. PortfolioChange,T=2014.09.01 22:21:07.729,P=139892,Changes=[DepoName, L01-00000F00] 2014/09/01 22:21:07.729|Debug |Quik |Out. Position,T=2014.09.01 22:21:07.730,Sec=S#:RU000A0GN9B5@, Native:,Type:Stock,P=139892 2014/09/01 22:21:07.730|Debug |Quik |Out. PositionChange,T=2014.09.01 22:21:07.730,Sec=S#:RU000A0GN9B5@, Native:,Type:Stock,P=139892,Changes=[BeginValue, 12],[CurrentValue, 12] 2014/09/01 22:21:07.730|Debug |None |OnDepoLimit done
как я понимаю информация по бумагам и позициям идёт. Когда запускаю стратегию, в логе Lua новых записей не появляется, а QuikTrader выдаёт новую ошибку:
0001/01/01 00:00:00.000| |QuikTrader|Connect 2014/09/01 22:23:29.541|Debug |FIX |Sending to 195.226.204.208:15300: 8=FIX.4.49=10235=A34=149=*****52=20140901-18:23:29.53056=StockSharpTS98=0108=60141=Y553=*****554=***10=183 0001/01/01 00:00:00.000|Debug |QuikTrader|BP:Connect,T=2014.09.01 22:23:29.560,Error=Не удается прочитать данные из транспортного соединения: Удаленный хост принудительно разорвал существующее подключение. 2014/09/01 22:23:29.560|Error |QuikTrader|System.IO.IOException: Не удается прочитать данные из транспортного соединения: Удаленный хост принудительно разорвал существующее подключение. ---> System.Net.Sockets.SocketException: Удаленный хост принудительно разорвал существующее подключение в System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags) в System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size) --- Конец трассировки внутреннего стека исключений --- в System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size) в System.IO.Stream.ReadByte() в #=qlzAhmNJcRJj7yRqMy$HGIbaJ9VOJwEcYz4f_WwOTVNE=.#=qDgLWy14y870wz4tzTCEUQg==(Stream #=q0z4clprxecT1NtlVhkbsfQ==) в StockSharp.Fix.FixReader.ReadNextTag() в StockSharp.Fix.FixMessageAdapter.#=qacR_9DBjtFT9tmjFdlb977Xn632wOgT$bDM2ysPPVHA=()
195.226.204.208:15300 - это что за адрес?
Михаил, я понял свою ошибку! Это адрес соединения брокера😂. Спасибо!
Добрый день. Как при Lua подключении получить значение "Входящие средства" (Размер позиции на начало торговой сессии) из таблицы "Портфель по бумагам"? portfolio.BeginValue выводит неправильные данные.
Подробнее
При соединении через DDE в Quke настраивается таблица "Портфель по бумагам", с колонками: Код клиента ВходСредства ТекСредства Тек.плечо
Данные из колонки "ВходСредства" выводятся с помощью portfolio.BeginValue. При соединении через Lua, portfolio.BeginValue выводит совершенно другие данные, не соответствующие данным в колонке "ВходСредства"🤨 (похоже на данные из колонки "Вход.активы", но это не то что надо) Как при соединении через Lua достать данные из колонки "ВходСредства"?
Добрый вечер!
Подскажите пож-та, запускаю скрипт, выдаёт ошибку! Visual C++ redistributable установлен, настройки Quik загрузил из Sample.
http://youtu.be/GVH3hv5CoyI
Приветствую всех. У меня вопрос про получение BestBid и BestAsk. Для этого обязательно запускать экспорт стаканов? В хелпе в описании метода RegisterSecurity указанно "Начать получать новую информацию (например, LastTrade или BestBid) по инструменту", но даже после его вызова BestBid и BestAsk у инструмента остаются равны null. В Sample также, при нажатии кнопки Level1 колонки bestbid и bestask остаются пустыми, при запуске стакана - заполняются. Verifier пишет, что все настроено правильно. Это баг или я что-то делаю/понимаю не так?
quik: 6.14.0.12 S#: 4.2.22 OS: Windows 7 x64
В режиме блиц-опроса повторю свой вопрос. Для проверки скачал только что 4.2.26 и запустил Sample, при нажатии Level1 bid'ов и ask'ов в таблице как не было, так и нет. Появляются только при запуске стакана.
Добрый день, подскажите пож-та, можно ли осуществить в коннекторе так, чтобы в список инструментов загружался только один определённый инструмент, а не весь список фьючей, акций, опционов и т.д.? Затрудняет поиск
Наверное настроить списки в квике...
Настраивал, оставлял один инструмент, но всё равно подгружаются куча других
В режиме блиц-опроса.
Какие то сейчас наблюдаются проблемы с новым коннектором через LUA или все были успешно устранены?
Пишите тут о своих проблемах, если они еще присутствуют.
Я как-то не так вопрос задал (может в не ту ветку или этот вопрос из разряда моего непонимания и ответ доступен только пользователям платной поддержки)? В моем понимании Level1 - это Bid price, Bid size, Ask price, Ask size, Last price, Last size. А стаканы это уже Level2. Тем более судя по документации (см. мое предыдущее сообщение) после вызова RegisterSecurity биды и аски должны быть доступны у security. Вызов SubscribeMarketData(sec, StockSharp.Messages.MarketDataTypes.Level1) также нчиего не дает. Мне в программе нужна информация по множеству инструментов (опционы разных страйков и дат, пока для одного БА, в перспективе для нескольких) и как-то совсем не хочется открывать миллион стаканов.
Кто то еще может подтвердить данное поведение?
Да, действительно это так и есть.
И действительно не работает фильтр по настроенным спискам, выдает все инструменты. Сделайте фильтр, чтобы данные по LUA (по инструментам и сделкам) передавались только те, что настроены по списку в Квике.
Это скрин с окна из примеров Samples\Quik\Sample и открыты инструменты...
Вы не понимаете что такое луа. Читайте все сообщения посвященные новому коннектору, и только после этого используйте его.
в 6.14 QUIK версии все работает, в 6.15 уже не работает...
если нужны какие-то преднастройки, то было бы хорошо иметь описание или *.wnd
К тому, что Lua не опирается на разметку таблиц (wnd)
А подскажите, почему трейдер LUA не возвращает статус заявки (null)?
Результат такой:
Order order = connector.Orders.FirstOrDefault(o => o.Id == oid);