1

Тема: Основы программирования LUA в QUIK (QLUA): обсуждение

Обсуждение материалов темы [url=https://quik2dde.ru/viewtopic.php?id=16]Основы программирования LUA в QUIK (QLUA)[/url] просьба пока делать здесь. Что-то не понятно, что-то не рассказано - пишите здесь, не стесняйтесь.

2

Re: Основы программирования LUA в QUIK (QLUA): обсуждение

Скачал с сайта новую версию QUIK (6.4) и установил ее. В доке написано "в меню программы появится дополнительный пункт Таблицы / LUA". Не появилось. Я что-то неправильно сделал или брокеру что-то необходимо поменять со своей стороны?

3

Re: Основы программирования LUA в QUIK (QLUA): обсуждение

На QUIK Junior ARQA - работает. Я там проверял все. У брокера - не работает, но брокер и терминал не обновил у себя. Написал письмо в поддержку, но пока молчат.
Судя по форуму ARQA Lua является плагином, а с ними всегда какие-то сложности были.
Надо на форуме разработчиков спросить как достучаться до этого LUA у реального брокера.

4

Re: Основы программирования LUA в QUIK (QLUA): обсуждение

Еще хотелось бы добавить в тему про взаимодействие с внешними библиотеками из lua, без файла lua5.1.dll в папке квика, не удается подключать внешние библиотеки к скрипту, причем нужна последняя версия библиотеки lua5.1.dll

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

5

Re: Основы программирования LUA в QUIK (QLUA): обсуждение

Про внешние библиотеки - да, тут отдельная история. Если это LUA-библиотека - то все они непременно используют lua5.1.dll, но это будет отдельный рассказ. ( [url=https://quik2dde.ru/viewtopic.php?id=18]Уже есть[/url] )

У меня, если честно, не хотят работать вообще отладчики. Подгружаются, виртуальные машины видят в info.exe, а на точках останова не тормозят совершенно. Кто-нибудь отладчики победил?

6

Re: Основы программирования LUA в QUIK (QLUA): обсуждение

Подскажите пожалуйста:
1 - как организовать отладку скрипта
2 - как осуществить расчеты различных индикаторов с использованием внешних библиотек

7

Re: Основы программирования LUA в QUIK (QLUA): обсуждение

Vasj,

С отладчиками лично у меня пока не получается ничего. Decoda не очень понятно на каких принципах вообще работает, но к QUIIK подключаться упорно не хочет.
На данный момент возлагаю надежды на LuaEdit2010, вроде там есть ощущение, что можно победить; пока, правда, тоже не удалось. Как будет о чем - отпишусь.

По поводу расчетов - ну рассчитать-то просто, по формулам smile
А вот нарисовать - отдельный вопрос. Готовых средств на данный момент в QUIK нет, стоит ли делать для этого внешнюю библиотеку - лично мне пока не понятно, т.к. нет ясности, когда ARQA встроит поддержку отрисовки индикаторов на LUA. Если не скоро - то сделать сейчас библиотеку разумно, иначе - зря потраченное время, жалко его. Если только разыщется подходящая готовая библиотека отрисовки графиков с масштабированем и прочими готовыми удобствами - тогда другое дело, но пока таковая не подвернулась. А делать самому - слишком много труда, а есть ли смысл - не ясно.

8

Re: Основы программирования LUA в QUIK (QLUA): обсуждение

Administrator,
Скажите, Вы почему Вы закрыли тему? У Вас так отлично получается. Сколько не искал, нигде не нашел хорошего учебника для начинающих, Ваше описание самое понятное. Если будет возможность добавьте еще хотя бы несколько примеров.

9

Re: Основы программирования LUA в QUIK (QLUA): обсуждение

Balug, спасибо за ваш отзыв.
Обязательно постараюсь.

Напишите, пожалуйста, поподробнее: какие именно примеры вам было бы интересно увидеть? а то у меня тогу с придумыванием интересных примеров, полезных.

PS
Закрыта та тема в том смысле, что будут в ней еще посты именно с учебным материалом. Ну и чтобы не путаться с комментариями - та тема закрыта, но эта всегда открата для любых комментариев и обсуждений! )

10

Re: Основы программирования LUA в QUIK (QLUA): обсуждение

Мне нравятся Ваше описание потому, что Вы даете  основы, и даете их детально и понятно, чего я нигде больше не нашел. Примеры, которые Вы разбираете, просты (не за умны), что важно для начинающих. Кроме того, Вы их достаточно подробно разбираете объясняя значение основных моментов и показывая к чему приведет запуск скрипта. Именно в таком ключе и хотелось бы увидеть продолжение.
Что касается примеров то тут одно пожелание – от простого к сложному и Вы наверняка лучше меня знаете с каких азов подойти к написанию программы. Мне же, как начинающему, было бы интересно увидеть примеры: создание простой таблицы; создание усложненной таблицы  (куда вошли бы данные из разных Квиковских таблиц, например из: «Таблицы по клиентским счетам», «Таблицы параметров опционов» и «Ограничения по клиентским счетам»); обращения к внешним файлам (чтение и запись); работа с дополнительными библиотеками (*.dll); простейший пример выставления и снятия заявки по условию. Если Вам будет удобнее, я могу более подробно описать каждый пример, но боюсь показаться слишком назойливым smile.

11

Re: Основы программирования LUA в QUIK (QLUA): обсуждение

Большое спасибо за этот вводный урок!
Наконец стало понятно какой поток основной, а какой - дополнительный.
А то я пытался написать в функции OnAllTrade команду sleep(1000) и удивлялся, почему вся система виснет настолько, что я даже не могу нажать кнопку "остановить" и приходится выключать весь Quik)
То есть, получается, что в функциях обратного вызова нужно делать как можно меньше "тормозящих" движений? перебросить цифры из одного места в другое, подсчитать что-нибудь - не больше? иначе система будет тормозить?

12

Re: Основы программирования LUA в QUIK (QLUA): обсуждение

Metallurg, и вам спасибо, что заглянули, спасибо за отзыв.

Metallurg пишет:

То есть, получается, что в функциях обратного вызова нужно делать как можно меньше "тормозящих" движений? перебросить цифры из одного места в другое, подсчитать что-нибудь - не больше? иначе система будет тормозить?

Именно так.

13

Re: Основы программирования LUA в QUIK (QLUA): обсуждение

Добрый день!
Комрады, подскажите, с чего начать!?

Есть справка с сайта квик, где есть пару примеров и описание встроенных функций.
Есть разрозненные скрипты, в т.ч. на сайте smile но синтаксис я далеко не весь понимаю.
Есть книги именно по программированию, но безотносительно квика...

С чего начать, как это систематизировать, чтобы банально писать (пока что) простейшие скрипты (например, на покупку/продажу от уровня цены)??

14 (2015-12-31 12:08:04 отредактировано GREEN_X5)

Re: Основы программирования LUA в QUIK (QLUA): обсуждение

Regis пишет:

Добрый день!
Комрады, подскажите, с чего начать!?

Есть справка с сайта квик, где есть пару примеров и описание встроенных функций.
Есть разрозненные скрипты, в т.ч. на сайте smile но синтаксис я далеко не весь понимаю.
Есть книги именно по программированию, но безотносительно квика...

С чего начать, как это систематизировать, чтобы банально писать (пока что) простейшие скрипты (например, на покупку/продажу от уровня цены)??

"С чего начать" - с самоучителей LUA, всех что найдете в сети, прочитать и понять написанное, создавая примеры.
"простейшие скрипты (например, на покупку/продажу от уровня цены)" - это как раз не простейшее, а станет эпогеем в вашем изучении языка, дальнейшее развитие пойдет как по маслу. Простейшее это

message("Hello Word")

вот с него и начните

15

Re: Основы программирования LUA в QUIK (QLUA): обсуждение

Regis пишет:

С чего начать, как это систематизировать, чтобы банально писать (пока что) простейшие скрипты (например, на покупку/продажу от уровня цены)??

Добрый.
Для начала сделайте тестовый скрипт, где проверите работу функций из описания qlua.chm, например:

# test.lua
local path = getScriptPath()
message (type ( path ).."\n"..path)

16

Re: Основы программирования LUA в QUIK (QLUA): обсуждение

Ок. Спасибо! мысль понятна)

p.s. апогей достиг быстро - sendTransaction))

17

Re: Основы программирования LUA в QUIK (QLUA): обсуждение

kalikazandr пишет:
Regis пишет:

С чего начать...??

Для начала сделайте тестовый скрипт, где проверите работу функций из описания qlua.chm, например:

# test.lua
local path = getScriptPath()
message (type ( path ).."\n"..path)

Тема была уже закрыта год назад, все все поняли и успокоились, но так случилось, что я занялся квиком только сейчас. Обьясните пожалуйста, каким образом можно протестировать любой код на Lua, хотя бы даже этот. Пробовал сам компилировать luadll по материалам в интернете. В результате dllка создалась без ошибок, но при попытке запустить рабочий код, программа функции из lua подчеркивала красным, говоря как бы, что не видит и не понимает эти функции. Тогда взял готовый код и готовые dll с вашего форума по ссылке  [url]https://quik2dde.ru/viewtopic.php?pid=25#p25[/url]  там было 2 папки в архиве

lua5.1.dll-cover.src

и

simple-lua-c-dll

. Первая папка я так понял, для создания dllки. Вторая папки пример программы на Lua с использованием dll. Запустил оба проекта в VS15 c++, оба проекта откомпилировались без ошибок. Но после добавления тестового кода в программу, VS15 снова подчеркивает код тест красным, что не понимает тестовые функции, вот я сюда его вставил

extern "C" LUALIB_API int luaopen_luacdll(lua_State *L) {
    
    luaL_openlib(L, "luacdll", ls_lib, 0);
    return 0;
}
main()
{//# test.lua
    local path = getScriptPath();
    message(type(path).."\n"..path);
}

Может вставил не туда, а может это и не тестовый вовсе код. Прошу прощения если что то спрашиваю не совсем правильно, это мое первое письмо на этом форуме и в lua в том числе. PS с++ немного знаю, VS c# знаю немного лучше, но для lua он вроде не очень подходит, поэтому пытаюсь писать на VS c++. Помогите пожалуйста понять, каким образом и куда надо вставить код lua что бы он работал в VS?

18

Re: Основы программирования LUA в QUIK (QLUA): обсуждение

Добрый день!
Просьба привести пример, как это скрипт переделать так что бы он выполнялся не в потоке quik, а в потоке где выполняется функция main
спасибо

19 (2022-11-01 07:32:14 отредактировано swerg)

Re: Основы программирования LUA в QUIK (QLUA): обсуждение

osr
"Этот" - какой именно скрипт? просьба чуть подробнее написать ваш вопрос.

20

Re: Основы программирования LUA в QUIK (QLUA): обсуждение

osr пишет:

Просьба привести пример, как это скрипт переделать так что бы он выполнялся не в потоке quik, а в потоке где выполняется функция main

а функция main(), простите, это не поток quik? smile если серьезно, то нет простого способа запустить lua скрипт в потоке main. можно синхронизироваться с потоком main() при желании. в чем состоит ваша задача?

21 (2022-11-14 08:15:18 отредактировано osr)

Re: Основы программирования LUA в QUIK (QLUA): обсуждение

swerg пишет:

osr
"Этот" - какой именно скрипт? просьба чуть подробнее написать ваш вопрос.

Добрый день, swerg!

На сколько я понял тут обсуждается статья [url]https://quik2dde.ru/viewtopic.php?id=16[/url]
в которой есть скрипт:

is_run = true

function main()
    while is_run do
        sleep(50)
    end;
end

function OnStop()
    is_run = false
end

function OnTrade(trade_data)
    qty = trade_data.qty
    sum = trade_data.value
    n = getNumberOf("trades")
    for i=0, n-1 do
        t = getItem("trades", i)
        sum = sum + t.value
        qty = qty + t.qty
    end
    message("Total: qty=" .. tostring(qty) .. " sum=" .. tostring(sum), 1)
end

Раскрою свой вопрос.
В документации написано, что main выполняется в отдельном потоке это хорошо поскольку не сказывается на выполнения терминала !
Но функции обратного вызова такие как: OnTrade(), OnAllTrade выполняются в потоке самого терминала.
от сюда и вытекает вопрос, как сделать так что бы выполнения функций обратного вызова были минимальны, а все вычисления шли в потоке main?

22 (2022-11-14 08:17:05 отредактировано osr)

Re: Основы программирования LUA в QUIK (QLUA): обсуждение

toxa пишет:
osr пишет:

Просьба привести пример, как это скрипт переделать так что бы он выполнялся не в потоке quik, а в потоке где выполняется функция main

а функция main(), простите, это не поток quik? smile если серьезно, то нет простого способа запустить lua скрипт в потоке main. можно синхронизироваться с потоком main() при желании. в чем состоит ваша задача?

Добрый день, toxa!

Судя по документации поток в котором вызывается main это отельный поток от потока, где выполняется сам quik

Моя задача обрабатывать сделки которые приходят с биржи  и  делать вывод о покупке или продаже smile
но,  я хочу это делать не в основном потоке quik, а в отдельном, который бы не тормозил сам терминал.

23

Re: Основы программирования LUA в QUIK (QLUA): обсуждение

Можно заводить очереди для объектов сделок из OnTrade и т.д. (т.е. складывать в таблицы), а в main() разгребать эти таблицы постоянно в цикле и при появлении в них новой записи (т..е при наличии данных в таблице) обрабатывать в main(), а потом удалять.
Но там много подводных камней в части синхронизации...

По идее для корректной синхронизации должны помочь функции sconcat / sremove / sinsert / ssort в документации QLUA.chm
Примерно под этот сценарий они и делались, как я понимаю.

24 (2022-11-14 21:06:56 отредактировано toxa)

Re: Основы программирования LUA в QUIK (QLUA): обсуждение

osr пишет:

Моя задача обрабатывать сделки которые приходят с биржи  и  делать вывод о покупке или продаже smile
но,  я хочу это делать не в основном потоке quik, а в отдельном, который бы не тормозил сам терминал.

строго говоря, колбэки вызываются не в основном потоке quik, транспорт крутится в отдельном треде. чтобы не блокировать получение данных, лучше их передавать main тред скрипта, либо в другие скрипты либо вообще в отдельное приложение. но, как правильно заметил swerg, нужно понимать, как работает lua в части совместного доступа к объектам из разных тредов. можете воспользоваться моей либой lua_share, которая для этого предназначена и решает большую часть проблем.

25

Re: Основы программирования LUA в QUIK (QLUA): обсуждение

ох... Ребята я так надеялся, что есть уже готовый скрипт.
Ведь с этим сталкивается каждый кто хочет обработать события.
придется самому теперь разбираться с потоками и синхронизацией между ними.
Ребята спасибо за направления буду капать!
Toxa, твоя библиотека я так понимаю это вот она?
[url]https://quikluacsharp.ru/stati-uchastnikov/biblioteka-lua_share-obmen-dannymi-mezhdu-skriptami-i-prilozheniyami/[/url]