Судя по Вашему снимку экрана, можем предположить, что Вы пользуетесь старой версией Рабочего места QUIK. Выделение активной закладки уже давно выглядит вот так:
Рекомендуем Вам обновить терминал до последней версии одним из следующих способов: - включить настройку Система/Настройки/Основные настройки/Программа - "Проверять наличие обновлений" - запросить новую версию у Вашего брокера если программа не обновится самостоятельно - если брокер не сможет предоставить нужную версию, скачать ее с нашего ftp: Для 64-х разрядной ОС - ftp://ftp.quik.ru/public/updates/8.9/quik_8.9.0_upd.zip Для 32-х разрядной ОС - ftp://ftp.quik.ru/public/updates/7.27/quik_7.27.2_upd.zip В последнем случае, необходимо будет закрыть QUIK, сделать резервную копию папки, где он находится и скопировать все содержимое архива в первоначальную папку с подтверждением замены всех файлов.
Поскольку данная стратегия подразумевает продолжительную и многократную автоматизацию, то для ее реализации необходимо будет использовать пользовательские скрипты на QLua. Готового функционала для таких действий нет.
Если говорить конкретно про сделки то они идут в одном синхронном потоке, в связи с чем там порядок поступления записей гарантируется. Другими словами, в терминал QUIK записи поступят ровно в том порядке, в котором их отправила биржа.
Гарантирует ли биржа строгий порядок отправки, следует уточнять у самой биржи.
Разные же сущности (транзакции/заявки/сделки) могут транслироваться разными потоками, это значит, что может произойти так, что заявка придет раньше ответа на транзакцию и тому подобное.
Данное отображение действительно некорректно (дата должна быть в формате ДД.ММ.ГГГГ). Уточните, в других местах (например в таблице заявок) дата торгов отображается нормально?
Также просим прислать архив с рабочим местом (без ключей) с подробным описанием проблемы на почту нашей поддержки (quiksupport@arqatech.com) для анализа. Поскольку архив может иметь достаточно большой размер, лучше всего залить его на облачное хранилище (например Яндекс Диск) и отправить ссылку на скачивание.
1) Данная функция включается на панели управления:
2) Такой возможности, к сожалению, нет. Менять масштаб с помощью мыши можно только путем зажатия левой кнопки мыши на горизонтальной(тянуть влево/вправо) / вертикальной(тянуть вверх/вниз) шкале графика.
3) Включить перекрестие можно также только с помощью панели управления:
Подробнее познакомиться с тем, как работать с графиками, вы можете в руководстве пользователя Рабочего места QUIK "4 Графики", доступном по этой ссылке.
Дело в том, что такая конструкция не работает и не должна:
Код
orderNum=OnTransReply(order_num)
Поскольку OnTransReply является функцией обратного вызова, правильное ее использование будет выглядеть примерно вот так:
Код
function OnTransReply(reply)
orderNum = reply.order_num
end
Один из вариантов решения вашей задачи - создать глобальную переменную orderNum, присвоить ей значение в OnTransReply и, после этого, снять заявку с ее помощью. Рабочий пример:
Код
stopped = false
function OnStop()
stopped = true
return 5000
end
function main()
Pokup()
sleep(5000)
SnZ()
end
function Pokup()
--Покупка лимитка
A = {ACTION='NEW_ORDER',
ACCOUNT='NL0011100043',
OPERATION='B',
CLASSCODE='QJSIM',
SECCODE='MAIL',
PRICE='2230,6',
QUANTITY='1',
TRANS_ID='1002',
TYPE='L'
}
local Err_A = sendTransaction(A)
end
function SnZ()
Sn = {ACTION='KILL_ORDER',
ACCOUNT='NL0011100043',
CLASSCODE='QJSIM',
SECCODE='MAIL',
TRANS_ID='989',
ORDER_KEY=tostring(orderNum)
}
Err_Sn = sendTransaction(Sn)
end
function OnTransReply(reply)
orderNum = reply.order_num
end
Касательно TRANS_ID - это пользовательский идентификатор транзакции (именно транзакции, не заявки/сделки), который используется только внутри терминала. Торговая система о нем ничего не знает.
Рекомендуем убедиться, что вводите логин точно также, как он указан в файле секретного/публичного ключа. Также, попробуйте войти введя только один из символов (любой), содержащихся в логине – желательно такой, который не имеет аналогичного визуального отображения в другой раскладке клавиатуры (английской или русской).
Если данные рекомендации не помогут решить проблему, просим прислать на почту нашей поддержки (quiksupport@arqatech.com) следующие файлы (из корневой директории Рабочего места QUIK) вместе с описанием проблемы: • IP.CFG • QRYPTO.CFG • INFO.INI • pubring.txk
Дело в том, что в приведенном вами скрипте, отсутствует бесконечный цикл, не позволяющий скрипту завершиться. Из-за этого, вместо того, чтобы работать и ждать появления событий, скрипт выполняется один раз и останавливается.
Пример:
Код
local stopped = false;
function OnStop()
stopped = true;
return 3000;
end
--data table
local data_table;
--main
-----------------------------------------------------------------------
function main()
--create window and table
data_table = AllocTable();
AddColumn(data_table, 1, 'Колонка №1', true,QTABLE_STRING_TYPE,14)
AddColumn(data_table, 2, 'Колонка №2', true,QTABLE_CACHED_STRING_TYPE,14)
AddColumn(data_table, 3, 'Колонка №3', true,QTABLE_STRING_TYPE,14)
SetTableNotificationCallback(data_table, OnTableEvent)
CreateWindow(data_table);
SetWindowCaption(data_table, 'Table 1');
SetWindowPos(data_table, 1000, 150, 400, 200);
InsertRow(data_table, -1);
SetCell(data_table, 1, 1, 'Клик 1 1');
SetCell(data_table, 1, 2, 'Клик 1 2');
SetCell(data_table, 1, 3, 'Клик 1 3');
InsertRow(data_table, 2);
SetCell(data_table, 2, 1, 'Клик 2 1');
SetCell(data_table, 2, 2, 'Клик 2 2');
SetCell(data_table, 2, 3, 'Клик 2 3');
-- бесконечный цикл (пока stopped == false)
while stopped~=true do
sleep(500)
end
end
--main end
-----------------------------------------------------------------------
-- Функция обрабатывает события в таблице
function OnTableEvent(data_table, msg, par1, par2)
-- Если был клик левой кнопкой
if msg == QTABLE_LBUTTONDBLCLK then
-- Если это общий стоп
if par1 == 1 -- Номер строки
and par2 == 1 then -- Номер колонки
-- Вызываем необходимую функцию
message('message 1')
else
if par2 == 2 then
-- Вызываем необходимую функцию
message('message 2')
end
end
end
end
Не до конца поняли вашу проблему. Что вы хотите сделать и что конкретно не получается? В таблицу необходимо отправлять тип данных, соответствующий типу данных столбца, в ячейку которого происходит вставка. Лучше всего - приведите пример когда, на котором возникает ошибка.
Попробуйте пересоздать Таблицу алгоритмических заявок. Если проблема сохранится, просим прислать архив Рабочего места QUIK без ключей для анализа с подробным описанием проблемы на почту нашей поддержки (quiksupport@arqatech.com).
Картинку увидеть смогли. Для анализа проблемы просим выслать архив Вашего Рабочего места QUIK без ключей с подробным описанием проблемы на почту нашей поддержки (quiksupport@arqatech.com).
Рекомендуем в первую очередь проверить, происходит ли подобное если lua-скрипт отключен. Если нет, то скорее всего проблема вызвана именно им.
Если проблема сохранится, просим вас сделать дамп самостоятельно следующим образом: - откройте Диспетчер задач (комбинация клавиш Ctrl+Shift+Esc) - на вкладке "Подробности" найдите процесс info.exe - вызовите контекстное меню и выберите пункт "Создать файл дампа"
После чего отправить созданный файл на почту нашей поддержки (quiksupport@arqatech.com) вместе со скриптом, запущенным на момент зависания и подробным описанием проблемы.
Алексей написал: существуют таблицы обезличенных сделок с фильтрами инструментов. при редактировании 1 таблицы в фильтре появляются все инструменты открытые в других таблицах. как исправить? чтобы в данной таблице в фильтр не попадали инструменты из других таблиц.
Описанная в данном инциденте ошибка была исправлена в версии 8.9.0 терминала QUIK. Рекомендуем вам обновить версию программы. Приносим извинения за причиненные неудобства.
Сергей написал: Почему в Quik 8.8 я не могу установить значение параметра lua индикатора больше 999??? Что за бред??? В 8.2 можно было вводить любые значения!
Описанная в данном инциденте ошибка была исправлена в версии 8.9.0 терминала QUIK. Рекомендуем вам обновить версию программы. Приносим извинения за причиненные неудобства.
Дело в том, что в версии терминала, которой вы пользуетесь, нет возможности включить "Формальное представление данных" только для самих данных, настройка включается и для заголовков тоже. В виду этого, рекомендуем вам обновить Рабочее место QUIK.
Сделать это можно одним из следующих способов: - включить настройку Система/Настройки/Основные настройки/Программа - "Проверять наличие обновлений" - запросить новую версию у Вашего брокера если программа не обновится самостоятельно - если брокер не сможет предоставить нужную версию, скачать ее с нашего ftp - ftp://ftp.quik.ru/public/updates/8.8/quik_8.8.4_upd.zip В последнем случае, необходимо будет закрыть QUIK, сделать резервную копию папки, где он находится и скопировать все содержимое архива в первоначальную папку с подтверждением замены всех файлов.
Также заметим, что Рабочее место QUIK начиная с версии 8.0 работает только на 64-х разрядной ОС Windows.
Для того, чтобы данные копировались корректно и, при этом, не менялись заголовки, необходимо установить настройки в пункте меню Система/Настройки/Основные настройки/Программа/Буфер обмена следующим образом:
(пункт "Выводить заголовки строк" можно отключить на свое усмотрение)
В таком случае, числа выводятся как числа и заголовки остаются в порядке:
Учли ваше пожелание по поводу работы подсказки и маленьких свечей. Мы постараемся рассмотреть его. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
В случае работы с одним классом, а тем более - с одним инструментом, монотонность времени гарантируется и она есть. Именно этот случай обсуждался выше.
Разумеется, что если в таблице инструменты с разными режимами торгов (например срочный и фондовый рынок), то время может идти не синхронно.
Извиняемся, с автоматическим подставлением из стакана немного погорячились.
При установке признака заявки "Рыночная", если цена не указана, ее значение подставляется идентично значению «Максимально возможная цена» (в случае покупки) либо «Минимально возможная цена» (в случае продажи) для данного инструмента (значение берется из Таблицы текущих торгов). Таким образом, если стакан не пустой, то будут совершенны сделки по всем встречным заявкам в пределах указанного нами объема.
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Вы совершенно правы. Однако, важно понимать, что на срочном рынке нет возможности выставления рыночных заявок. Терминал QUIK позволяет создать "синтетическую" рыночную заявку, путем указания соответствующего типа. В таком случае будет подана транзакция на выставление лимитной заявки с условием снятия остатка, а цена покупки/продажи будет автоматически подставлена идентично худшей в стакане. Автоматическая подстановка цены произойдет только в том случае, если она не указана Вами, иначе - заявка все еще будет принята, но, при отсутствии в стакане котировок указанной вами цены, сразу же будет снята как остаток.
В параметре транзакции "SECCODE" необходимо указывать именно то значение, которое видите в терминале в поле "Класс инструмента" (лучше всего смотреть в окне "Информация об инструменте", оно вызывается через контекстное меню в Таблице текущих торгов)
Если у вас есть сомнение в соответствии цены к времени, то по этому вопросу следует обратиться к Вашему брокеру.
Параметры TIME и LAST соответствуют одной сделке, но так как Таблица текущих торгов обновляется раз в период, а не после каждой сделки, существует вероятность, что она (сделка) не будет действительно последней.
Поэтому для таких задач все же рекомендуем рассмотреть вариант работы с таблицей обезличенных сделок, она в этом плане точнее и актуальнее. Биржа гарантирует хронологический порядок записей в данной таблице. Если же наблюдается обратное, это повод обратиться к брокеру, потому что такое поведение некорректно.
В последнем случае, необходимо будет закрыть QUIK, сделать резервную копию папки, где он находится и скопировать все содержимое архива в первоначальную папку с подтверждением замены всех файлов.
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Quik версия 8.8.4.3 не работает функция getPotfolioInfo и getPortfolioInfoEx., Ошибка в в работе функций ggetPotfolioInfo и getPortfolioInfoEx.x на демо счете Quik.
Владимир, Lua - не наша разработка. Именно поэтому, руководство пользователя по Lua, идущее с терминалом, не является полным описанием языка, в нем приведены разработанные нами функции для работы с терминалом QUIK.
Со всеми родными функциями и тонкостями языка можно ознакомиться на официальном сайте - https://www.lua.org/
Цитата
Как я могу анализировать указанный бит, если тип данных не integer, а real?
Просим уточнить подробнее, о чем идет речь, желательно на конкретном примере. Все битовые флаги в терминале имеют целочисленный тип. Список с их описанием вы можете найти в руководстве "Интерпретатор языка Lua" (стр. 87).
Со структурами данных языка и особенностями работы с ними вы также можете ознакомиться самостоятельно в официальной документации. С вашим вопросом стоит обратить внимание на данный раздел книги "Программирование на Lua", посвященный как раз таки структурам данных - https://www.lua.org/pil/11.html
getNumberOf принимает как параметр только имена таблиц терминала в виде строки (строки заключаются в ""), а вы пытаетесь передать ему таблицу Lua. Список таблиц используемых в функциях «getItem», «getNumberOf» и «SearchItems» можно посмотреть в руководстве пользователя "Интерпретатор языка Lua" (стр. 22). Также обращаем ваше внимание, что getNumberOf возвращает количество строк таблицы. Так что в вашем примере (где получена всего одна строка) это в любом случае не имеет особого смысла.
2)
Цитата
А если пытаюсь обратиться к элементу, получаю nil message(tostring(futures_client_limits[1]));
Для получения значений таблицы необходимо обращаться к ее параметрам. Пример:
Список доступных параметров каждой таблицы также можно посмотреть в руководстве пользователя "Интерпретатор языка Lua" (стр. 56).
3) В документации ошибки нет. В описании функции, справа от ее имени в скобочках указываются аргументы, принимаемые функцией, а не результат ее работы. Имя параметра таблицы (оно же ключ при обращении к этому параметру) имеет строковый тип. Номер строки (Index), которую мы хотим получить при помощи функции getItem - числовой.
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
1) Дело в том, что функция getParamEx принимает 3 аргумента, а вы пытаетесь передать в нее одну строку.
Динамически изменяемые параметры в функцию можно передать следующим образом: class = "код класса" sec = "код инструмента" param = "параметр" s = getParamEx(class, sec, param).parav_value
Также, можно воспользоваться функцией unpack arg = {} arg[1] = "код класса" arg[2] = "код инструмента" arg[3] = "параметр" s = getParamEx(unpack(arg)).param_value
Помимо этого, в Lua действительно есть функция идентичная eval в JS - loadstring Пример ее использования: s = loadstring("return 'код класса', 'код инструмента', 'параметр'") getParamEx(s()).param_value)
2) Если мы вас правильно поняли, для вашей задачи подойдут две функции: bit.test - проверяет состояние указанного бита в значении. Возвращает true, если бит равен "1", и false, если бит равен "0". Пример: if bit.test(х, n) then --- end Где x - значение, а n - порядковый номер бита, начинающийся с 0 (1й бит имеет порядковый номер 0, 2й - 1 и т.д.)
Если же вы хотите задавать бит именно числом, то можно воспользоваться функцией bit.band. Пример (проверка бита с порядковым номером 1): if bit.band(x,0x2) ~= 0 then --- end
Для решения проблемы некорректного шрифта необходимо: 1) установить wine с русской локалью: LANG=ru_RU.UTF8 sudo apt install --install-recommends winehq-stable 2) при установке Рабочего места QUIK также указать русскую локаль: env 'LANG=ru_RU.utf8' wine quik_inst.exe (где вместо quik_inst.exe - имя Вашего инсталятора Рабочего места QUIK)
Относительно второй проблемы, просим уточнить, что именно происходит при попытке запуска? Появляется ли какая-либо ошибка? (Желательно приложить снимки экрана).
Наличие у Вас в терминале полного наименования инструмента срочного рынка регулируется настройками на стороне Вашего брокера. В зависимости от этих настроек, вы будете видеть либо только краткий код, либо как краткий, так и полный.
Так что по этому вопросу вам необходимо обратиться к нему.
Просим выслать архив рабочего места, скрипт индикатора на котором наблюдается проблема, и подробное описание проблемы на почту нашей поддержки (quiksupport@arqatech.com).
Roman Azarov написал: Александр , Добрый день! Записи в Таблице Обезличенных Сделок действительно должны быть упорядочены.
Для детального анализа проблемы просим выслать архив рабочего места и скрипт, который вы используете, на почту нашей поддержки ( quiksupport@arqatech.com ).
На счет скрипта не понятно. Там у меня мой скрипт запущен, который написан на lua api? Вы его хотите?
Александр, Добрый день! Записи в Таблице Обезличенных Сделок действительно должны быть упорядочены.
Для детального анализа проблемы просим выслать архив рабочего места и скрипт, который вы используете, на почту нашей поддержки (quiksupport@arqatech.com).
По скриншоту настроек видим, что у Вас некорректно распознаются типы данных (Type_ID=9 и т.д.). Подобное происходит при невозможности распознать и отобразить тип данных, который ODBC драйвер передает в QUIK.
В данном случае необходимо подобрать ODBC драйвер для Вашей СУБД. Искать можно по запросу "*имя СУБД* ODBC driver".
Уведомление о необходимости обновления торговых терминалов в связи с изменениями на срочном рынке Московской биржи, Список проблем при работе устаревших версий QUIK после обновления торговой системы срочного рынка МБ
На данный момент, мы уже не занимаемся развитием QPILE, но при этом, в обязательном порядке уведомили всех пользователей, что данное нововведение (19-значные заявки) московской биржи обязательно скажется на работе некоторых функций этого языка. Действительно, как правильно подметили ранее, какие-то операции с 19-значными номерами заявок в QPILE все еще можно проводить если хранить их как строку, а не как число. При этом никак не гарантируется правильная работа других функций с этими самыми номерами.
Со своей стороны, можем порекомендовать перейти на QLua, данный язык активно нами поддерживается, дорабатывается и, по возможности, своевременно ограничивается от возможных ошибок.