Уважаемые разработчики и коллеги!
Quik 6.16.1.15
Решил попробовать Quik с Lua. Скачал релиз S# 4.3.8.
Взял info_lua.wnd из Samples\Quik
Запустил в quik'e StockSharp.Quik.lua из References\
И запустил пример из Samples\Quik\Sample\
В логе вроде все прилично:
2015/07/31 16:13:45.839| |LuaServer |OnInit 2015/07/31 16:13:45.840| |FixServer |Server 0.0.0.0:5001 started. 2015/07/31 16:13:45.841| |FixServer |FixServer (outgoing) stopped. 2015/07/31 16:13:45.841| |FixServer |FixServer started. 2015/07/31 16:13:45.841| |LuaServer |OnInit done 2015/07/31 16:13:45.845| |LuaServer |Main 2015/07/31 16:14:35.285| |FixServer |Connected '127.0.0.1:1236' to '0.0.0.0:5001'. 2015/07/31 16:14:35.285| |FixServer |Received first byte from '127.0.0.1:1236'. 2015/07/31 16:14:35.285| |FixServer |From : Logon 2015/07/31 16:14:35.285| |FixServer |Клиент quik (127.0.0.1:1236) авторизован. 2015/07/31 16:14:35.285| |FixServer |Отправка Logon клиенту. 2015/07/31 16:14:35.285| |FixServer |Сессия запущена. 2015/07/31 16:14:35.290| |FixServer |Connected '127.0.0.1:1237' to '0.0.0.0:5001'. 2015/07/31 16:14:35.290| |FixServer |Received first byte from '127.0.0.1:1237'. 2015/07/31 16:14:35.290| |FixServer |From : Logon 2015/07/31 16:14:35.291| |FixServer |Клиент quik (127.0.0.1:1237) авторизован. 2015/07/31 16:14:35.291| |FixServer |Отправка Logon клиенту. 2015/07/31 16:14:35.291| |FixServer |Сессия запущена.
Но в примере, нет ни инструментов, ни сделок, ни заявок (все это присутствует в квике). Проверял Verifier'ом - не ругается.
Но данные (инструменты, сделки, заявки) в пример не попадают.
Помогите, плиз, разобраться, что я делаю не так.
Или это баг?
Comentarios (39)
Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario
похоже на баг. В дебаг логе видно только портфели, позиции и AllTrades.
Инструментов, заявок, сделок не видать.
Ждем ответы от других.
я перешел на 4.3.8 из 4.3.7 все нормально. sample не проверял. Quik 6.17.1.17
вы не могли бы sample проверить? иначе сложно понять где искать проблему...
под рукой нет компилятора сбрось еxe-шник проверю сейчас
Проверил на sample.exe, все работает. Может быть забыли переключить запущенный луа скрипт (и остался от версии 4.3.7)?
Спасибо, значит проблема на моей стороне. Я запускаю все из 4.3.8 и ни разу раньше Lua не использовал.
Изменения портфеля и позиций я вижу в дебаг логе. Но сделок, заявок и инструментов нет. Как правильно должна называться таблица инструментов, может дело в ней?
В сам Trader не приходит ни одно событие включая NewPortfolios и NewPositions хотя в дебаг логе я вижу это:
Debug |LuaServer |OnFutPos
Debug |LuaServer |Out. Position,T(L)=0001.01.01 00:00:00.000,Sec=S#:...... Debug |LuaServer |Out. PositionChange,T(L)=0001.01.01 00:00:00.000,T.... Debug |LuaServer |OnFutPos done
Debug |LuaServer |OnFutLimit
Debug |LuaServer |Out. Portfolio,T(L)=0001.01.01 00:00:00.000,Name=S.... Debug |LuaServer |Out. PortfolioChange,T(L)=0001.01.01 00:00:00.000,..... Debug |LuaServer |OnFutLimit done
Помогите, пожалуйста, разобраться
у меня такое-же было не приходили события NewPortfolios у брокера ЦЕРИХ-демо, переписывался с ними насчет настроек QUIK(адекватного ответа небыло), с другими демо-брокерами все работало. Видимо в серверах QUIK есть какие-то особенности с которыми события NewPortfolios не приходит
от таблиц через LUA ничего не зависит можно вообще без таблиц. Попробуй другого брокера. сервак-ARQA например должно работать.
У меня вообще НИ ОДНО сообщение не приходит. И в логах нет ничего. Как такое возможно? Может сборка, выложенная на гитхабе, кривая?
Вы сами собираете?
ничего не понимаю то логи выводите, то в логах нет ничего
если не приходит событие NewPortfolios то и других событий не будет
сам не собираю
В логах присутствуют записи, кот. я привел. Но вот если в сам тест я добавлю вывод в консоль вызова событий, то их не происходит:
т.е. Lua Server их посылает, а до трейдера они не доходят...
я уже писал у меня такое-же было пока брокера не поменял.
может это БАГ стокшарп с нестыковкой с сервером QUIK (там же идет завязка с кодом клиента, обычно код клиента цифровой, а Цериха был с МАЛЕНЬКОЙ буквой может быть поэтому стокшарп не формирует событие )
в samples.exe код клиента не учитывается, подключается по умолчанию. Это умолчание настраивается где то в QUIK(наверно). я анализирую еще и список доступных кодов клиента (portfolios.name).
бывает по умолчанию подключен не тот код клиента. тогда и событий не будет.
вообщем пробуй других брокеров. Или изучай настройки QUIK
кстати у меня тоже нет событий security (инструменты) если в имени инструмента есть маленькая буква например Si5 у меня - нет событий, а RIH5 - есть. Такой же БАГ наверно и кодом клиента или настройкой windows или .NET c преобразованием маленьких и больших букв (как версия)
https://github.com/StockSharp/StockSharp/blob/master/Algo/Connector_ProcessMessage.cs#L302
Сделал так:
и использую его в sample.
НИ ОДНОГО сообщения отличного от Time не приходит.
В логах луа вижу:
Debug |FixServer |To client quik (127.0.0.1:2483): 8=FIX.4.09=5935=A49=quik56=StockSharpTS52=20150804-16:01:42.53134=110=069
|FixServer |Сессия запущена.
Debug |FixServer |Сессия ''. Получено: 'FIX.4.49=9535=A49=quik56=StockSharpTS52=20150804-16:01:42.53134=198=0108=60141=Y553=quik554=quik10=189^' |FixServer |Connected '127.0.0.1:2484' to '0.0.0.0:5001'.
|FixServer |Received first byte from '127.0.0.1:2484'.
|FixServer |From : Logon
|FixServer |Клиент quik (127.0.0.1:2484) авторизован.
|FixServer |Отправка Logon клиенту.
Debug |FixServer |To client quik (127.0.0.1:2484): 8=FIX.4.09=5935=A49=quik56=StockSharpMD52=20150804-16:01:42.53134=110=047
|FixServer |Сессия запущена.
Debug |FixServer |Сессия ''. Получено: 'FIX.4.49=9535=A49=quik56=StockSharpMD52=20150804-16:01:42.53134=198=0108=60141=Y553=quik554=quik10=167^'
Debug |LuaServer |Out. Position,T(L)=0001.01.01 00:00:00.000,Sec=S#:SiU5@FORT................ Debug |LuaServer |Out. PositionChange,T(L)=0001.01.01 00:00:00.000,T(S)=2015.0 Debug |LuaServer |OnFutPos done
Debug |LuaServer |OnFutLimit
Debug |LuaServer |Out. Portfolio,T(L)=0001.01.01 00:00:00.000,Name=........................... Debug |LuaServer |Out. PortfolioChange,T(L)=0001.01.01 00:00:00.000,T(S)=2015. Debug |LuaServer |OnFutLimit done
Уважаемый Михаил,
мне кажется не правильным, что sample не работает out-of-the box для одного из самых крупных брокеров (БКС).
Выше коллега писал, что есть зависимость от маленьких и больших букв в имени клиента. Где это используется в коде, как настроить?
Думаю, что тут виноваты настройки. ЧТо-то забыли, что-то не так сделали... Приведите логи под дебаг сервера и клиента. Я их гляну и смогу сказать, виноваты ли настройки или стокшарп.
Не знаю такого, но я квик подключение в последнее время мало использую.
А может быть проблема в том, что я компилляю sample под .Net 4.5.2?
Подобные вопросы только в саппорт. Я же могу ответить по разработке - ошибка коннектора или ваша.
Уважаемый, Михаил, прилагаю логи, как Вы просили.
StockSharp.QuikLua.log
2015/08/11 20:15:12.105| |LuaServer |OnInit 2015/08/11 20:15:12.116| |FixServer |Server 0.0.0.0:5001 started. 2015/08/11 20:15:12.118| |FixServer |FixServer (outgoing) stopped. 2015/08/11 20:15:12.118| |FixServer |FixServer started. 2015/08/11 20:15:12.119| |LuaServer |OnInit done 2015/08/11 20:15:12.124| |LuaServer |Main 2015/08/11 20:15:25.830| |FixServer |Connected '127.0.0.1:1179' to '0.0.0.0:5001'. 2015/08/11 20:15:25.833| |FixServer |Received first byte from '127.0.0.1:1179'. 2015/08/11 20:15:25.837| |FixServer |From : Logon 2015/08/11 20:15:25.845| |FixServer |Клиент quik (127.0.0.1:1179) авторизован. 2015/08/11 20:15:25.901| |FixServer |Отправка Logon клиенту. 2015/08/11 20:15:25.908|Debug |FixServer |To client quik (127.0.0.1:1179): 8=FIX.4.09=5935=A49=quik56=StockSharpTS52=20150811-17:15:25.90534=110=079 2015/08/11 20:15:25.908| |FixServer |Сессия запущена. 2015/08/11 20:15:25.908|Debug |FixServer |Сессия ''. Получено: 'FIX.4.49=9535=A49=quik56=StockSharpTS52=20150811-17:15:25.82734=198=0108=60141=Y553=quik554=quik10=202^' 2015/08/11 20:15:26.236| |FixServer |Connected '127.0.0.1:1180' to '0.0.0.0:5001'. 2015/08/11 20:15:26.236| |FixServer |Received first byte from '127.0.0.1:1180'. 2015/08/11 20:15:26.237| |FixServer |From : Logon 2015/08/11 20:15:26.237| |FixServer |Клиент quik (127.0.0.1:1180) авторизован. 2015/08/11 20:15:26.243| |FixServer |Отправка Logon клиенту. 2015/08/11 20:15:26.243|Debug |FixServer |To client quik (127.0.0.1:1180): 8=FIX.4.09=5935=A49=quik56=StockSharpMD52=20150811-17:15:26.24934=110=059 2015/08/11 20:15:26.243| |FixServer |Сессия запущена. 2015/08/11 20:15:26.243|Debug |FixServer |Сессия ''. Получено: 'FIX.4.49=9535=A49=quik56=StockSharpMD52=20150811-17:15:25.82734=198=0108=60141=Y553=quik554=quik10=180^' 2015/08/11 20:15:48.890|Debug |LuaServer |OnParam 2015/08/11 20:15:48.896|Debug |LuaServer |OnParam done 2015/08/11 20:15:48.896|Debug |LuaServer |OnParam 2015/08/11 20:15:48.896|Debug |LuaServer |OnParam done 2015/08/11 20:15:48.896|Debug |LuaServer |OnParam 2015/08/11 20:15:48.896|Debug |LuaServer |OnParam done 2015/08/11 20:15:48.896|Debug |LuaServer |OnParam 2015/08/11 20:15:48.896|Debug |LuaServer |OnParam done 2015/08/11 20:15:48.896|Debug |LuaServer |OnParam 2015/08/11 20:15:48.896|Debug |LuaServer |OnParam done 2015/08/11 20:15:48.902|Debug |LuaServer |OnParam 2015/08/11 20:15:48.902|Debug |LuaServer |OnParam done 2015/08/11 20:15:48.902|Debug |LuaServer |OnParam 2015/08/11 20:15:48.902|Debug |LuaServer |OnParam done 2015/08/11 20:15:48.902|Debug |LuaServer |OnParam 2015/08/11 20:15:48.902|Debug |LuaServer |OnParam done 2015/08/11 20:15:48.902|Debug |LuaServer |OnParam 2015/08/11 20:15:48.902|Debug |LuaServer |OnParam done 2015/08/11 20:15:48.902|Debug |LuaServer |OnParam 2015/08/11 20:15:48.902|Debug |LuaServer |OnParam done 2015/08/11 20:15:48.902|Debug |LuaServer |OnParam 2015/08/11 20:15:48.902|Debug |LuaServer |OnParam done
Дальше куча таких же строк и еще куча таких:
2015/08/11 20:15:51.031|Debug |LuaServer |OnAllTrade done 2015/08/11 20:15:51.031|Debug |LuaServer |OnAllTrade
quik_logs.txt:
0001/01/01 00:00:00.000| |QuikTrader|Connect 2015/08/11 20:15:25.888|Debug |FIX |To server: 8=FIX.4.49=9535=A49=quik56=StockSharpTS52=20150811-17:15:25.82734=198=0108=60141=Y553=quik554=quik10=202^ 2015/08/11 20:15:25.930|Debug |FIX |To server: 8=FIX.4.49=9535=A49=quik56=StockSharpMD52=20150811-17:15:25.82734=198=0108=60141=Y553=quik554=quik10=180^
А вот потом, через пару минут, я нажал в Sample дисконнект и появилась инфа, проясняющая, кое-что:
2015/08/11 20:17:39.000| |QuikTrader|Disconnect 2015/08/11 20:17:39.000|Warning|QuikTrader|Невозможно отключиться, так как подключение находится в состоянии Connecting. 2015/08/11 20:17:59.212| |QuikTrader|Connect 2015/08/11 20:17:59.212|Warning|QuikTrader|Невозможно подключиться, так как подключение находится в состоянии Connecting.
Т.е. почему-то подключение не завершилось и висит в стадии Connecting.
Что можно с этим сделать и куда копать?
В чем проблема в вашей конфигурации не знаю, но как классно что теперь заработало уведомление на почту. Сразу получаю письмо.
во последнем логе нет самого главного инфы про портфолио типа Debug |LuaServer |Out. Position,T(L)=0001.01.01 00:00:00.000,Sec=S#:SiU5@FORT................ Debug |LuaServer |Out. PositionChange,T(L)=0001.01.01 00:00:00.000,T(S)=2015.0 Debug |LuaServer |OnFutPos done Debug |LuaServer |OnFutLimit Debug |LuaServer |Out. Portfolio,T(L)=0001.01.01 00:00:00.000,Name=........................... Debug |LuaServer |Out. PortfolioChange,T(L)=0001.01.01 00:00:00.000,T(S)=2015. Debug |LuaServer |OnFutLimit done
поэтому у вас все висит в состоянии Connecting есть или нет инфа про портфолио?
эти штуки тоже есть, я просто не привел их. Но только они.
По какому условию трейдер в стейт Connected переходит?
по условию выполнения метода Connect() у вас с соединением все хорошо.
далее по sample идет подписка на событие wait.Portfolios() - ожидает события портфеля
у вас событие не происходит, по причинам описанными мною выше.
Ходим кругами вокруг одной простой проблемы.
Вы брокера меняли?, код клиента без малень. букв? инструмент у вас с маленькой буквой SiU5?
выполните 3 условия чего сложного?
Если событие Portfolios() произойдет , то в логе будет полный список инструментов по данному коду клиента.(если вы их не отрубили) причем событий Portfolios() может быть несколько, если есть несколько кодов клиента для торговли нужно выбирать требуемый
У меня боевой квик, а не демо. Брокера менять странно как-то, скидки на тарифах, отношения с личным манагером... Как я могу изменить код клиента? И как я могу изменить SiU5 с маленькой буквой, если он так на самом деле называется?
У меня ожидания от библиотеки, что она брокеро-букво-независимая. Развер это не нормальное ожидание?
И все-таки я подключился. Спасибо COBRA - он натолкнул меня на мысль про то, что странное что-то с подключением. И я начал эксперементировать... Отрыл стакан - события по апдейту стакана в логе шли крайне редко. Я остановил луа скрипт и снова запустил. После это события OnQoute стали в логе появляться с нормальной частотой. И трейдер приконнектился.
Затем, я трейдера отключил и остановил луа скрипт. А потом снова запустил.
Полетели эксепшены:
2015/08/12 23:05:58.576|Debug |LuaServer |OnQuote 2015/08/12 23:05:58.577|Error |LuaServer |OnQuoteF System.Runtime.InteropServices.SEHException (0x80004005): External component h as thrown an exception. at _CxxThrowException(Void* , s__ThrowInfo* ) at luabind.detail.throw_error_policy<stdbasic_string<char,stdchar_traits<char>,std::allocator<char> > >.handle_error(basic string<char,stdchar_traits<char>,stdallocator<char> >* , lua_State* interpreter, type_id* type_info) at luabind.detail.object_cast_aux<class stdbasic_string<char,struct stdchar_traits<char>,class stdallocator<char> >,class luabindadlindex_proxy<class luabindadlobject>,struct luabinddetailnull_type,struct luabinddetailthrow_error_polic y<class stdbasic_string<char,struct stdchar_traits<char>,class stdallocator<char> > >,class stdbasic_string<char,struct st dchar_traits<char>,class stdallocator<char> > >(basic_string<char,stdchar_traits<char>,stdallocator<char> >* , index_pro xyluabind::adl::object* value_wrapper, basic_string<char,stdchar_traits<char>,stdallocator<char> >* __unnamed001, null_typ e* __unnamed002, throw_error_policy<stdbasic_string<char,stdchar_traits<char>,stdallocator<char> > >* _unnamed003, basic string<char,stdchar_traits<char>,stdallocator<char> >* __unnamed004) at luabind.object_cast<class stdbasic_string<char,struct stdchar_traits<char>,class stdallocator<char> >,class luabinda dlindex_proxy<class luabindadlobject> >(basic_string<char,stdchar_traits<char>,stdallocator<char> >* , index_proxy<lua bindadlobject>* value_wrapper) at OnQuote(lua_State* ls, basic_string<char,stdchar_traits<char>,stdallocator<char> >* classCode, basic_string<char,std: :char_traits<char>,stdallocator<char> >* secCode)
В общем итог - явно есть баги с подключением через скрипт. Старт-стоп скрипта может вызвать неожиданные эффекты, то события ходят редко, то часто, то экспешены, .....
Надо искать проблемы в StockSharp.QuikLua.dll
P.S. от маленьких букв в торговом счете и SiU5 ничего, как выяснилось, не зависит.
У меня зависит. От маленьких букв.SiU5- у меня нет события security
Если вы эксперименты с реалом делаете, то это как-то не разумно.
Удалил скрипт. перезапустил квик. добавил скрипт и запустил его. трейдер не приконнектился.
остановил скрипт. запустил скрипт. трейдер приконнектился.
в общем что-то странное творится. но стоп/старт скрипта помогает.
Я думаю ваши игры с запуском-остановом скрипта связаны с маленькими буквами.
тоже считаю что-то с StockSharp.QuikLua.dll
Трудно что-ли сделать экперимент, все с заглавными буквами - и танцы с скриптом должны прекратиться. Тогда вы подтвердите мою версию БАГа можно тогда жаловаться разработчикам.
Если опишите мне у какого брокера нет этих танцев с буквами и как получить демо, я попробую
дистрибутив качните и зарегистрируйтесь, на почту сразу логин пароль придет http://quik.ru/user/client/quik/how-to-start/
или у этих тоже все нормально http://broker.ru/demo
Взял этот. Не помогает.
Уважаемый, Михаил!
У меня уверенность, что имеет место баг в передаче сообщения Connect трейдеру.
Я сделал так:
В консоли отображается:
OnConnect... after OnConnect...
Но НИКАКИХ сообщений, отличных от Time больше в трейдере не появляется. Я почитал код и в base.OnConnect() сообщение Connect уходит в BasketMessageAdapter. Каким образом он оттуда должен попасть в Тrader? IMHO баг именно в этом месте.
Как Вы это можете прокомментировать.
"Взял этот. Не помогает."
поподробнее... у меня то все работает. Значит чего то у вас Компом.
вообще VS2013redistrib установили??
Да, установил. Иначе бы у меня вообще ничего не заработало. Логи то я привел...
Я написал про сообщения и пытаюсь понять почему в трейдер Connect не приходит.
зархивируйте все и ваш пример с исходником и логин и пароль дайте демо. выложите куда нибудь я могу на своем компе запустить, может у меня тоже не заработает тогда я вам скажу в чем косяк.
https://yadi.sk/d/88oY4GiyiTKRW
Нет не так, нужны именно exe + сам quik(не дистрибутив а уже рабочая папка), исходники которые я буду компилить я сравню с вашим exe, может у вас при компиляции что-то.
Столкнулся сегодня с аналогичной проблемой, есть конект. Подключился, все заработало, закрыл трейдера, перекомпилирова(ничего не меняя в коде)! Запускаю, подключается, но все пусто: портфели, инструменты и тд. Не могу понять почему сначала все было норм, но стоило закрыть и запустить снова, как перестал работать адекватно.
Подобная проблема возникла с Квиком от Финама. В частности, не приходят изменения статусов заявок, хотя в самом терминале все есть. При этом в демо-версии Квика все работает.
deleted
deleted