Скриптом сохраняю историю всех фьючерсов в конце дня после 23:50. Данные заказываю через CreateDataSource. Хочу сэкономить время на ожидании ответа CreateDataSource и не заказывать напрасно инструменты, у которых за сутки не было сделок. У меня в таблице текущих торгов из 392 фьючерсов 118 не имели сделок за последние торговые сутки.
Т.е. желаемый алгоритм: 1. Получаем через getClassSecurities все фьючерсы. 2. Обходим в цикле каждый фьючерс. 3. С помощью функции getParamEx смотрим были ли сегодня сделки по фьючерсу. 3.1. Если сделки были, вызываем CreateDataSource. 3.2. Если сделок не было, возвращаемся в шаг 2.
Почти подходит параметр (столбец) из таблицы текущих торгов "Количество сделок за сегодня", который в таблице называется "Кол-во сделок", но, к сожалению, заметил, что он обнуляется после вечерней сессии.
Вопрос. Можно ли еще как-то посмотреть количество сделок внутри дня (с 00:00 по 23:59) по инструменту, без вызова CreateDataSource? Спасибо за помощь!
swerg написал: Для сборки вам не нужны никакие dllНужны .h файлы и .lib файлы, соответствующей используемой вами версии Lua (и версии, и платформы x86 или x64).Можно взять готовые файлы для сборки.Например здесь: https://github.com/swerg/simple-lua-c-dll/tree/master/contrib
Громаднейшее спасибо! Я заменил свою lua54.lib на вашу lua54.lib в папке с lua, который используется в luarocks, перекомпилировал Lua-cURL и все заработало! Я уже не надеялся)
Также больше спасибо за советы funduk и nikolz.
Готовый работающий Lua-cURLv3 можно скачать по этой ссылке. Скомпилировано под версию lua 5.4, поэтому в Квике в настройках нужно выбрать версию lua-5.4. Папки clibs, cURL и файл cURL.lua необходимо разархивировать в корень папки QUIK. Добавить папку Квика и папку clibs в Path и перезапустить Quik.
Пример кода, как использовать Lua-cURLv3:
Код
package.cpath = ";;C:\\Open_Broker_QUIK\\clibs\\?.dll;"
package.path = ";;C:\\Open_Broker_QUIK\\?.lua;"
local curl = require "cURL"
local cl = curl.easy_init()
function main()
cl:setopt_url("https://jsonplaceholder.typicode.com/posts/1")
cl:setopt(curl.OPT_SSL_VERIFYPEER, false)
cl:setopt_writefunction(function (res)
message(tostring(res))
end)
local res = cl:perform()
--message(tostring(cl:getinfo(curl.INFO_RESPONSE_CODE))) --код ответа
cl:close()
end
funduk, Спасибо вам огромное за кучу полезной информации! Обязательно попробую все сделать и напишу о результатах. Если получится, выложу сюда работающие либы.
nikolz написал: Зачем его с чем-то собирать, а не использовать для вызова os.execute()
Может, как костыль, сойдет. Но:
Скрытый текст
Как получить ответ из функции os.execute в переменные?
Как сделать, чтобы окошко командной строки не мигало при вызове os.execute?
Эффективно ли будет работать скрипт, если вызывать множество запросов за короткий период?
Из Википедии. cURL — программа командной строки. Libcurl — это библиотека API для передачи, которую разработчики могут встроить в свои программы; cURL действует как автономная обёртка для библиотеки libcurl.
Уважаемая служба поддержки! Пожалуйста, обратите внимание на мой вопрос. Я выложил скомпилированные библиотеки, которые работают на чистом lua, но не работают в QUIK, выложил дампы падения QUIK (раз, два). Проанализируйте, пожалуйста, хотя бы дампы, скажите в чем может быть дело?
Также объясните, пожалуйста, кто-нибудь куда присобачивать квиковскую lua54.dll, при компиляции в luarocks? Lua-cURLv3 в luarocks компилирую такой командой:
funduk написал: Всё, что в luarocks компилится для квика, должно линковаться с квиковской же lua54.dll
Я бы не сказал, что все. По крайней мере, когда я собирал аналогичный комплект под lua 5.1, то все это делалось под чистым lua и работало в терминале без проблем.
Я бы попробовал использовать квиковскую dll, но не понимаю куда ее подключать? На каком этапе?
funduk написал: Всё, что в luarocks компилится для квика, должно линковаться с квиковской же lua54.dll
Благодарю за ответ. Объясните, пожалуйста, подробнее, что нужно сделать. Я скомпилировал с помощью luarocks файл lcurl.dll (Lua-cURLv3). У него в зависимости указан сам cURL (libcurl.dll):
Как и в какой момент нужно добавлять в зависимость квиковскую lua54.dll?
Потребовался cURL в скриптах lua для Quik. Использую для этого Lua-cURLv3. Но уже несколько недель не могу добиться того, чтобы cURL заработал в Quik.
Сначала скомпилировал cURL с OpenSSL и zlib, получив все необходимые dll-библиотеки (libcurl.dll, libcrypto-3-x64.dll, libssl-3-x64.dll, zlibwapi.dll). Затем с помощью LuaRocks скомпилировал модуль Lua-cURLv3 (получил lcurl.dll и необходимые к нему lua-файлы для скрипта). Все скомпилировалось без ошибок. Проверил с помощью специальной программы Dependencies (с Github), что все зависимости в lcurl.dll подключены. Добавил пути к этим либам в Path - Quik их видит, нормально без ошибок подключает Lua-cURLv3 скриптом:
Скрытый текст
Код
package.cpath = ";;C:\\Open_Broker_QUIK\\clibs\\?.dll;"
package.path = ";;C:\\Open_Broker_QUIK\\?.lua;"
local curl = require "cURL"
local cl = curl.easy_init()
Но, если попробовать получить какие-то данные следующим скриптом, то QUIK Junior 9.1.3 выбрасывает неизвестное исключение "unrecognized exception", а QUIK Junior 11 и Open_Broker_QUIK 10.2.3.7 падают при запуске скрипта:
Скрытый текст
Код
package.cpath = ";;C:\\Open_Broker_QUIK\\clibs\\?.dll;"
package.path = ";;C:\\Open_Broker_QUIK\\?.lua;"
local curl = require "cURL"
local cl = curl.easy_init()
function main()
cl:setopt_url("https://jsonplaceholder.typicode.com/posts/1")
cl:setopt(curl.OPT_SSL_VERIFYPEER, false)
cl:setopt_writefunction(function (res)
PrintDbgStr(res)
end)
cl:perform()
message(tostring(cl:getinfo(curl.INFO_RESPONSE_CODE)))
cl:close()
end
Примечательно, что если закомментировать функцию cl:setopt_writefunction, то message(tostring(cl:getinfo(curl.INFO_RESPONSE_CODE))) вернет код ответа 200, т.е. запрос был выполнен успешно. Однако способа, как получить тело ответа без cl:setopt_writefunction я не нашел. Может вы знаете?
При этом Lua-cURLv3 нормально работает в обычном интерпретаторе lua. Если запустить следующий скрипт через cmd (C:\lua-scripts>lua test.lua), нужный результат будет выведен в консоль:
Скрытый текст
Код
package.cpath = ";;C:\\Open_Broker_QUIK\\clibs\\?.dll;"
package.path = ";;C:\\Open_Broker_QUIK\\?.lua;"
local curl = require "cURL"
local cl = curl.easy_init()
function main()
cl:setopt_url("https://jsonplaceholder.typicode.com/posts/1")
cl:setopt(curl.OPT_SSL_VERIFYPEER, false)
cl:setopt_writefunction(function (res)
print(res)
end)
cl:perform()
print(tostring(cl:getinfo(curl.INFO_RESPONSE_CODE)))
cl:close()
end
main()
В всех Quik'ах использую версию lua 5.4.1. На компьютере установлен lua 5.4.2 (он же используется в LuaRocks). Для теста использую версии Quik: QUIK-Junior 9.1.3, QUIK-Junior 11, Open_Broker_QUIK 10.2.3.7. Дамп падения QUIK-Junior 9.1.3 (он тоже, как и другие падет, если в скрипте убрать функцию main()) можно скачать здесь: первый и второй (почему-то создаются сразу два).
Скачать скомпилированные под x64 либы можно здесь. Папки clib и cURL и файл cURL.lua необходимо разархивировать в корень папки QUIK. Добавить папку квика и папку clib в Path и перезапустить Quik.
Прошу помощи! У меня не осталось предположений, в чем может быть проблема. Может я делаю что-то не так? Или дело в Quik? У кого есть опыт и знания поделитесь, пожалуйста.
P.S. У меня осталось только 1 предположение, что нужно было как-то использовать библиотеку lua54.dll из папки с QUIK. Но во время создания либы Lua-cURLv3 я ни разу не столкнулся с тем, чтобы она была где-то нужна.