Запуск скриптов lua

Страницы: 1
RSS
Запуск скриптов lua
 
Уточните, а как запускать скрипт что бы он постоянно при запуски квика автоматически сам запускался.

Просто загружаю скрипт вручную - окей, создаётся нужная таблица, и в ней соответственно выводится нужный расчёт. Выхожу из квика (закрываю полностью), запускаю заново и теперь вижу что скрипт не запускается автоматом, не создаёт какие либо таблички и не обрабатывает данные.

Как это исправить?
 
А перед выходом из квика скрипт останавливаете?
 
Часть скриптов стартует автоматом, но некоторые неприлично игнорируют автозапуск. КЛУА, в чём же дело?
 
Цитата
Роман пишет:
Просто загружаю скрипт вручную - окей, создаётся нужная таблица
SetTableNotificationCallback для таблицы используете?
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Вячеслав пишет:
Часть скриптов стартует автоматом, но некоторые неприлично игнорируют автозапуск. КЛУА, в чём же дело?
А если встать на нестартанувший скрипт (в диалоге выбора скриптов), что про него будет написано (внизу)?
 
Запустил 6 таблиц в QUIK 6.16.1.16 :
1) После перезагрузки, все таблицы работали.
2) После второй, не сработал 5й скрипт.
3) Все работали
4) 1й скрипт не работал.
с 6го по 11й перезапуски QUIK'а - все работали.
Несработавшие пару раз скрипты 1й и  5й содержали  SetTableNotificationCallback.
Узнаю фиременный почерк, это  нестабильность. )))
 
Цитата
Вячеслав пишет:
Несработавшие пару раз скрипты 1й и5й содержали SetTableNotificationCallback.
Код SetTableNotificationCallback в студию.
Надо делать так, как надо. А как не надо - делать не надо.
 
Код
function OnInit()
...
CreateWindow(t_delta)
SetTableNotificationCallback ( t_delta, callback_delta )
end

function main()
is_run=true while is_run do sleep(500)
...
end
end

function callback_delta(t_delta, msg, par1, par2)
if msg == QTABLE_CLOSE then OnStop() end
if msg == QTABLE_LBUTTONDOWN then
par11,par22 = par1,2
Highlight(t_delta, par11,par22, RGB(0,0,255), RGB(255,255,255), 700 )
end
SetSelectedRow(t_delta, par11)
if msg == QTABLE_CHAR then
if par11==1 then n=1000 elseif par11==2 or par11==8 then n=0.1 else n=1 end
if par2==113 or par2==233 or par2==201 or par2==81 then
SetCell( t_delta, par11, par22, tostring( GetCell( t_delta, par11, par22).image+n ))
end
if par2==97 or par2==244 or par2==212 or par2==65 then
SetCell( t_delta, par11, par22, tostring( GetCell( t_delta, par11, par22).image-n ))
end
end
end
Как то так. А оно вам точно надо?
 
Не совсем понял вашу мысль, если мы закрываем программу с работающим скриптом. То при запуски он должен автоматом запуститься и построить таблицу заново, по логике.
Или вы хотите сказать, что при каждом перезапуске квика нужно в ручную запускать скрипты - но это же ку-ку система получается.
 
Просто у меня при запуске скрипта прописано построение таблицы и он хоть как при загрузки скрипта должен построить.
 
Цитата
if msg == QTABLE_CLOSE then OnStop() end
Вот. При закрытии QUIK первым делом срабатывает колбек закрытия окна с таблицей. Поэтому часть скриптов успевают остановиться до закрытия приложения.
Надо делать так, как надо. А как не надо - делать не надо.
 
У меня нет не каких SetTableNotificationCallbackd в скрипте.

Таблицы создаются при запуски скрипта, с таблицами проблем нет, проблема в том что после перезагрузки сам скрипт не работает.
 
В ручном режиме (когда кнопку, запустить жмёшь) запускается нормально.
 
Цитата
Роман пишет:
Как это исправить?
Здравствуйте,
Если Вы его не останавливаете в каком-либо колбэке, то да он должен запуститься автоматом.
Если этого не происходит, проблема в коде и нам нужно на него взглянуть
 
Код не готов предоставлять, при каких условиях может происходить сбои запуска скрипта, за исключением ошибки в самом коде?
 
Цитата
Роман пишет:
за исключением ошибки в самом коде?
за исключением логики в коде, может влиять очистка данных в терминале, при запуске.
если при запуске терминала, Вы очищаете dat файлы, то их состояние не восстанавливается.
так состояние скриптов храниться в файле scripts.dat
 
Хорошо, посмотрю отпишу. Но мне кажется это все равно очень странно что при запуске скрипта он запускается без ошибок, а автоматически не запускает. Логично было бы если не запускались бы то все.
 
Цитата
if msg == QTABLE_CLOSE then OnStop() endВот.
При закрытии QUIK первым делом срабатывает колбек закрытия окна с таблицей. Поэтому часть скриптов успевают остановиться до закрытия приложения.
У меня все скрипты так закрывает. Или так.
Код
if IsWindowClosed(t_RM) then OnStop() end
И при перезапуске QUIK все скрипты работают. Только иногда "слетают".
 
Могу предположить, что при запуске в автомате Ваши скрипты обращаются к еще не полученным данным.
В результате получаете nil и аварийное завершение.
когда пускаете кнопкой все данные уже подгружены и такого не происходит.
 
Цитата
Вячеслав пишет:
У меня все скрипты так закрывает. Или так.
Код
 if IsWindowClosed(t_RM) then OnStop() end 
И при перезапуске QUIK все скрипты работают. Только иногда "слетают".

Состояние скрипта при следующем запуске зависит от того успел ли он становиться до сохранения его статуса (остановлен/запущен) в файл scripts.dat.
Надо делать так, как надо. А как не надо - делать не надо.
 
До сих пор нет надёжного решения обсуждаемой проблемы.
Предлагаю добавить событие QTABLE_CLOSETERMINAL для функции SetTableNotificationCallback, срабатывающее при закрытии таблицы в результате закрытия терминала.
Тогда можно будет не останавливать скрипты при закрытии терминала, если они должны автоматом стартовать.
OnClose не всегда спасает, т.к. между колбэком на закрытие таблицы и событием OnClose может пройти много времени.
Надо делать так, как надо. А как не надо - делать не надо.
 
А если OnClose вызывать, когда только дана команда главному окну терминала на закрытие (нажат крестик, Alt+F4 или "Система -> Выход") до QTABLE_CLOSE?
Тогда OnClose можно будет использовать, чтобы определить, что таблица закрыта не пользователем.
А в момент закрытия терминала по-прежнему будет OnStop с флагом 2.
Надо делать так, как надо. А как не надо - делать не надо.
 
Самый надёжный способ - не запускать ничего автоматом. Более того, когда я перезапускаю Квик (после какой-то страшной ошибки, когда он отвисает), мой скрипт стартует автоматом (поскольку не был остановлен перед выходом), и я его немедленно останавливаю, чтобы ничего не натворил. А потом спокойно запускаю, когда Квик обновит свои таблицы (на мой взгляд, он неприлично долго это делает), и в ТТТ что-то там начнёт мельтешить - торговля пошла.. Я бы вообще запретил автомат. Вы сами ищете приключений на свою задницу, господа. Это У ВАС "ку-ку система получается". Впрочем, деньги ваши - развлекайтесь...
 
Цитата
Владимир написал:
Самый надёжный способ - не запускать ничего автоматом. Более того, когда я перезапускаю Квик (после какой-то страшной ошибки, когда он отвисает), мой скрипт стартует автоматом (поскольку не был остановлен перед выходом), и я его немедленно останавливаю, чтобы ничего не натворил. А потом спокойно запускаю, когда Квик обновит свои таблицы (на мой взгляд, он неприлично долго это делает), и в ТТТ что-то там начнёт мельтешить - торговля пошла.. Я бы вообще запретил автомат. Вы сами ищете приключений на свою задницу, господа. Это У ВАС "ку-ку система получается". Впрочем, деньги ваши - развлекайтесь...
Если у Вас задача быть постоянно "привязанным" к терминалу, то можете действовать и так. Но многие запускают скрипт на VPS и смотрят, что происходит раз в день, а то и реже, когда скрипт пришлет какое-то оповещение.
Поэтому скрипт должен успешно стартовать вместе с терминалом, а также корректно работать если терминал не выключается вовсе.
 
Nikolay, Я не понимаю, что такое "быть постоянно привязанным к терминалу". Я купил ноут специально для торговли - все мои задачи 32-разрядные, и работаю я на двух других компах, а на этом, кроме двух Квиков для двух брокеров, ничего и нет. Ну, браузер ещё "на всякий пожарный". Утром я его включаю, запускаю свой скрипт на двух Квиках, вечером выключаю. Ну, иногда, под настроение, могу и сам поторговать, хотя практика показывает, что мне лучше не путаться у скрипта под ногами. И никаких оповещений скрипт мне не шлёт - он САМ торгует.

Он и работает корректно, если "терминал не выключается вовсе". Но смысл?
 
Цитата
Владимир написал:
Самый надёжный способ - не запускать ничего автоматом.
А как же максимальная автоматизация всего и вся?

Цитата
Владимир написал:
Я не понимаю, что такое "быть постоянно привязанным к терминалу"
Тут можно только показать что такое быть минимально привязанным к терминалу.

У себя настроил так.
Отдельный системник, на котором кроме квика и нескольких служебных утилит ничего нет.
При загрузке системы автологин пользователя, при логине пользователя автостарт квика, при старте квика автологин у брокера плюс смски при двухфакторной авторизации принимаю и подставляю тоже автоматом, а после коннекта к брокеру начинает работать торговый скрипт.
Обновления винды разрешены по умолчинию, а в период неактивности, что установлен на неторговое время, разрешил перезагружаться при необходимости.
При восстановлении питания после отключения электричества машина автоматом включается, хотя беспребойник держит.
Ну и каждую ночь бекап файлов настроек квика и скриптов.
Плюс всякая мелочевка о которой и упомянать не стоит.

Короче все до чего дотянулись руки автоматизировал.

Полтора года так работаю изредка только что-то допиливая, полет нормальный.

Если в скриптах ничего не меняю, то могу и по неделе в терминал не заглядывать, дольше просто не выдерживаю.
 
BlaZed,
Цитата
А как же максимальная автоматизация всего и вся?
Я же сказал, как: "Деньги ваши - развлекайтесь".
Цитата
У себя настроил так.
О, Господи! Ну, про поиск приключений я тоже написал. Мне не влом утром включить комп, Квик, авторизоваться, запустить скрипт. И никаких обновлений винды!
 
Цитата
Владимир написал:
Мне не влом утром включить комп, Квик, авторизоваться, запустить скрипт.
Просто не понимаю, зачем делать руками то, что можно легко автоматизировать?
Ну вот правда, в чем смысл это все делать руками?

Как-то давно я услышал фразу "Лень двигатель прогресса".
И много раз убеждался, что она верна.
 
BlaZed, Фраза-то верна - именно поэтому я поступаю так, как сказал. Мне лень ловить и исправлять глюки, которые НЕИЗБЕЖНО возникнут при такой "автоматизации". Что прекрасно доказывает сам факт существования этой ветки. И туевой хучи аналогичных.
 
Цитата
Старатель написал:
До сих пор нет надёжного решения обсуждаемой проблемы.

Цитата
Серж написал:
Состояние  скрипта при следующем запуске зависит от того успел ли он становиться  до сохранения его статуса (остановлен/запущен) в файл scripts.dat.

Так это и есть решение проблемы.
if msg == QTABLE_CLOSE then sleep(time)  OnStop() end
Нужно только, чтобы "time" было больше периода "бесконечного" цикла main, или времени возвращаемого OnStop.
Всё пройдет. Но это не точно.
Страницы: 1
Читают тему
Наверх