Артем написал: QUIK в этом плане ничем не отличается от обычного программирования - изо всех модулей и файлов допустимо иметь ровно один бесконечный цикл, тот который в main(). Все остальные модули должны работать по вызову и должны возвращать управление обратно в main. В Lua можно имитировать многопоточность с помощью сопрограмм ("coroutine").
Антон, НО в квике же это реализовано!!! Мы же вручную можем запустить несколько файлов(скриптов), и они могут работать параллельно!! Я только это имею ввиду, мне не надо распараллеливать задачи по процессорам, только лишь обратиться к ответственному за запуск модулю квика из своего скрипта передав ему путь и имя файла со скриптом, который я хотел бы запустить, точно так же как я это делаю через таблицу доступных скриптов. И запускай хоть с main,хоть с бесконечным циклом. Вот в чем задача.
Владимир, ваш диалог в другой ветке: Вы пишите: "Денис, Ну, флаг в руки. а не поделитесь, ЗАЧЕМ нужны 20 скриптов? Просто для общего развития. " Вам отвечают : "Владимир, есть автозапуск, есть роботы под разные фьючерсы, есть скрипты для дополнительной аналитики и сигнализации особых случаев, есть вспомогательные скрипты для обфускаций и оптимизаций. Lua удобный инструмент, только удобного интерфейса не хватает. PS Всё пихать в один скрипт считаю ошибочным подходом. Но, если этого ВСЕГО мало, то можно )) PPS Просьба ветку не захламлять отвлеченными вопросами и советами. Давайте дождемся ответа техподдержки. Спасибо." Аналогичная просьба к Вам. Если есть что сказать по существу - скажите. А что у вас всего один скрипт, я так понял, уже весь форум знает.
s_mike@rambler.ru написал: Делайте все ваши скрипты всегда запущенными, которые крутят холостой цикл.
Но для этого их все изначально надо запустить вручную !!, а некоторые из них в ходе выполнения основного скрипта могут и вовсе не понадобиться ! При этом нет никакой динамичности. Смысл тот, что в ходе основного скрипта, который получает те или иные данные с запущенных им же скриптов ( в зависимости от поставленной задачи) он мог бы стартовать какие то дополнительные скрипты .Можно было бы динамично изменять алгоритм, да много еще чего. Т.е. в ходе выполения основного алгоритма, запускаются те или иные скрипты (блоки), по мере надобности. И это правильно Основной блок (скрипт) не загромаждается кодом, а по мере надобности запускаются уже давно написанные скрипты ( блоки). Ну как то так, может немного сумбурно. Но если бы была такая возможность было бы все удобно и красиво. Владимир "Я искренне не понимаю за каким хреном может понадобиться даже второй скрипт" Ну если Ваш робот торгует только по МА, то наверное тут за глаза хватит и одного скрипта((. Я не собираюсь писать 86 роботов. Но даже в одном роботе гораздо рациональнее различные задачи разбить на блоки. Масса преимуществ, которые даже не хочется перечислять, за их очевидностью.
TGP, Да, возможно это решает данную задачу. Но хотелось бы не внедрять новую ОС, а использовать имеющиеся возможности КВИКА, в Квике же это реализовано, из таблицы доступных скриптов мы можем вручную запустить сколь угодно много скриптов, которые работают параллельно без всяких конфликтов, даже, несколько экземпляров одного и того же скрипта. Остается понять как сделать это же из запущенного в ручную собственного скрипта. Я пытался искать по форуму решение этой задачи, но внятного ничего не нашел. Неужели задача не выполнима ? . Может быть как то возможно из своего скрипта инициировать работу Квиковского модуля, ответственного за запуски скриптов, и передавать ему в качестве параметра адрес скрипта, это же делается в таблице доступных скриптов. Корифеи программирования, отзовитесь.
Подскажите, кто знает, возможно ли запустить из работающего скрипта другие скрипты , чтобы они (другие скрипты) работали параллельно, через модули не получается, если в одном из скриптов есть бесконечный цикл, то другие модули не запускаются, пока этот модуль не закончит свою работу. Если скрипты запускаешь вручную, то их можно запустить, условно говоря, сколько угодно и они будут работать параллельно, возможно ли такое реализовать из основного(запущенного вручную) скрипта и если возможно небольшой практический пример.
Тем более, что реализация данного пожелания достаточно элементарна и не затрагивает ни коим образом ни функциональность Квика, ни его быстродействие и вообще не несет ни какой дополнительной нагрузки на систему .
Sergey Denegin 24.06.2016 12:19:33 "А идея проста, и то, что реализовано в других терминалах: при добавлении скрипта в список скриптов, сделать дополнительный параметр "автозапуск". Он и будет определять, запускать ли скрипты при входе Квика или нет." Ваш ответ (кстати именно Ваш) : Sergey Gorokhov 24.06.2016 12:41:27 "Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО"
С регламентом рассмотрения пожеланий - ознакомился. Судя по нему данное пожелание ни чему не противоречит. Так каков результат анализа ? Сообщите пожалуйста. В чем причина не реализации данного пожелания аж с 2016 года ?
Sergey Gorokhov написал: Юрий С, В текущей реализации такой возможности не предусмотрено.
Сергей, вы же обещали (не вы лично), еще в 2016 году реализовать такую возможность, если не трудно объясните пожалуйста в чем причина, и стоит ли надеяться на реализацию, или это как то противоречит концепции вашего развития?
Подскажите пожалуйста появилась ли возможность автоматического запуска скрипта при старте Квика, имеется ввиду не то что скрипт стартует при запуске квика, если он(скрипт) был запущен в предыдущем сеансе и тот сеанс был закрыт корректно, а то что я принудительно закрыл скрипт в предыдущем сеансе( например он отработал нужное мне время ) и квик был закрыт спустя некоторое время после этого т.е. на момент закрытия квика скрипт уже не работал. Теперь в следуещем сеансе хотелось бы чтобы скрипт стартовал автоматически при старте квика , что то подобное виндовской автозагрузки, Вроде бы 2016 году возникал такой вопрос, разработчики даже приняли его к рассмотрению, сдвинулось с места решение этого вопроса ?
Юрий С написал: К сожалению столкнулся сразу же со следующей проблемой : при незначительных изменениях в исходном тексте программы: сделал ошибку, исправил, заново скрипт не запустился, выдал ошибку: Unknown error. Possible unhandled exeption Вернулся к исходному тексту вашей программы. скрипт запускаться так же не желает ошибка та же : Unknown error. Possible unhandled exeption И только после перезагрузки Квика , скрипты запускаться стали. Почему так происходит ?
Понять, почему так получается, не удалось, впрочем, сильно не разбирался. Лечится только перезапуском Квика. Спрашивать у АРКИ об этой проблеме бесполезно, т.к. она возникает из-за сторонней библиотеки. Стоит сделать так: отладить скрипт, максимально исключив возможное появление подобной ошибки. Далее работает вполне стабильно, немного утомляя из-за однопоточности и sleep после iup.LoopStep() .
сделал ошибку, исправил, заново скрипт не запустился, выдал ошибку: Unknown error. Possible unhandled exeption Вернулся к исходному тексту вашей программы. скрипт запускаться так же не желает ошибка та же : Unknown error. Possible unhandled exeption И только после перезагрузки Квика , скрипты запускаться стали. Почему так происходит ?
документация очень хорошая, исчерпывающая, будет лежать в каталоге установленной LuaForWindows.
Документация действительно есть, но она к сожалению на английском, не подскажите, где то можно скачать документацию к iup на русском языке или ее не существует в природе ?
s_mike@rambler.ru написал: Устанавливайте package.cpath а не package.path
К сожалению, то же самое : -- Begin programm -------------------------------------------------------------------------------------- package.cpath = package.cpath .. ";C:/Program Files/Lua/5.1/lua/?.lua" package.preload["iuplua"] -------------------------------------------------------------------------------------- require("iuplua") require("iupluacontrols") local iup = iup
local function initializeDialog()
выдает ту же ошибку:
Syntax error while compiling D:\Program_Lua\Events_iup_1.lua: D:\Program_Lua\Events_iup_1.lua:6: '=' expected near 'require'
vgi написал: iup входит в стандартную LuaForWindows 5.1.4.0
Подскажите, плиз, где скачать LuaForWindows 5.1.4.0 и как установить его в квике, насколько я понял луа в квике встроенный , у меня установлен квик версии 7.18.1.20, но он на iup ругается не видит модули ?
Скачиваете, устанавливаете. В скрипте не забудьте добавить путь к LuaForWindows в package.path. Захочется добавить в окошки что-то поинтереснее - документация очень хорошая, исчерпывающая, будет лежать в каталоге установленной LuaForWindows.
-- Begin programm -------------------------------------------------------------------------------------- package.path = package.path .. ";C:/Program Files/Lua/5.1/lua/?.lua" package.preload["iuplua"] -------------------------------------------------------------------------------------- require("iuplua") require("iupluacontrols") local iup = iup
local function initializeDialog() .............................. выдает ошибку: Syntax error while compiling D:\Program_Lua\Events_iup_1.lua: D:\Program_Lua\Events_iup_1.lua:6: '=' expected near 'require'
vgi написал: iup входит в стандартную LuaForWindows 5.1.4.0
Подскажите, плиз, где скачать LuaForWindows 5.1.4.0 и как установить его в квике, насколько я понял луа в квике встроенный , у меня установлен квик версии 7.18.1.20, но он на iup ругается не видит модули ?
s_mike@rambler.ru написал: Обработчики событий пользовательских таблиц работают не в потоке main. В общем случае так делать не стоит.
Спасибо, попробую разобраться. Т.е. если я правильно понял средствами QLua невозможно вывести окно, как например в Java, в котором будут например две кнопки "Да" и "Нет" и проанализировать какая из них нажата ?
Ещё можно использовать обычные таблицы терминала совместно с событиями нажатия на кнопки мыши. Костыльный вариант, но иногда подходит.
Если можно хотя бы приблизительный пример, что именно подразумевается под "использовать обычные таблицы терминала совместно с событиями нажатия на кнопки мыши " какие именно "обычные таблицы" и можно ли использовать клавишу ввод , а не мышь ?
Подскажите, пожалуйста, как можно организовать диалог из программы Lua, например организовать запрос с выводом в окно на экран и ожидать ответа из соответствующего поля в этом же окне и в зависимости от ответа продолжить выполнение программы, вообще в Lua возможно организовать чтение вводимых данных с консоли ?
Николай, большое спасибо, что хоть Вы откликнулись, вот тот незамысловатый график который я хочу заставить двигаться, что бы уже дальше двигаться самому
Settings = { Name= "WMA_0_1", period=5} function Init () return 1 end -- ========================================================================= local price_move="price_5m" price_close=0
function OnCalculate(index) num_price = getNumCandles (price_move)
if index < num_price then price_close= getCandlesByIndex(price_move,0,index -1,1)[0].close end if index<=0 or price_close==0 or index>=num_price then return nil else pr= price_close return pr end
--message(' Метка- 2',2) -- ========================================================================== function main()
end -- ========================================================================== end
Подскажите пожалуйста , написал для пробы что то типа индикатора, в таблице индикаторов он виден, запускается, но отрабатывает один раз а двигаться так как например МА или price не двигается или может я неправильно выразился - не обновляется, прочертил один раз и все, может хотя бы схематично подскажите как его зациклить или что нужно сделать чтобы он обновлялся(двигался) ? Заранее спасибо
juriy163 S пишет: Может причина какая то в самой табл. лимитов ?
Боюсь что если бы это было действительно так, было бы гораздо больше обращений по данной проблеме. Проблема именно в Вашем коде, и пробел это только доказывает. Выложите копию куска кода в котором Вы работаете с функцией getDepoEx
--============================================================================== --function table.val_to_str ( v )
-------------------------------------------------------------------------------------------------------- --function table.key_to_str ( k )
------------------------------------------------------------------------------------------------------ -- Преобразование таблицы или массива в текстовое представление в соответствии с синтаксисом языка lua
--function table.tostring( tbl )
------------------------------------------------------------------------------------------------------ -- Сохранение таблицы или массива в файл
Не хотелось бы заграмаждать ветку , но если в кратце этот код выдает ошибку в основной программе, я его переписал в простейшую - только он и вывод полученной табл. в файл и там и там одна и та же ошибка выдает nil причем повторяю рядом выполняется getMoneyEx он выдает все верно ?
Подскажите пожалуйста не работает getDepoEx, выдает nil, хотя в табл. лимитов по бумагам, бумаги есть, правда почему то указаны в количестве акций, а не в количестве лотов. getMoneyEx - работает нормально все верно выдает. Попробовал getDepo и getMoney, в этом случае getMoney опять же выдает все верно, а getDepo в полях указывает нули (depo_current_balance=0, depo_limit_available=0 и т. д. ). Таблицы лимитов созданы и открыты. tbl_depo=getDepoEx ("фирма" , "код клиента" , "код бумаги" , " счет депо", 2) tbl_depo=getDepoEx ("NC0007900000" , "21455" , "GAZP" , " L01+00000F00", 2) Версия quik 6.17.0.58