
isConnected() - возвращает 1, если QUIK подключен к серверу и 0, если не подключен
getScriptPath() - возвращает путь, по которому находится скрипт, без последнего обратного слэша ("\"), например, "C:\Program Files (x86)\Info\MyLua"
getInfoParam() - возвращает значение параметра из окна:"Связь" -> "Информационное окно..."
Возможные параметры:
"VERSION" - версия программы
"TRADEDATE" - дата торгов
"SERVERTIME" - время сервера
"LASTRECORDTIME" - время последней, полученной с сервера, записи
"NUMRECORDS" - количество полученных записей
"LASTRECORD" - последняя запись
"LATERECORD" - отставшая запись
"CONNECTION" - соединение ("установлено"/"не установлено")
"IPADDRESS" - IP-адрес сервера
"IPPORT" - порт сервера
"IPCOMMENT" - описание соединения с сервером
"SERVER" - описание сервера
"SESSIONID" - идентификатор сессии
"USER" - пользователь
"USERID" - ID пользователя
"ORG" - организация
"MEMORY" - занято памяти
"LOCALTIME" - текущее время
"CONNECTIONTIME" - время на связи
"MESSAGESSENT" - передано сообщений
"ALLSENT" - передано всего байт
"BYTESSENT" - передано полезных байт
"BYTESPERSECSENT" - передано за секунду
"MESSAGESRECV" - принято сообщений
"BYTESRECV" - принято полезных байт
"ALLRECV" - принято всего байт
"BYTESPERSECRECV" - принято за секунду
"AVGSENT" - средняя скорость передачи
"AVGRECV" - средняя скорость приема
"LASTPINGTIME" - время последней проверки связи
"LASTPINGDURATION" - задержка данных при обмене с сервером
"AVGPINGDURATION" - средняя задержка данных
"MAXPINGTIME" - время максимальной задержки
"MAXPINGDURATION" - максимальная задержка данных
Пример:
message(getInfoParam("CONNECTION"),1); --Если терминал подключен к серверу, выведет сообщение с текстом "установлено" |
message() - выводит сообщение в терминале QUIK, если все в порядке, возвращает 1, иначе nil, может принимать 2 параметра:
"Текст сообщения" (string)
Иконка(необязательный) (number) - 1-

(по-умолчанию), 2-

, 3-

Максимальная длина сообщений, передаваемых в функцию message(), составляет 900 символов
sleep() - пауза в скрипте, принимает время паузы в миллисекундах, например sleep(3000); - остановит выполнение скрипта на 3 секунды
getWorkingFolder() - возвращает путь, по которому находится файл info.exe без последнего "\", например, getWorkingFolder(); - вернет "C:\Program Files (x86)\Info"
PrintDbgStr() - служит для вывода отладочной информации, принимает один параметр (string) - сообщение для вывода
Использование PrintDbgStr() совместно с Visual Studio:
Добавляется в скрипт, там, где нужно вывести отладочную информацию:
IsRun = true;
function main()
while IsRun do
PrintDbgStr("Какая-то информация, например значение переменной\n");
sleep(1000);
end;
end;
function OnStop()
IsRun = false;
end; |
Visual Studio должна быть запущена с правами Администратора!
Перейдите по меню: "ОТЛАДКА" -> "Присоединиться к процессу..."

Выберите из списка процессов "info.exe" и нажмите кнопку "Присоединиться", после этого, Вы можете видеть отладочную информацию в окне "Вывод"

Здравствуйте, подскажите, пожалуйста, в каком виде сравнивать значение времени
getInfoParam ("LOCALTIME")
Например с 9 утра?
while getInfoParam ("LOCALTIME")<??? do sleep(10) end
в микросекундах?
Здравствуйте! Чтобы микросекунды иметь, нужно dll написать простенькую на C++, в Lua нет микросекунд, на сколько я знаю, видел только их эмуляцию. Сравнить в секундах можно так, например (время компьютера, не сервера):
Большое спасибо!
Всегда пожалуйста! Вот, кстати, про дату/время, если не видели еще: https://quikluacsharp.ru/qlua-osnovy/data-vremya-v-qlua-lua/
Дмитрий, не подскажете почему
PrintDbgStr("qlua "..getInfoParam("LASTPINGTIME"))
PrintDbgStr("qlua "..getInfoParam("LASTPINGDURATION"))
возвращают пустые значение?
а getInfoParam('SERVERTIME') корректно отрабатывает.
Цель отслеживать пинг.. При больших задержках 1-2 сек переходить в безопасный режим.
Перейдите в меню: "Создать окно" - "Все типы окон" - "Информационное окно", поставьте там галочку "Расширенный набор" и нажмите "Добавить все" и "Да", откроется информационное окно, посмотрите в нем, возможно эти параметры просто не транслируются. Как вообще пинг отслеживать даже не знаю, никогда не приходилось, можете попробовать настроить на компьютере время точно до секунд, и в OnAllTrade сравнивать время пришедшей сделки со временем компьютера, конечно, с учетом часового пояса, тогда будете видеть когда совершилась сделка и сколько потребовалось времени, чтобы информация о ней дошла до Вашего терминала.
Дмитрий, спасибо, что отвечаете.
А вот функция isConnected() - она как быстро увидит разрыв? Критерий качества канала какой у неё?
Всегда пожалуйста! Как только соединение будет разорвано, сразу увидит. Можете сделать простенький скрипт с этой функцией и поразрывать соединение, посмотреть как она реагирует.
Здравствуйте!
Вопрос - как при помощи Qlua можно принудительно активировать стоп-заявку из таблицы стоп-заявок? Чтобы по ней выставилась заявка. В терминале такая опция есть.
Здравствуйте! Отправьте вот такую транзакцию, только код класса и номер стоп-заявки нужный укажите:
Большое спасибо за оперативность помощи. Попробовал Вашу подсказку - получаю ошибку транзакции с текстом "Не указан режим транзакции" . Среди параметров транзакции такого параметра не нашел. Что имеется в виду?
Все получилось! Я пытался активировать связанную заявку. Обычные стоп-заявки активируются. Большое спасибо!
Ну все, отлично тогда 🙂
Всегда пожалуйста! Даже не могу Вам точно подсказать, какой-то параметр не верно указан, попробуйте, как я писал, через карман транзакций получить нужную строку в своем терминале.
Еще, можете прочитать про таблицу "Карман транзакций" в файле справки info.chm (находится в папке с терминалом). В особенности, про выгрузку транзакции в *.tri файл. Таким образом можно получить подобную строку для любой транзакции из тех, которые есть в терминале.
Здравствуйте!
Вопрос возник - как лучше программно определить момент начала торгов? Если робот запущен, например, за 10 минут до начала торгов, многих данных у него еще нет (или есть, но вчерашние), то на что ориентироваться, чтобы дать роботу команду начинать расчеты? isConnected() я так понимаю будет уже true и за 10 минут. Есть еще подозрение, что можно по первой обезличенной сделке?
Может быть, где-то есть уже такой реализованный код, что-то не нахожу, буду благодарна за подсказку!
Здравствуйте, Лидия.
Вот здесь: https://quikluacsharp.ru/quik-qlua/poluchenie-dannyh-iz-tablits-quik-v-qlua-lua/
в самом конце есть маленький пример, думаю то, что Вам нужно
Неа, статус торгуется у него уже до начала торгов 1. При этом данные он берет вчерашние, например. ту же цену открытия. Меняется она уже с началом торгов.
Сделаю с привязкой к первой сделке 🙂
Глючный QUIK 🙁
Дмитрий, непонятно: "getInfoParam() - возвращает значение параметра из окна:"Связь" -> "Информационное окно..."" - это в Квике такое окно? Не могу найти.
А-а, это то что в "Система -> О программе -> Информационное окно...", понял. Сорри!
На демо-счете сейчас QUIK обновили до версии 7 и стало: Система -> О программе -> Информационное окно. У брокера Открытие, например, все еще версия 6.17.3.6, и там так, как написано в статье.