Дмитрий К
Дмитрий К личный блог
06 июня 2020, 16:35

Как я переехал на версию Quik 8.5 ничего не перекомпилируя и не переделывая в роботах. Лайфхак для нубов в программировании.

Из за того, что у меня накрылся на прошлой неделе арендуемый физический сервер, я решил его проапгрейдить  заодно установить в ВТБ новый квик.
В ВТБ  в частности постоянно прилетало сообщение, что надо устанавливать новый квик, что то там с нумерацией заявок на срочном рынке, а так же о том, что версия ЛУА, встроенного в квик, тоже проапгрейдится, и возможно скрипты работать не будут.

Все это пугало, так как программист из меня никакой, все что я умею, это нагуглить, как написать простые логические действия в Питоне или Луа.
В каждом втором посте было что то  про перекомпиляцию, а это для меня вообще не понятно, о чем речь.
Что значит перекомпиляция, если я в блокноте написал код, потом выбрал этот файл в квике, и запустил его нажав на треугольничек?

Ну ладно, деваться некуда, тем более, что когда с сайта ВТБ качаешь дистрибутив квика, там сейчас безвариантивно доступна только версия 8.5

Установил запустил. Скрипт, как и следовало ожидать, на первый взгляд, заработал сразу, без всяких «перекомпиляций». Потому что он написан в блокноте, а переводит в машинный код его (если я правильно понимаю, как все устроено) непосредственно встроенный в квике модуль ЛУА. 

Сам запускаемый скрипт Луа устроен так, что реагирует на события Квика, прошло событие, просто отправляет инфу о событии в скрипт Питона. А уже оттуда по алгоритму отправляются ордера через trans2quik.dll в Квик. Почему я всю логику не написал на Луа, это отдельная тема (я пробовал, но получилось коряво). 
И вот отправление в Питон я сделал через сокеты, это какая то библиотека, которую я в прошлом году нарыл в интернете - core.dll.

И когда произошло событие, вылезла ошибка. Луа скрипт событие не отправил, а просто ругнулся насчет того, что какая то проблема в core.dll. И тут до меня дошло, что по переделывать нужно вот такие ДЛЛ библиотеки.
На текущий момент для меня это не преодолимое препятствие, я не то что не знаю, как ее переделать, я не знаю как вообще такие библиотеки создаются. При этом, очевидно, что никто новые библиотеки еще не успел создать, или перекомпилировать.

Решение следующее, в квике есть (могут быть) файлы lua51.dll lua53.dll, lua5.1.dll, qlua.dll, может еще какие.
В новом квике были три последних файла, а в старом квике только два файла — первый и последний (при этом первый файл я ранее тоже вместе с библиотекой сокетов качал откуда то и тоже им подменил исходный в свое время).
Я просто тупо удалил все эти файлы в новом квике, и вместо них скопировал эти два файла со старого квика.

И все, вуаля, заработало как ни в чем ни бывало.
14 Комментариев
  • GOLD
    06 июня 2020, 20:39
    Удалить дэ-эль-эльки из живой программы — это сильный ход. Возможно, QUIK когда-нибудь вам отомстит за это… не удивляйтесь))
  • В Казино завезли новые рулеточные столы ,  опять нужно о новой привыкать к их работе, а это время и деньги.
  • Андрей Иванов
    06 июня 2020, 21:02


  • tashik
    06 июня 2020, 21:18
    Когда биржа перейдет на 19-значные номера, счастье кончится. Работает, пока не перешла. Lua 5.3 туда не зря досунули.
      • tashik
        06 июня 2020, 21:59
        Дмитрий К, видите ли, поменяется тип данных, и приходящее значение в номерах заявок и сделок не будет влезать в integer. Lua 5.1 не поддерживает long long. Поэтому они выпустили обновление и перевелись на Lua 5.3. Что и как делает Ваш скрипт — не знаю. Просто Вы запостили это как универсальный рецепт, а он не универсальный, и не факт, что вообще рецепт. Просто пока все по-старому, вот оно и работает со старой Lua. У кого роботы на Lua, и юзается OnOrder и подобное — им так делать не стоило бы
          • tashik
            06 июня 2020, 22:33
            Дмитрий К, да, Вы можете использовать строку. В каком формате будет квик отдавать данные, я не знаю. Lua не использую сейчас. DDE вполне хватает на получение данных, а trans2quik.dll на торговлю. У меня есть интеграция C# + trans2quik.dll, мне еще в декабре пришлось переехать на UInt64 для order_num, не лезло в UInt. В MySQL Decimal максимальная длина 65 символов, за это не переживайте.
  • Rustrade
    06 июня 2020, 23:45
    Подскажите мне простую для вас и сложную для меня штуку. Как я могу переустановить квик на 8.5 и при этом сохранить все настройки и рабочее место?)
    • Kot_Begemot
      07 июня 2020, 02:22
      Rustrade, 

      Все настройки таблиц рабочего места Quik хранятся в файле info.wnd.

      Информация по настройкам Система\Заказ данных\Поток обезличенных сделок храниться в файле info.ini.

      Информация по настройкам Система\Заказ данных\Поток котировок в файлах sec.dat, par.dat, classes.dat.


      • Rustrade
        07 июня 2020, 10:39
        Kot_Begemot, огромное спасибо.
  • Александр
    07 июня 2020, 13:19
    В следующей версии такой финт приведет к глюкам.
  • alexKa
    07 июня 2020, 16:09
    не исключено, что нвый Квик все ваши алгоритмы в lua отправляет куклу, который на их основе делает свои алгоритмы, чтобы бабло у народа отбирать

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн