Делаю новую алгоритмическую торговую систему (АТС) под Quik. Базовой в системе является достаточно сложная многопоточная C++ DLL, связывающаяся с Quik через Lua. Для разработки с самого начала использовалась VS 2015. Т.к. в настоящее время перешел на х64 Quik занялся перекомпиляций всего своего х86 софта под Quik на платформу х64.
Все бы ничего, но при больших рыночных потоках данных Quik начинал подтормаживать, а при подключении DDL, Quik подтормаживал еще сильнее и через некоторое время падал вместе с DLL. Переход на х64 существенно улучшил ситуацию, Однако эпизодические падения, значительно реже, но продолжались.
Надо сказать, что все эти многопоточности и были ранее введены в DLL для снижения нагрузки на Quik, чтобы не грузить поток событий терминала. Вся обработка событий заключалась лишь в том, чтобы преобразовать данные получаемые из Lua и отдать их соответствующему потоку для дальнейшей обработки.
В общем, о стабильной АТС приходилось только мечтать, и думать что дальше с этим делать.
У меня на компе давно без дела пылилась Visual Studio 2017. Требований к железу она предъявляет больше чем VS 2015, и я ее использовал считанные разы, скорее, чтобы посмотреть что в ней нового и отличия от VS 2015. Существенных отличий не заметил, и продолжал работать на старой VS 2015.
Вчера уже поздно вечером с чего-то решил открыть проект DLL в VS 2017. Ну, уж коли открыл, заодно и скомпилировал.
Сегодня подключил скомпилированную на VS 2017 DLL к Lua Quik. Уже несколько часов все, и Quik и DLL, стабильно штатно работают, ничего не подвисает. Просто все на редкость здорово. А всего-то надо было...)).
В общем, те кто работает под Windows 10 со старыми VS, переходите на VS 2017. Наверняка многие проблемы уйдут сами.
PS Вчера залез на Microsoft, оказывается они уже выпустили VS 2019. Ставить не стал, лучшее — враг хорошему.)
помню тоже этим занимался.
денех то хоть заработал?
На долю АТС даже на МОЕХ уже несколько лет назад приходилось около 60% биржевого оборота. Наверное некоторые из этих АТС неплохо зарабатывают. Как вы думаете?
Кроме того, алготрединг это не только АТС, но и всяческий вспомогательный софт обрабатывающий и анализирующий данные для ручной торговли.
Кстати, в опционах РТС стаканы набиты роботами.)
времена когда сидя на кухне с ноутом можно было нарубить бабла на скальпинге фьюча ртс давно прошли.
Именно потому мне не нужны какие-то сверхбыстрые каналы, а достаточно обычного Quik.
Ну, а сами понятия описываются-определяются математикой (статистикой той-же), все библиотеки есть — В Питоне, например. Не самим же в Lua писать библиотеки.))
А вот и результат моделирования одной из таких стратегий в Питон:
по Х — номер сделки, по У — накопленный профит.
Я эту картинку уже публиковал.
Таких моделей несколько, одну из них буду реализовывать.
Но какой-то порт к Питону из Quik был бы действительно неплох. Хотя, это через DLL все организуется, и плодить порты тоже ни к чему. В общем, палка о двух концах.
Но, если кратко, — находим стат устойчивые параметры графика, на них и играем. Сплошная мат статистика и ничего более.
Нету в мире стабильности.
Пока еще до конца не решил что именно буду туда впихивать — есть несколько вариантов. Питон, кстати, один из них.
Достаточно скачать, вставить в VS, скомпилировать, и можно работать, или использовать как шаблон.
В мануале ARQA QLua написано, что нам нужно как можно быстрее обработать событие и освободить поток событий и терминала.
Собственно, для этого мы и уходим в другой поток, чтобы обеспечить поступление следующих событий и нормальную работу терминала.
Lua сама по себе многопоточна. QLua даже предлагает потокобезопасные функции для работы с таблицами, которые их блокируют до окончания обработки, чтобы в параллельном потоке не испортить результат.
Но, если DLL при компиляции VS 2017 показала намного лучшие результаты, этого одного уже достаточно, чтобы перейти на нее, и забыть о VS 2015 и более старых.
DLL с утра и по сию пору работает и все выполняется, и никаких подвисаний Quik или задержек вообще нет. Визуально, по крайней мере.
На перерыв может упасть, т.к. из Квик после закрытия торгов и при открытии поступают некорректные рваные данные. Но с этим бороться пока не планирую, иначе как запуском после начала торгов и приостановкой перед завершением.
Зы. И точно, но даже не упало, но появилась ошибка -C:\Uralsib\QUIK\Lua\CalSpred2.lua:99: bad argument #-1 to 'GlassPrice' (table expected, got nil)" Некорректные данные по стакану то-ли в самой Lua, то-ли в DLL.
Зы2 Открытие торгов в 19:00 отработано штатно. Раньше открытие торгов для связки Quik-DLL заканчивалось фатальным исходом.)
P.S. Да, припоминаю, сам сталкивался с подобной ошибкой. Причина в том что под конец сессии приходят стаканы с пустыми бидами или асками. Собственно они имеют значение nil. Просто проверять надо и дальше у себя интерпретировать nil как пустой массив.
P.P.S. Вот именно чего не понял, так это разговор про версию Вижуал студии. Это же все равно, хоть на 6й компилируйте свою dll — должно будет работать. Единственное, на очень старой версии 64-битную dll собрать не получится.
Если один и тот же код при компиляции в VS 2015 работает нестабильно, а при компиляции в VS 2017 нестабильность исчезает, то это означает, что VS 2015 не оч подходит для проектов под Windows 10. И это уже факт.
Что касается связи с Питон, то да, наверное сокеты оптимальный и наиболее простой вариант, тем более, что в Питон есть уже готовая библиотека Socket.
Остается только написать С++ DLL c сокетами под Lua.
В quikluasharp связь с внешним миром реализована через MMF. Не в курсе, есть ли такая либа в Питон. Ну, и в случае MMF, там код проще, а возни больше.
Не знаю что такое MMF, но вот место где передается запрос из луа github.com/finsight/QUIKSharp/blob/master/src/QuikSharp/lua/qsutils.lua
ММF там где-то есть, оно?
С остальным согласен. Просто я так ине перешел на 10ку, на десктопе 8.1 крутится до сих пор...
ЗЫ Посмотрел ресурс. По вашей ссылке действительно сокеты. Ну уж больно много кода Lua. C DLL, имхо проще получается.
Я говорил о другом ресурсе с примерно аналогичным названием — там используются MMF.
Т.к. код Луа небольшой и все данные реал-тайм передаются в обработку ДЛЛ, то мне это вообще ни к чему. Решение о сделке принимается вне Луа. Кто конкретно будет исполнять, Луа или trans2quik — пока не решил.