Потребовалось кое-что сделать при событии закрытия терминала. Но OnClose() и OnStop(flag) не выводит системные сообщения и не выполняет код внутри. Если отключить qlua.dll в окне «Версии компонентов и плагинов», всё работает по инструкции. Как можно объяснить такое поведение?
Код
function OnInit() -- Функция вызывается терминалом QUIK перед вызовом функции main().
is_run = true
return
end -- выход из функции: OnInit()
function main() -- Функция, реализующая основной поток выполнения в скрипте. Для ее выполнения терминал QUIK создает отдельный поток.
while is_run do -- повторяющийся цикл, пока is_run = true
sleep(1000)
end -- выход из цикла: повторяющийся цикл, пока is_run = true
return
end -- выход из функции: main()
function OnClose() -- Функция вызывается перед закрытием терминала QUIK и при выгрузке файла qlua.dll.
-- Под выгрузкой файла qlua.dll подразумевается отключение плагина QLua
-- в окне «Версии компонентов и плагинов» (см. п. 1.9. Раздела 1 Руководства
-- пользователя QUIK).
message("OnCl ose="..tostring(1),1) -- отладка скрипта с выводом системного сообщения
end
function OnStop(flag) -- Функция вызывается терминалом QUIK при остановке скрипта из диалога управления и при закрытии терминала QUIK.
-- При остановке или удалении работающего скрипта Lua из диалога управления «Доступные
-- скрипты» параметр вызова flag принимает значение «1». При закрытии терминала QUIK –
-- значение «2».
message("OnStop flag="..tostring(flag),1) -- отладка скрипта с выводом системного сообщения
is_run = false
return 5000
end
Спасибо за ответ. Вот что у меня получилось. 1. Объявление локальной переменной не повлияло на затраты памяти. 2. Объявление переменной заранее не повлияло на затраты памяти. 3. Вызов штатной os.clock() не приводит к увеличению затраченной памяти. Получается, что сделать максимально статичным использование памяти невозможно из-за её увеличения при повторном вызове штатных функций QLUA..
Интересен алгоритм использования памяти. Ниже простой скрипт, который при каждом расчёте обращается к функции "getInfoParam". При запуске, в столбце "Память, КБ" = 41.04, и, с каждым новым расчётом, затраченная память увеличивается: 41.04, 41.07, 41.11... Почему происходит увеличение используемой памяти, ведь данные не накапливаются? Заметил, что в скриптах память увеличивается до определённого предела (примерно в 2 раза больше, чем при старте) затем сбрасывается до начального размера. Возможно, где-то уже это обсуждалось, но не нашёл.
Код
function OnInit() -- Функция вызывается терминалом QUIK перед вызовом функции main().
is_run = true
return
end -- выход из функции: OnInit()
function main() -- Функция, реализующая основной поток выполнения в скрипте. Для ее выполнения терминал QUIK создает отдельный поток.
while is_run do -- повторяющийся цикл, пока is_run = true
ScriptTimeStart = getInfoParam("SERVERTIME") -- Время начала расчёта скрипта
sleep(1000)
end -- выход из цикла: повторяющийся цикл, пока is_run = true
return
end -- выход из функции: main()
function OnStop() -- Функция вызывается терминалом QUIK при остановке скрипта из диалога управления и при закрытии терминала QUIK.
is_run = false
return
end
Нашёл отличие. В призраке limit_kind=-3. Это на вашем сервере кто-то балуется, а таблица QUIK такое не отображает. Из справки: "Срок расчётов. Возможные значения: положительные целые числа, начиная с «0», соответствующие срокам расчётов из таблицы «Позиции по инструментам»: «0» – T0, «1» – T1, «2» – T2 и т.д. 2 d_long STRING Эффективный"
В последних версиях QUIK, легенда графика не отображается, при добавлении нового графика на диаграмму. Это не удобно, т.к, при добавлении новых графиков, не видно, какие именно индикаторы или графики используются. Приходится включать отображение легенды для каждой области графика. Понятно, что сделано это для экономии рабочего пространства, но неэффективно.
Нужно собрать: w32.dll - для авто логина QUIK https://quik2dde.ru/viewtopic.php?id=78 lfs.dll - для работы с файлами qvcl.dll - для создания визуального интерфейса https://quik2dde.ru/viewtopic.php?id=26 Эти функции будут и бесплатно, но без пинка, в неизвестном будущем. Пинок в виде ₽10К (2+2+6) и народная слава гарантируется. Ссылки на библиотеки выложу.
К счастью, разработчики QUIK умеют читать мысли и пока я писал вопрос они уже ответили: https://forum.quik.ru/messages/forum1/message42519/topic5117/#message42519 "Проблемы работы с длинными номерами в QPILE (на любых версиях терминала). Для решения проблемы п. 7 следует реализовать Ваш алгоритм на языке QLUA. При этом следует использовать версию терминала QUIK, которая на момент публикации данного уведомления еще не вышла, но планируется к выпуску до того, как данное изменение в торговой системе будет внедрено." Я прав. Хотя, вопрос был риторический. ) Буду потихоньку перекидывать алгоритмы на QLUA для версии QUIK, которая ещё не вышла.
Учитывая переход на размерность идентификатора заявок и сделок до 19-ти символов, требуется обновления функционала QPILE. Подробнее: https://forum.quik.ru/forum1/topic5117/ Но делать это никто не будет, т.к. поддержка QPILE приостановлена 6 лет назад. В итоге, все роботы QPILE больше не будут торговать. Таблицы QPILE будут работать как и прежде. Всё верно?
У брокера Открытие перестала работать возможность перестановки заявки одним запросом, через MOVE_ORDERS. Аналогичная тема уже поднималась: https://smart-lab.ru/blog/590101.php, но брокер, похоже не знает, что это за ругательство "MOVE_ORDERS". Версия QUIK 7.27.2.1, это последняя версия, на которую позволяет обновиться сервер Открытие. Я вышел из положения путём отправки двойного запроса: удаления и выставления заявки. Долблю сервер в два раза больше, за что прошу прощение. Ещё и мои каждый день стали писать письма, мол моё ПО глючное. Приходится высылать каждый день функционал с двойным запросом. Поэтому, пишу письмо Вам, уважаемые разработчики. Вы, по крайней мере, знаете, что есть такое "MOVE_ORDERS".
Alexander Kopyatkevich написал: Здравствуйте! Уточните, пожалуйста, в самой таблице обезличенных сделок данные по этому параметру есть? Так же, так как язык QPile регистрозависимый, попробуйте задать параметр большими буквами (то есть, должно быть OPEN_INTEREST).
Данные в самой таблице обезличенных сделок данные по этому параметру есть. Пробовал и так: GET_VALUE (GET_ITEM ("ALL_TRADES", i), "OPEN_INTEREST") Другие параметры выводятся.
Спасибо, да, но там позиция, точнее объём в валюте депозита. Конечно, можно пересчитать поделив на стоимость лота. Получается, что на валютной секции лоты не транслируются.
Приветствую! Уважаемые разработчики, не могли бы вы немного улучшить поиск. Думаю, моя идея будет интересна и не сложна в реализации. Например, мне нужно найти опцион "SR021500BD8". Я могу найти "sr0215", увижу все опционы всех серий . Чтобы более точно указать запрос, нужно ввести полностью код опциона. Но если введу "sr0215 D8", я могу увидеть только опционы этой серии. Т.е. пробел может служить разделителем частей запроса, ну, и само самой быть пробелом. На практике знаю, что штука удобная.
Мерцание заголовков таблицы QPILE и её содержимого после повторной локальной загрузки любого скрипта в версии QUIK 7.16. При этом, добавляется первая пустая строка. Возможно возникало и в предыдущих версиях. Решается удалением и созданием новой таблицы. Просьба поправить в последующих версиях.
Здравствуйте! А моё пожелание уже не меняется уже более 10 лет. Возможность привязки метки к координатам окна диаграммы. Это позволит фиксировать надписи, например, к левому верхнему краю.
Индикатор Арбитраж PRO для QUIK Версия 20170328 20170328 – Добавлено: возможность указания даты экспирации патерном expДД.ММ.ГГГГ.
21.04.2017
Утилита для QUIK "Робот Скальпер" Версия 20170421 - Добавлена возможность расчёта отступов, стоп-лосс и тейк-профит на основе индикатора АТР (Average True Range).
22.05.2017
Утилита для QUIK "Робот Сетка Д" Версия 20170522 - Исправлен учёт количества прибыльных позиций подряд. В прежних версиях, если происходил переход на другой уровень, счётчик количества прибыльных позиций подряд сбрасывался на ноль. Было это сделано намерено, но теперь было решено отказаться от этой версии.
02.06.2017
Утилита для QUIK "Робот Сетка Д" Версия 20170602 - Возможность автоматического определения кода бумаги. Например, если указать "?", то код бумаги будет опеределён из легенды (названия) индикатора. Работает только для FORTS. Позволяет быстро переключать торговый инструмент, меняя график при помощи привязки к таблице Текущие торги (Таблица Текущих Параметров).
20170715 - Возможность совершения в получателях дополнительных сделок, т.е. свои сделки. 20170715 - Возможность дублирования из нескольких QUIK в один. 20170731 - Возможность работы через Интернет. 20170816 - Возможность отключения полной синхронизации.
24.11.2017
Утилита для QUIK "Робот Скальпер" Версия 20171123 - Добавлена возможность "Режим Ассистента". Робот подхватывает выставленную трейдером заявку для входа и далее работает в обычном алгоритме. Версия 20171124 - Добавлена возможность "Режим Последовательного входа в позиции". Например, если "Последовательный вход в позиции" = "Да", робот сначала будет выставлять только первую заявку для входа из списка. Когда произойдёт вход в первую позицию в полном объёме, будет выставляться заявка входа второй позиции и т.д. Если применяются ТП и СЛ, они будут выставляться сразу, после входа в позицию.
13.03.2018
Утилита для QUIK "Робот Скальпер" Версия 20180310 - Добавлена возможность "Граница волатильности". Можно определять в каком состоянии рынка (трендовом или контртрендовом) робот будет торговать. Уровень волатильности определяется индикатором АТР. Например, если значение АТР выше указанного уровня, то состояние рынка будет определено, как "трендовое". Если мы выбрали торговлю только в контртрендовом состоянии рынка, то открытые позиции будут ожидать закрытия по стоп-лосс или тейк-профит, но новые позиции открываться не будут. Версия 20180311 - Добавлена возможность указания стоп-лосс на основе значения индикатора. Например, если укажем в настройках стоп-лосс "!стоп", то нужно создать индикатор с идентификатором "стоп". Значение для стоп-лосс будут приходить из этого индикатора в неизменённом виде.
Задача простая. Есть переменная типа string str = "1+(2*3)". Нужно из неё получить результат 7. Есть два способа. Первый - пишем парсерную функцию eval. Хорошая функция, учитывающая скобки, приоритет операций и т.д. занимает около 1000 строк. Второй - просто и изящно передаём строку в назначение переменной, например res = 1+(2*3), будет равен 7.
Код
function calculateString(str) {
return (new Function('return ' + str))();
}
Это пример для JavaScript. Где-то видел аналогичный для LUA, но не могу найти. Помогите с решением задачки.
Утилита для QUIK "Дубликатор сделок QUIK-QUIK" http://pmntrade.ru/double_trades_quik-quik.html Последние обновления: 20170715 - Возможность совершения в получателях дополнительных сделок, т.е. скрипт получателя видит только свои сделки. 20170715 - Возможность дублирования из нескольких QUIK в один. 20170731 - Возможность дублирования сделок через Интернет.
Приветствую! Появилась ошибка "Неверный код клиента" при вызове транзакции перестановки заявки FORTS. При этом, заявка выставляется и снимается без проблем с аналогичным массивом. Проблема возникла у брокера Открытие, при использовании Единого брокерского счёта и субсчетов. В других вариантах у этого же брокера ошибка не наблюдается.
Всё же, решить проблему не удалось. Проблема именно в том, что пересчёт индикатора задним числом удалось сделать только на новом тике. Если пересчитывать ранее, например, на последнем баре, получаем всё те же нули с верхнего графика.
s_mike@rambler.ru, спасибо за хорошую мысль. Действительно, перерисовать индикатор можно только таким способом, прогнав весь массив тайм-серии сначала. А событием для этого сделаю ненулевую цену графика. Попробую. Но, всё равно, "телега бежит впереди лошади". Может уважаемые разработчики хоть, как пожелание зарегистрируют запуск расчёта индикаторов после получения данных всех графиков на диаграмме.
Sergey Gorokhov написал: Михаил Понамаренко , Все равно не воспроизводится. быть может у Вас индикатор все-таки создан из окна с верхним графиком? Попробуйте повторить на разных инструментах.
Для чистоты эксперимента, установил QUIK 7.10 с Вашего сайта. Ничего не менял в настройках, только скопировал тестовый индикатор и добавил окно второго инструмента. Инструменты другие. Но картина такая же. (
Николай Камынин, индикатор в QUIK прорисовывается раньше, чем приходят данные графика. А перерисовать индикатор не представляется возможным любыми способами, в т.ч. во внешней библиотеке. Или я не прав?