Уточните, а как запускать скрипт что бы он постоянно при запуски квика автоматически сам запускался.
Просто загружаю скрипт вручную - окей, создаётся нужная таблица, и в ней соответственно выводится нужный расчёт. Выхожу из квика (закрываю полностью), запускаю заново и теперь вижу что скрипт не запускается автоматом, не создаёт какие либо таблички и не обрабатывает данные.
Как это исправить?
Пользователь
Сообщений: Регистрация: 31.01.2015
03.05.2015 13:27:58
А перед выходом из квика скрипт останавливаете?
Пользователь
Сообщений: Регистрация: 31.01.2015
03.05.2015 13:57:01
Часть скриптов стартует автоматом, но некоторые неприлично игнорируют автозапуск. КЛУА, в чём же дело?
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
03.05.2015 18:30:36
Цитата
Роман пишет: Просто загружаю скрипт вручную - окей, создаётся нужная таблица
SetTableNotificationCallback для таблицы используете?
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 02.02.2015
миру мир!
03.05.2015 19:42:57
Цитата
Вячеслав пишет: Часть скриптов стартует автоматом, но некоторые неприлично игнорируют автозапуск. КЛУА, в чём же дело?
А если встать на нестартанувший скрипт (в диалоге выбора скриптов), что про него будет написано (внизу)?
Пользователь
Сообщений: Регистрация: 31.01.2015
03.05.2015 22:28:18
Запустил 6 таблиц в QUIK 6.16.1.16 : 1) После перезагрузки, все таблицы работали. 2) После второй, не сработал 5й скрипт. 3) Все работали 4) 1й скрипт не работал. с 6го по 11й перезапуски QUIK'а - все работали. Несработавшие пару раз скрипты 1й и 5й содержали SetTableNotificationCallback. Узнаю фиременный почерк, это нестабильность. )))
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
03.05.2015 22:53:25
Цитата
Вячеслав пишет: Несработавшие пару раз скрипты 1й и5й содержали SetTableNotificationCallback.
Код SetTableNotificationCallback в студию.
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 31.01.2015
03.05.2015 23:54:35
Код
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
Как то так. А оно вам точно надо?
Пользователь
Сообщений: Регистрация: 09.02.2015
04.05.2015 03:28:50
Не совсем понял вашу мысль, если мы закрываем программу с работающим скриптом. То при запуски он должен автоматом запуститься и построить таблицу заново, по логике. Или вы хотите сказать, что при каждом перезапуске квика нужно в ручную запускать скрипты - но это же ку-ку система получается.
Пользователь
Сообщений: Регистрация: 09.02.2015
04.05.2015 03:31:38
Просто у меня при запуске скрипта прописано построение таблицы и он хоть как при загрузки скрипта должен построить.
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
04.05.2015 09:01:03
Цитата
if msg == QTABLE_CLOSE then OnStop() end
Вот. При закрытии QUIK первым делом срабатывает колбек закрытия окна с таблицей. Поэтому часть скриптов успевают остановиться до закрытия приложения.
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 09.02.2015
05.05.2015 04:19:35
У меня нет не каких SetTableNotificationCallbackd в скрипте.
Таблицы создаются при запуски скрипта, с таблицами проблем нет, проблема в том что после перезагрузки сам скрипт не работает.
Пользователь
Сообщений: Регистрация: 09.02.2015
05.05.2015 04:24:44
В ручном режиме (когда кнопку, запустить жмёшь) запускается нормально.
Здравствуйте, Если Вы его не останавливаете в каком-либо колбэке, то да он должен запуститься автоматом. Если этого не происходит, проблема в коде и нам нужно на него взглянуть
Пользователь
Сообщений: Регистрация: 09.02.2015
05.05.2015 14:04:14
Код не готов предоставлять, при каких условиях может происходить сбои запуска скрипта, за исключением ошибки в самом коде?
за исключением логики в коде, может влиять очистка данных в терминале, при запуске. если при запуске терминала, Вы очищаете dat файлы, то их состояние не восстанавливается. так состояние скриптов храниться в файле scripts.dat
Пользователь
Сообщений: Регистрация: 09.02.2015
05.05.2015 18:22:10
Хорошо, посмотрю отпишу. Но мне кажется это все равно очень странно что при запуске скрипта он запускается без ошибок, а автоматически не запускает. Логично было бы если не запускались бы то все.
Пользователь
Сообщений: Регистрация: 31.01.2015
06.05.2015 01:33:11
Цитата
if msg == QTABLE_CLOSE then OnStop() endВот. При закрытии QUIK первым делом срабатывает колбек закрытия окна с таблицей. Поэтому часть скриптов успевают остановиться до закрытия приложения.
У меня все скрипты так закрывает. Или так.
Код
if IsWindowClosed(t_RM) then OnStop() end
И при перезапуске QUIK все скрипты работают. Только иногда "слетают".
Пользователь
Сообщений: Регистрация: 30.01.2015
07.05.2015 09:09:45
Могу предположить, что при запуске в автомате Ваши скрипты обращаются к еще не полученным данным. В результате получаете nil и аварийное завершение. когда пускаете кнопкой все данные уже подгружены и такого не происходит.
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
07.05.2015 10:29:13
Цитата
Вячеслав пишет: У меня все скрипты так закрывает. Или так.
Код
if IsWindowClosed(t_RM) then OnStop() end
И при перезапуске QUIK все скрипты работают. Только иногда "слетают".
Состояние скрипта при следующем запуске зависит от того успел ли он становиться до сохранения его статуса (остановлен/запущен) в файл scripts.dat.
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
07.12.2018 21:45:23
До сих пор нет надёжного решения обсуждаемой проблемы. Предлагаю добавить событие QTABLE_CLOSETERMINAL для функции SetTableNotificationCallback, срабатывающее при закрытии таблицы в результате закрытия терминала. Тогда можно будет не останавливать скрипты при закрытии терминала, если они должны автоматом стартовать. OnClose не всегда спасает, т.к. между колбэком на закрытие таблицы и событием OnClose может пройти много времени.
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
07.08.2021 11:40:59
А если OnClose вызывать, когда только дана команда главному окну терминала на закрытие (нажат крестик, Alt+F4 или "Система -> Выход") до QTABLE_CLOSE? Тогда OnClose можно будет использовать, чтобы определить, что таблица закрыта не пользователем. А в момент закрытия терминала по-прежнему будет OnStop с флагом 2.
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 25.09.2020
07.08.2021 11:57:07
Самый надёжный способ - не запускать ничего автоматом. Более того, когда я перезапускаю Квик (после какой-то страшной ошибки, когда он отвисает), мой скрипт стартует автоматом (поскольку не был остановлен перед выходом), и я его немедленно останавливаю, чтобы ничего не натворил. А потом спокойно запускаю, когда Квик обновит свои таблицы (на мой взгляд, он неприлично долго это делает), и в ТТТ что-то там начнёт мельтешить - торговля пошла.. Я бы вообще запретил автомат. Вы сами ищете приключений на свою задницу, господа. Это У ВАС "ку-ку система получается". Впрочем, деньги ваши - развлекайтесь...
Пользователь
Сообщений: Регистрация: 27.01.2017
07.08.2021 13:05:58
Цитата
Владимир написал: Самый надёжный способ - не запускать ничего автоматом. Более того, когда я перезапускаю Квик (после какой-то страшной ошибки, когда он отвисает), мой скрипт стартует автоматом (поскольку не был остановлен перед выходом), и я его немедленно останавливаю, чтобы ничего не натворил. А потом спокойно запускаю, когда Квик обновит свои таблицы (на мой взгляд, он неприлично долго это делает), и в ТТТ что-то там начнёт мельтешить - торговля пошла.. Я бы вообще запретил автомат. Вы сами ищете приключений на свою задницу, господа. Это У ВАС "ку-ку система получается". Впрочем, деньги ваши - развлекайтесь...
Если у Вас задача быть постоянно "привязанным" к терминалу, то можете действовать и так. Но многие запускают скрипт на VPS и смотрят, что происходит раз в день, а то и реже, когда скрипт пришлет какое-то оповещение. Поэтому скрипт должен успешно стартовать вместе с терминалом, а также корректно работать если терминал не выключается вовсе.
Пользователь
Сообщений: Регистрация: 25.09.2020
07.08.2021 15:49:25
Nikolay, Я не понимаю, что такое "быть постоянно привязанным к терминалу". Я купил ноут специально для торговли - все мои задачи 32-разрядные, и работаю я на двух других компах, а на этом, кроме двух Квиков для двух брокеров, ничего и нет. Ну, браузер ещё "на всякий пожарный". Утром я его включаю, запускаю свой скрипт на двух Квиках, вечером выключаю. Ну, иногда, под настроение, могу и сам поторговать, хотя практика показывает, что мне лучше не путаться у скрипта под ногами. И никаких оповещений скрипт мне не шлёт - он САМ торгует.
Он и работает корректно, если "терминал не выключается вовсе". Но смысл?
Пользователь
Сообщений: Регистрация: 20.12.2020
07.08.2021 21:04:35
Цитата
Владимир написал: Самый надёжный способ - не запускать ничего автоматом.
А как же максимальная автоматизация всего и вся?
Цитата
Владимир написал: Я не понимаю, что такое "быть постоянно привязанным к терминалу"
Тут можно только показать что такое быть минимально привязанным к терминалу.
У себя настроил так. Отдельный системник, на котором кроме квика и нескольких служебных утилит ничего нет. При загрузке системы автологин пользователя, при логине пользователя автостарт квика, при старте квика автологин у брокера плюс смски при двухфакторной авторизации принимаю и подставляю тоже автоматом, а после коннекта к брокеру начинает работать торговый скрипт. Обновления винды разрешены по умолчинию, а в период неактивности, что установлен на неторговое время, разрешил перезагружаться при необходимости. При восстановлении питания после отключения электричества машина автоматом включается, хотя беспребойник держит. Ну и каждую ночь бекап файлов настроек квика и скриптов. Плюс всякая мелочевка о которой и упомянать не стоит.
Короче все до чего дотянулись руки автоматизировал.
Полтора года так работаю изредка только что-то допиливая, полет нормальный.
Если в скриптах ничего не меняю, то могу и по неделе в терминал не заглядывать, дольше просто не выдерживаю.
О, Господи! Ну, про поиск приключений я тоже написал. Мне не влом утром включить комп, Квик, авторизоваться, запустить скрипт. И никаких обновлений винды!
Пользователь
Сообщений: Регистрация: 20.12.2020
08.08.2021 09:49:56
Цитата
Владимир написал: Мне не влом утром включить комп, Квик, авторизоваться, запустить скрипт.
Просто не понимаю, зачем делать руками то, что можно легко автоматизировать? Ну вот правда, в чем смысл это все делать руками?
Как-то давно я услышал фразу "Лень двигатель прогресса". И много раз убеждался, что она верна.
Пользователь
Сообщений: Регистрация: 25.09.2020
08.08.2021 10:04:57
BlaZed, Фраза-то верна - именно поэтому я поступаю так, как сказал. Мне лень ловить и исправлять глюки, которые НЕИЗБЕЖНО возникнут при такой "автоматизации". Что прекрасно доказывает сам факт существования этой ветки. И туевой хучи аналогичных.
Пользователь
Сообщений: Регистрация: 22.02.2023
26.08.2023 12:55:36
Цитата
Старатель написал: До сих пор нет надёжного решения обсуждаемой проблемы.
Цитата
Серж написал: Состояние скрипта при следующем запуске зависит от того успел ли он становиться до сохранения его статуса (остановлен/запущен) в файл scripts.dat.
Так это и есть решение проблемы. if msg == QTABLE_CLOSE then sleep(time) OnStop() end Нужно только, чтобы "time" было больше периода "бесконечного" цикла main, или времени возвращаемого OnStop.