<HELP> for explanation

StockSharp, lua и стаканы




Кто пользуется стокшарпом, поделитесь, занимались ли когда нибудь экспортом стакана через луа?
Как быстро он у вас работал, сталкивались ли с ограничением скорости обновления? Если да, то как решали проблему

У меня почему то события обновления срабатывают, только если разница во времени между изменения стакана составит > сек.
Т.е. допустим пришел коллбек, и тут же стакан снова поменялся. По идее, мне должен прийти новый коллбек, но нет, s# считает что изменений не было. Более того, если насильно запросить состояние стакана через GetMarketDepth, он присылает предыдущее состояние.

В итоге лютый треш, старый робот на экселе(дде), сплошной ходячий костыль, уделывает стокшарп.


Лучше напиши свою обертку на C# для Lua (qlua.dll) библиотеки, для этого есть либа сборщик которая умеет экспортировать функции
аналогично dll Си, но правда есть тут 1 минус твоя загруженная dll на C# не умеет выгружается из памяти, только перезапуск QUIK решает данную проблему, но и эту проблему можно решить если при помощи AppDomain (больше инфы читай в mdsn).

Вот набор ссылок для самостоятельно решения данной задачки:
1)(Проект для экспорта C# функций, внимание для компиляции обязательно переведи винду на ENG язык, иначе сборки не получится)
www.nuget.org/packages/UnmanagedExports
2)Описание LuaApi вызывать через DllImpot (P-Invoke)
www.lua.ru/doc/3.html
3)Описание AppDomain
msdn.microsoft.com/ru-ru/library/system.appdomain(v=vs.110).aspx
avatar

Сергей

Сергей, обертку луа в c# ребята уже написали (https://github.com/finsight/QUIKSharp)
Просто так исторически сложилось, что с проблемой я столкнулся уже написав 90% робота на стокшарпе :D поэтому искал решение в рамках этого проекта.
avatar

v3Rtex

v3Rtex, Посмотрел проект на (https://github.com/finsight/QUIKSharp). Это не совсем обёртка на C#, так как код сервера написан полностью на lua с передачей данных в формате данных JSON по socket, я же выше предлагал способ в котором само приложение(plugin без socket) написаны на C#, а вызов qlua функций и функций обратного осуществляется с помощью вызова LuaApi из lua5.1.dll (специальная библиотека которая синхронизированная с потоками QUIK для вызова функций из qlua.dll), данный способ даст большую производительность чем передача данный через DDE, так как данные будут обрабатываться в непосредственно в памяти процесса QUIK.
avatar

Сергей

Сергей, имхо, если уж заморачиваться, то лучше сразу писать для fix/twime
В случае с квиком это абсолютно неоправданно, разница в микросекундах меркнет по сравнению с секундой раундрипа заявки через цепочку серверов.

Если алгоритм выживает на таких низких скоростях, то лишние микросекунды ему погоды не сделают

avatar

v3Rtex

Сергей, так сделано у stocksharp. QUIK# подтверждаю, грузит процессор по время торгов на 100%. Квик из-за него подтормаживает.
avatar

Sergey

v3Rtex, какое решение в итоге нашли и в чем была причина?

Я с этой неделе тестирую связку TS LAB с QUIK. Запускал пример STOCKSHARP, задержек не наблюдал с QUIK. Стаканы RIU7 и SiU7.
avatar

Sergey

Sergey, как обычно, костыли — наше все.
Стакан через дде, все остальное через луа. Только так.

И странно, у меня даже в примерах частота обновления стакана дискретна и ~1сек.
Вы какую версию s# пробовали?
avatar

v3Rtex

v3Rtex, знакомство моё с S# только неделю, выбрал последнюю доступную на этот период. Стакан рисуется быстро, точно быстрее 1 раза в секунду. Возможно, смогу видео сделать, если потребуется. Ближе к вечеру.
avatar

Sergey

Sergey, да не нужно, итак понятно что проблема с моей стороны.
avatar

v3Rtex

v3Rtex, а на S# ты делал перед получением котировок RegisterMarketDepth?
Вообще, такие вопросы на форуме S# обсуждают во всю http://stocksharp.ru/community/
avatar

Vanger

Vanger, конечно делал. Я же говорю, у меня даже в примере обновляется не чаще раза в сек, да и то не всегда.

На их форуме вопрос утонул. А техподдержка на него отвечать не будет, т.к. у них принцип — баги своей системы они помогают устранить  только после покупки продукта.

avatar

v3Rtex

v3Rtex, после открытие счета у брокера.
avatar

Sergey

v3Rtex, так по-умолчанию https://forum.quik.ru/messages/forum11/message10193/topic1096/#message10193

а подвисает Квик скорее всего из-за вызова каких-либо функций на Lua. где-то у них там затык с синхронизацией при доступе к данным такой, что даже оконная функция диспетчера сообщений виндовых останавливается, квик моргает. у меня всегда чёрная тема включена, глючить начинает обычно в моменты сильной активности рынка, не успевает заполошный квик.
при этом ему однозначно хватает компа, т.к. это i7 и памяти 16 гиг. 
я на нём даже переодически оптимизатор прямо во время торгов гоняю.
на расслабленном компе удалось добиться примерно 5-15% загрузки CPU при непрерывном поллинге данных из квика. 
стакан я сам беру когда надо, а не когда его квик мне выдаст.
avatar

ПBМ

v3Rtex,
fix/twime plaza2 хостинг роботов на серверах ММВБ и тп — это другая история все эти фитчи для обычного рядового трейдера достаточно дорогое удовольствие, а изначальный вопрос был по QUIK S# и альтернативах передачи данных -).

По поводу S# я ранние пробовал разрабатывать с помощью библиотек S#, часть кода которая отвечает за получение и обработку данных из Lua меня не устроила(закрытый чёрный ящик).
Альтернатива в виде передачи данных по DDE не подошла из за  дополнительных телодвижений на настройку экспорта.
По этим причинам я сделал свой способ внедрения своей dll .Net (CLR) в процесс QUIK. В итоге я получил достаточно высокую производительность и возможности управления через GUI внутри 1 адресного пространства, скорость обновления стакана 1 к 1 в том же потоке обработки данных, что и у главного потока QUIK, на тормоза как в S# не жалуюсь).
Если нужна производительность конечно автомата и юзабильность в виде GUI, то тогда придется разбираться в тонкостях, а если же автомат пишется не под высоко нагрузочную задачу, то вполне достаточно использовать Qlua (Lua) в чистом виде без всяких S# и тп.

avatar

Сергей

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

v3Rtex


Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.

Залогиниться

Зарегистрироваться
Регистрация
UPDONW