Уточните, а как запускать скрипт что бы он постоянно при запуски квика автоматически сам запускался.
Просто загружаю скрипт вручную - окей, создаётся нужная таблица, и в ней соответственно выводится нужный расчёт. Выхожу из квика (закрываю полностью), запускаю заново и теперь вижу что скрипт не запускается автоматом, не создаёт какие либо таблички и не обрабатывает данные.
Запустил 6 таблиц в QUIK 6.16.1.16 : 1) После перезагрузки, все таблицы работали. 2) После второй, не сработал 5й скрипт. 3) Все работали 4) 1й скрипт не работал. с 6го по 11й перезапуски QUIK'а - все работали. Несработавшие пару раз скрипты 1й и 5й содержали 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
Не совсем понял вашу мысль, если мы закрываем программу с работающим скриптом. То при запуски он должен автоматом запуститься и построить таблицу заново, по логике. Или вы хотите сказать, что при каждом перезапуске квика нужно в ручную запускать скрипты - но это же ку-ку система получается.
Здравствуйте, Если Вы его не останавливаете в каком-либо колбэке, то да он должен запуститься автоматом. Если этого не происходит, проблема в коде и нам нужно на него взглянуть
за исключением логики в коде, может влиять очистка данных в терминале, при запуске. если при запуске терминала, Вы очищаете dat файлы, то их состояние не восстанавливается. так состояние скриптов храниться в файле scripts.dat
Хорошо, посмотрю отпишу. Но мне кажется это все равно очень странно что при запуске скрипта он запускается без ошибок, а автоматически не запускает. Логично было бы если не запускались бы то все.
if msg == QTABLE_CLOSE then OnStop() endВот. При закрытии QUIK первым делом срабатывает колбек закрытия окна с таблицей. Поэтому часть скриптов успевают остановиться до закрытия приложения.
У меня все скрипты так закрывает. Или так.
Код
if IsWindowClosed(t_RM) then OnStop() end
И при перезапуске QUIK все скрипты работают. Только иногда "слетают".
Могу предположить, что при запуске в автомате Ваши скрипты обращаются к еще не полученным данным. В результате получаете nil и аварийное завершение. когда пускаете кнопкой все данные уже подгружены и такого не происходит.
До сих пор нет надёжного решения обсуждаемой проблемы. Предлагаю добавить событие QTABLE_CLOSETERMINAL для функции SetTableNotificationCallback, срабатывающее при закрытии таблицы в результате закрытия терминала. Тогда можно будет не останавливать скрипты при закрытии терминала, если они должны автоматом стартовать. OnClose не всегда спасает, т.к. между колбэком на закрытие таблицы и событием OnClose может пройти много времени.
Надо делать так, как надо. А как не надо - делать не надо.
А если OnClose вызывать, когда только дана команда главному окну терминала на закрытие (нажат крестик, Alt+F4 или "Система -> Выход") до QTABLE_CLOSE? Тогда OnClose можно будет использовать, чтобы определить, что таблица закрыта не пользователем. А в момент закрытия терминала по-прежнему будет OnStop с флагом 2.
Надо делать так, как надо. А как не надо - делать не надо.
Самый надёжный способ - не запускать ничего автоматом. Более того, когда я перезапускаю Квик (после какой-то страшной ошибки, когда он отвисает), мой скрипт стартует автоматом (поскольку не был остановлен перед выходом), и я его немедленно останавливаю, чтобы ничего не натворил. А потом спокойно запускаю, когда Квик обновит свои таблицы (на мой взгляд, он неприлично долго это делает), и в ТТТ что-то там начнёт мельтешить - торговля пошла.. Я бы вообще запретил автомат. Вы сами ищете приключений на свою задницу, господа. Это У ВАС "ку-ку система получается". Впрочем, деньги ваши - развлекайтесь...
Владимир написал: Самый надёжный способ - не запускать ничего автоматом. Более того, когда я перезапускаю Квик (после какой-то страшной ошибки, когда он отвисает), мой скрипт стартует автоматом (поскольку не был остановлен перед выходом), и я его немедленно останавливаю, чтобы ничего не натворил. А потом спокойно запускаю, когда Квик обновит свои таблицы (на мой взгляд, он неприлично долго это делает), и в ТТТ что-то там начнёт мельтешить - торговля пошла.. Я бы вообще запретил автомат. Вы сами ищете приключений на свою задницу, господа. Это У ВАС "ку-ку система получается". Впрочем, деньги ваши - развлекайтесь...
Если у Вас задача быть постоянно "привязанным" к терминалу, то можете действовать и так. Но многие запускают скрипт на VPS и смотрят, что происходит раз в день, а то и реже, когда скрипт пришлет какое-то оповещение. Поэтому скрипт должен успешно стартовать вместе с терминалом, а также корректно работать если терминал не выключается вовсе.
Nikolay, Я не понимаю, что такое "быть постоянно привязанным к терминалу". Я купил ноут специально для торговли - все мои задачи 32-разрядные, и работаю я на двух других компах, а на этом, кроме двух Квиков для двух брокеров, ничего и нет. Ну, браузер ещё "на всякий пожарный". Утром я его включаю, запускаю свой скрипт на двух Квиках, вечером выключаю. Ну, иногда, под настроение, могу и сам поторговать, хотя практика показывает, что мне лучше не путаться у скрипта под ногами. И никаких оповещений скрипт мне не шлёт - он САМ торгует.
Он и работает корректно, если "терминал не выключается вовсе". Но смысл?
Владимир написал: Самый надёжный способ - не запускать ничего автоматом.
А как же максимальная автоматизация всего и вся?
Цитата
Владимир написал: Я не понимаю, что такое "быть постоянно привязанным к терминалу"
Тут можно только показать что такое быть минимально привязанным к терминалу.
У себя настроил так. Отдельный системник, на котором кроме квика и нескольких служебных утилит ничего нет. При загрузке системы автологин пользователя, при логине пользователя автостарт квика, при старте квика автологин у брокера плюс смски при двухфакторной авторизации принимаю и подставляю тоже автоматом, а после коннекта к брокеру начинает работать торговый скрипт. Обновления винды разрешены по умолчинию, а в период неактивности, что установлен на неторговое время, разрешил перезагружаться при необходимости. При восстановлении питания после отключения электричества машина автоматом включается, хотя беспребойник держит. Ну и каждую ночь бекап файлов настроек квика и скриптов. Плюс всякая мелочевка о которой и упомянать не стоит.
Короче все до чего дотянулись руки автоматизировал.
Полтора года так работаю изредка только что-то допиливая, полет нормальный.
Если в скриптах ничего не меняю, то могу и по неделе в терминал не заглядывать, дольше просто не выдерживаю.
О, Господи! Ну, про поиск приключений я тоже написал. Мне не влом утром включить комп, Квик, авторизоваться, запустить скрипт. И никаких обновлений винды!
BlaZed, Фраза-то верна - именно поэтому я поступаю так, как сказал. Мне лень ловить и исправлять глюки, которые НЕИЗБЕЖНО возникнут при такой "автоматизации". Что прекрасно доказывает сам факт существования этой ветки. И туевой хучи аналогичных.
Старатель написал: До сих пор нет надёжного решения обсуждаемой проблемы.
Цитата
Серж написал: Состояние скрипта при следующем запуске зависит от того успел ли он становиться до сохранения его статуса (остановлен/запущен) в файл scripts.dat.
Так это и есть решение проблемы. if msg == QTABLE_CLOSE then sleep(time) OnStop() end Нужно только, чтобы "time" было больше периода "бесконечного" цикла main, или времени возвращаемого OnStop.