Goodchild написал: Подскажите. Нужно в собственном Индикаторе на lua вывести несколько меток на график, примерно в левый верхний угол и в правый нижний угол. Как получить параметры окна графика?
Здравствуйте, К сожалению такой возможности не предусмотрено. И свечки устанавливаются на координаты дата/цена, а не X,Y окна
Здравствуйте, Надежного способа нет. Т.к. данные поступают непрерывным потоком. Иными словами нет той точки которая отделяет старые данные от новых. На форуме можно найти много разных вариантов. Например этот или тут
Для корректной работы функции включите в настройках Рабочего места QUIK признак получения данных «Исходя из настроек открытых пользователем таблиц» (меню Система / Настройки / Основные настройки..., раздел «Программа» / «Получение данных»). Параметры:
class_code – код класса; sec_code – код бумаги; db_name – код параметра. В случае успешного завершения функция возвращает «true», иначе – «false».
Конечно не правильно. Настоятельно рекомендуем ознакомиться с документацией QLUA.chm -Функции взаимодействия скрипта Lua и Рабочего места QUIK --Функции получения значений Таблицы текущих торгов ---Особенности получения значений Таблицы текущих торгов
и самое важное с главой "Функции для заказа параметров Таблицы текущих торгов" о которой уже было сказано.
В связи с этой документацией, заказ данных происходит через функцию ParamRequest
и все эти проверки про param_type=="2" явно лишние
S C написал: у меня квик вылетает при перезаказе дынных
при каком перезаказе данных? Вам было сообщено о двух вариантах. Через терминал и через сами скрипты. Вы пробовали в Lua скрипте выполнить заказ как уже было сказано?
Вопрос не понятен. Что значит "правильный" способ? Чем по Вашему использование функций для заказа данных является не правильным способом? Либо Вы сами в терминале заказываете данные, либо за Вас это делает Lua скрипт. Других вариантов не видно. Если есть идеи, готовы выслушать.
Вы категорически не правы. Функция Sq() тут совершенно не причем. Она у Вас перекрестно срабатывает. Чтобы убедиться просто добавьте message("Hello Word") внутри функции Sq().
А вот транзакция похоже не выполняется. Причина в TRANS_ID = tostring(0), нельзя указывать его равным нулю, минимум 1.
Код
local stopped = false
function OnStop()
stopped = true
return 2000
end
function Sq()
message("Hello Word")
A = {
ACTION = 'NEW_ORDER',
ACCOUNT = 'SPBFUT00005',
OPERATION = 'S',
CLASSCODE = 'SPBFUT',
SECCODE = 'SiM8',
PRICE = tostring(64000) ,
QUANTITY = tostring(2),
TRANS_ID = tostring(1)
}
Err_A = sendTransaction(A)
message(Err_A)
end
function main()
sleep(3000)
Sq()
end
S C написал: В итоге, что все таки случилось и как автоматизировать проверку сессии корректно ?
Т.е. Ваш вопрос звучит "как заказывать данные автоматически"?. Тогда для этого есть getParamEx2 И глава в документации "Функции для заказа параметров Таблицы текущих торгов"
qwerty123 написал: Да, я понимаю, что это они устроили. Просто если в "таблице всех сделок" это просто отфильтровать по дате, то в "текущих торгах" просто нет необходимой информации.
Не понятно чего Вы хотите? Информацию транслирует биржа, а QUIK ее просто отображает. Если Вам нужно смотреть мин/макс именно за астрономическую дату, а не за сессию, подсказка уже была - смотреть на графике.
Цитата
qwerty123 написал: P.S. А понедельничная сессия начинается в пятницу вечером, я правильно понимаю?
что именно не работает? И почему Вы ставите sleep перед Sq()? Получается что Вы ждете sleep(3000) и только потом срабатывает Sq(), судя по тексту Вам надо в точности на оборот.
Вот эта информация и требовалась. Пустым параметр не должен быть. Проверьте настройки терминала, в меню Система - Настройки - Основные - Программа - Получение данных, должна быть включена опция "Исходя из настроек открытых пользователем таблиц" После чего попробуйте выполнить перезаказ данных, через меню Система - Заказ данных - Перезаказать. Сообщите появятся ли данные в параметре "Статус" в таблице текущих торгов.
qwerty123 написал: Печально это. "Текущие торги" бесполезная вещь получается если все самому считать приходится.
Еще раз повторим что по срочному рынку сессия начинается в 18:45 а не в 10 утра. Почему Вы считаете данные после 18:45 неверными ведь они относятся в текущей торговой сессии? А после 18:45 это уже другая сессия.
И с этим надо жить, это особенность режима торгов.
qwerty123, К сожалению, что-либо сделать нельзя т.к. информация в таком виде поступает с биржи. А на бирже по срочному рынку сессия считается в 18:45 предыдущего дня.
Цитата
qwerty123 написал: Мне надо знать мак и мин цену за сегодня без учета вчерашней сессии.
Эту информацию можно получить например с графика цены и объема на дневном интервале.
S C написал: вообще когда все работает нормально param_type=4
Да так и есть. И у нас описанная функция так и возвращает. т.е. проблема не воспроизводится. Открыта ли у Вас таблица Текущих торгов? Что отображается в параметре "Статус"?
S C написал: Как я понял, status.param_type=2 означает что status.param_value тупо не получен.
Согласно документации param_type это Тип данных параметра, используемый в Таблице текущих торгов. Для param_type=2 это тип данных LONG нигде не сказано что param_type=2 означает что данные не получены.
Проверьте что на самом деле отображается в таблице текущих торгов. И о каком классе идет речь?
Здравствуйте, Именно такого индикатора в QUIK нет. Есть стандартный индикатор MACD. Имеющиеся встроенные индикаторы, приведены в документации на терминал QUIK (открывается клавишей F1) -Раздел 4. Работа с графиками --Методы технического анализа
Кроме того, пользователи имеют возможность создавать свои собственные индикаторы на языке Lua Описание приведено в отдельном файле QLUA.chm, глава "Индикаторы технического анализа"
Поле "Курс" таблицы текущих итогов, класс кросс-курсы валют., Как обратиться к полю "Курс" таблицы текущих итогов? Не знаю где найти название параметра
Здравствуйте, Узнать точное имя любого параметра можно выведя таблицу Текущих Торгов по DDE с установленным признаком "Формальные заголовки" так для параметра "Курс" имя будет CROSSRATE т.е. команда будет такая: local PriceStep = tonumber(getParamEx('CROSSRATE', 'USD', "CROSSRATE").param_value);
Здравствуйте, Это особенности типа данный с плавающей точкой. По данной теме можно найти много статей в интернете. Рекомендуем округлять значения до нужного знака перед сохранением в файл.
Артем написал: Виды исключений : неправильная ссылка, не верный адрес, хост не доступен???
Боюсь что кроме как предварительно установить проверку других идей нет. Проверку можно выполнить через тот же Ping У нас эта тема обсуждалась тут и тут
Vladimir написал: 1) функции, передающие таблицы lua в quik (sendTransaction и подобные) не меняют содержимое таблиц-параметров? 2) то есть таблицы-параметры не нужно создавать каждый раз заново, а можно использовать повторно? Разумеется, обновив значения её полей.
Таблицу не нужно создавать каждый раз заново. Можете смело использовать повторно.
Цитата
Vladimir написал: 3) будут ли функции sendTransaction и ей подобные корректно работать с таблицей с дополнительными полями, не описанными в документации? Например, если добавить поле "__type" или даже "@#$ ~*!$%" для введения подтипов таблиц во внутренней логике скрипта? 4) будут ли функции sendTransaction и ей подобные корректно работать с таблицей с установленной метатаблицей (устанавливаемой ф-цией setmetetable)? 5) будут ли в переданных в Quik таблицах работать метаметоды, например "__index"? Зависит ли это от способа определения метаметода (например, "__index" может быть таблицей или функцией)?
нет, не будут. таблица должна содержать пары типа string-string (ключ - значение). Ошибки скорее всего не случится, но транзакция не отправится. если попадутся поля, которые не описаны для этой транзакции, то будет реджект со стороны терминала.
Вячеслав, К сожалению, не можем объяснить причины происходящего, на Windows 10 x64 сидят тысячи людей, и у них такой проблемы нет. Возможно проблема в самом терминале или его библиотеках. Пришлите для анализа архив всей папки с проблемным терминалом QUIK (без ключей доступа) нам на адрес quiksupport@arqatech.com
Suntor написал: Единственно, непонятно куда девается содержимое поля COMMENT при sendTransaction. Я нигде не вижу в колбеках значения из этого поля.
Цитат из документации на терминал QUIK:
Цитата
COMMENT - Текстовый комментарий, указанный в заявке. Используется при снятии группы заявок
А так как через Lua нельзя использовать групповое снятие заявок, то и параметр COMMENT просто игнорируется
Цитата
Nikolay написал: . Поле BROKERREF не подходит совершенно
если задача только в поиске "своих" заявок, может тогда использовать TRANS_ID? Укажите на всех транзакциях параметр равным 11111. и у всех заявок у которых TRANS_ID=11111 будет означать что транзакция отправлена нужным роботом. У другого робота укажите например 22222 и т.д.
sav 312 написал: Или Вы имели ввиду другой алгоритм?
а что мешает отправить заведомо некорректную транзакцию? но только такую, чтобы сервер ее пропустил а биржа нет. Этого можно добиться например указав цену вне диапазона биржи.
Здравствуйте, У нас проблема не воспроизводится. Параметр QUANTITY прекрасно работает. Приведите полную версию Вашего кода. И сообщите версию терминала QUIK.
sav 312 написал: Каким образом в луа-скрипте предусмотреть защиту от входов в сделку в момент тормозов? По какому параметру луа-скрипт может отследить их наличие или отсутствие?
Надежного способа нет. Т.к. все зависит от природы тормозов. С ваших слов, время сервера не отставало, значит тормозов именно на сервере QUIK не было. Скорей всего задержка случилась на участке до биржи. При таком сценарии, отследить задержку можно по времени биржи, которое можно взять например в Таблице Обезличенных Сделок. Т.е. сравнить время в последней сделки в таблице с временем сервера. Однако и это не вполне надежно т.к. данные по обезличенным сделкам едут отдельным потоком от транзакций. Именно в Вашем случае, самым надежным способом было бы отслеживание времени ответа на транзакцию.
Евгений Петров, Здравствуйте, Ответ был отправлен почтой. Большая просьба, в будущем уточнять что речь про QLUA. Для рисования на графиках, в QLUA есть механизм рисования меток. См. документацию глава "Функции для работы с метками"
Здравствуйте, В случае если предполагается передавать код третьим лицам, Вы можете его скомпилировать в *.luac файл и таким образом обезопасить себя. Однако это не 100% защита т.к. есть Lua декомпиляторы (на счет их достоверности ничего сказать не можем). Что касается брокера, то он не видит Ваш код и не имеет никакой возможности его увидеть.
Андрей, Если речь про param_value, то в результате Вы увидите для времени число в формате ЧЧММСС, для даты в формате ГГГГММДД Если речь про param_image, то увидите в результате строку такую же как в таблице текущих торгов.