Йцукен (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 След.
Снятие/перемещение заявок в стакане
 
Цитата
Alexey Ivannikov написал:
Устроила бы Вас реализация настраиваемого на стороне терминала QUIK искусственного ограничения на количество отправляемых транзакций в секунду?
Предлагаю следующую реализацию:
В настройках терминала пользователь задаёт максимальное количество транзакций в секунду (N), отправляемых на сервер.
Терминал хранит таблицу времён отправки транзакций за последнюю секунду.
Перед отправкой транзакции терминал проходит по таблице и удаляет все записи старше 1 секунды.
Если записей в таблице меньше N, то транзакция отправляется на сервер. При успешной отправке транзакции время её отправки заносится в эту таблицу.
Если количество записей в таблице больше или равно N, то транзакция сохраняется в буфер для дальнейшей отправки.
Периодически (чаще 1 раза/сек, задаётся в настройках) из таблицы времени удаляются записи старше 1 секунды и, если записей становится меньше N, то из буфера выталкиваются транзакции в порядке FIFO для отправки на сервер.
Закрывается DataSource при остановке скрипта?
 
Цитата
Oleg Kuzembaev написал:
Попробуйте добавить проверку на существование объекта.
А из текста ошибки вам не понятно, что объект существует?

Если бы не было самого объекта ds, то ошибка была бы:
Цитата
attempt to index a nil value (global 'ds')

При отсутствии метода Close у существующего объекта была бы ошибка:
Цитата
attempt to call a nil value (method 'Close')

Ошибка из первого сообщения
Цитата
bad argument #1 to 'tostring' (value expected)
однозначно говорит, что в tostring ничего не передаётся, а следовательно метод Close ничего не возвращает.
Я не знаю, как можно по другому интерпретировать эту ошибку  :shock:
Снятие/перемещение заявок в стакане
 
Цитата
Alexey Ivannikov написал:
Устроила бы Вас реализация настраиваемого на стороне терминала QUIK искусственного ограничения на количество отправляемых транзакций в секунду?
Зарегистрируйте.
Отсутствует ID транзакции у части сделок, У заявки trans_id есть, у сделки по ней - нет
 
Цитата
Kilor написал:
В случае, если заявка была выставлена, но сделка была совершена спустя время, то есть изначальная заявка ожидала встречной заявки с подходящими условиями, то параметр trans_id на сделке указан не будет
Вот это поворот!
Цитата
Kilor написал:
Ранее Вам был направлен ответ который нам предоставил разработчик торгового терминала QUIK - ArqaTechnologies.
Премию люлей этому доброму человеку!
Закрывается DataSource при остановке скрипта?
 
Цитата
Oleg Kuzembaev написал:
а функция tostring не принимает nil в качестве аргумента.
С каких пор?

Цитата
Oleg Kuzembaev написал:
По всей видимости ошибка возникает, поскольку ds:Close() в момент вызова возвращает nil
Вы даже код не запускали...
ds:Close() не возвращает ничего. На всякий случай уточню: вместо class и sec можно подставить любые существующие коды класса и инструмента.
Но даже, если бы он вернул nil, вопрос в заголовке темы:
:?: Закрывается DataSource при остановке скрипта?
Панель информации о позиции в стакане
 
Цитата
Polina Anisova написал:
в схеме ведения позиций по видам лимитов будет отображена позиция соответствующая Т1
Почему тогда при ведении позиции по календарным датам в стакане отображается другая позиция?
T0 -> 28.06.2026 -> 11
T1 -> 30.06.2026 -> 179
Не вижу оснований для регистрации пожелания по доработке, когда это явная ошибка.
Панель информации о позиции в стакане
 
Polina Anisova, здравствуйте.
В QUIK Junior расчёты позиций ведутся по календарным датам. Я же спросил: какая позиция будет отображаться в аналогичной ситуации, но, если расчёты на сервере ведутся по Т+1?
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
Цитата
TGB написал:
При переподключении сервер заново передает мегабайты исторических логов всех сделок за день
Это только при переключении на другой сервер. В диспетчере задач можно посмотреть сетевую активность.
Закрывается DataSource при остановке скрипта?
 
13.0.2 и ниже
Как получить дату экспирации?
 
Цитата
Сергей Че написал:
Число в формате ГГГГММДД?
Да
Как получить дату экспирации?
 
Цитата
Сергей Че написал:
Точно EXPDATE?
Я указал названия параметров для getParamEx2.
Думаю для getSecurityInfo это будет соответствовать exp_date
Как получить дату экспирации?
 
Для фьючерсов
MAT_DATE - последний день обращения
EXPDATE - дата экспирации
В обоих случаях число вида ГГГГММДД
Панель информации о позиции в стакане
 
Polina Anisova, так и какая позиция будет отображаться в стакане при Т1: 11 или 179?
Панель информации о позиции в стакане
 
А при ведении позиции по коду расчётов по Тх какая позиция отображается в стакане?
Панель информации о позиции в стакане
 
Цитата
Polina Anisova написал:
система отображает позицию на ближайшую более раннюю дату.
Логичнее отображать на более позднюю. А то совершаем сделки, а позиция не меняется.
Панель информации о позиции в стакане
 
Polina Anisova, значит, баг, когда в стакане отображается позиция не на дальнюю дату расчётов, а на текущую.
Очередное зависание Lua-скрипта, в функции getDepoEx
 
Цитата
Oleg Kuzembaev написал:
Проверка проходила с подключением и без него.
После первого подключения, обновления лимитов и изменения окружения это уже не имеет значения.
Очередное зависание Lua-скрипта, в функции getDepoEx
 
Цитата
funduk написал:
Совершенно аналогичным образом виснет getBuySellInfoEx, если нет соединения с сервером квика.
getDepoEx зависает независимо от наличия/отсутствия соединения с сервером. Я сохранил архив 30.05.2026 с тем окружением, при котором запрос getDepoEx с датой расчётов 20260601 приводит к зависанию. Для разработчика / тестировщика это - самый лайтовый вариант, когда присылают архив с окружением, в котором сразу же без танцев можно воспроизвести проблему. Но Арка не ищет лёгких путей. Они провели тестирование 04.06.2026 или 05.06.2026, зачем-то подключившись к серверу (и то, после того, как сотруднику техподдержки разъяснили, где он не прав). В результате лимиты обновились и окружение поменялось. После этого запрос getDepoEx с датой расчётов в прошлом (01.06.2026) относительно даты в окружении (04.06.2026 или 05.06.2026) уже не приводит к зависанию.
Очередное зависание Lua-скрипта, в функции getDepoEx
 
Цитата
nikolz написал:
Возможно зависание , так как нет проверки "n" на nil
Во-первых, n = 4, об этом написано в первом же посте темы.
Во-вторых, если бы getNumberOf, вопреки спецификации, вернула бы nil, то скрипт бы вылетел на выражении if n > 0 then с ошибкой "attempt to compare number with nil".
Вы не знаете элементарных вещей, зачем вы постоянно демонстрируете свои незнания?
Панель информации о позиции в стакане
 
Задаётся ли в настройках дата расчётов для отображения позиции в стакане или это очередной баг (версия 13.0.0.165)?
Закрывается DataSource при остановке скрипта?
 
Цитата
nikolz написал:
что не так?
Вопрос - в заголовке темы.
Закрывается DataSource при остановке скрипта?
 
nikolz,
Скрытый текст


Рано вам ещё называться начинающим программистом, почитайте ещё книжек.
Очередное зависание Lua-скрипта, в функции getDepoEx
 
Oleg Kuzembaev, все пользователи (целых два человека), которые провели тестирование на данных из архива, сообщают, что проблема воспроизводится.
Что у вас показывает скрипт из сообщения #6?
Очередное зависание Lua-скрипта, в функции getDepoEx
 
Цитата
Oleg Kuzembaev написал:
Воспроизвести ошибку не удалось.
После подключения к серверу спустя несколько дней лимиты по бумагам обновляются. Очевидно, что это уже не те данные, на которых воспроизводилась ошибка в представленном скрипте.
Вы проверяли на моём архиве без подключения к серверу?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Врёт ваша нейронка.

Цитата
О  trans_id торговая система ничего не знает, это внутренняя сущность сервера QUIK.
https://forum.quik.ru/messages/forum10/message30420/topic3525/#message30420
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
Nikolay написал:
[QUOTE]VPM написал:
А что brokerref он в одном колбеке приходит в другом нет
Такого не замечал.
brokerref - ненадёжный параметр. У меня он только в OnTransReply транслируется. В других колбэках его нет.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
VPM написал:
виртуальная позиция (book) расходится с реальной позицией на бирже (exchange).
Обычно информация о лимитах поступает позже информации по сделкам.
Если считать виртуальную позицию по сделкам, то может быть расхождение с реальной, пока с биржи не поступит информация об изменении лимитов.
Закрывается DataSource при остановке скрипта?
 
У меня одного ds:Close() после нажатия кнопки "Остановить" ничего не возвращает?
Закрывается DataSource при остановке скрипта?
 
Цитата
Oleg Kuzembaev написал:
Просьба прислать архив копии папки с терминалом нам на почту  quiksupport@arqatech.com
А у вас своего нет?
В каком потоке делать финализацию при останове скрипта?
 
Цитата
Йцукен написал:
Видно, что OnStop второго скрипта вызывается только после завершения main первого.
В версии 13.0.0 изменили схему: OnStop вызывается сразу после завершения OnStop предыдущего скрипта, не зависимо от того остановился ли main предыдущего скрипта.
Возможно, разработчики прочитали моё сообщение #4 или просто так совпало.
Отключать сборщик мусора при работе с колбеками. Вы прикалываетесь?
 
Вот что пишет ИИ:
Цитата
Почему остановка GC замедляет выполнение

1. Lua 5.4 использует инкрементальный/генерационный GC, оптимизированный под короткоживущие объекты. GC собирает их крошечными шагами (step) во время аллокаций, часто укладываясь в ~0.1–0.3 мкс на шаг. Это дешевле, чем отключённый GC.
2. При collectgarbage("stop") отключается не только сборка, но и оптимизированный путь аллокатора. Lua перестаёт переиспользовать недавно освобождённые блоки, чаще обращается к malloc/realloc ОС, что ведёт к:
  - Кэш-промахам (память выделяется фрагментированно)
  - Системным вызовам (рост brk/mmap)
  - Отсутствию minor-collection nursery, которая в Lua 5.4 работает почти бесплатно
Очередное зависание Lua-скрипта, в функции getDepoEx
 
Цитата
Oleg Kuzembaev написал:
Тест проводился на подключенном к серверу терминале
А на каком счёте тестировали? С рабочего места из моего архива или со своего, со своими настройками?
Поэтому я и спросил, что показывает у вас скрипт из сообщения #6, чтобы понимать, а то ли вы вообще тестировали.
Очередное зависание Lua-скрипта, в функции getDepoEx
 
Цитата
Oleg Kuzembaev написал:
Тест проводился на подключенном к серверу терминале
На момент публикации моего сообщения 30.05.2026 getDepoEx в опубликованном скрипте не завершала работу как при подключении к серверу, так и без подключения. Как я раннее писал, зависание происходит не всегда. И, помимо открытого графика, на это влияют лимиты по бумаге, которые запрашиваются в getDepoEx. В другой день, с другими лимитами, с другими параметрами в запросе зависания может не происходить. Поэтому я и сохранил то состояние, при котором можно гарантированно воспроизвести проблему и найти ошибку.
Спустя несколько дней, когда вы всё-таки соизволили запустить тест, лимиты по счёту 10382 уже обновились. Если вы вообще проверяли на том же счёте.
Но, видимо, ваша цель не устранение ошибок в вашем софте, а - отчитаться, что "у нас всё хорошо".

Цитата
Oleg Kuzembaev написал:
на подключенном к серверу терминале, что является корректным условием для работы скрипта.
Является ли вызов функции getDepoEx при отсутствии соединения с сервером некорректным?
Добавьте тогда в документацию, какие функции нельзя запускать при отсутствии соединения с сервером и что необходимо предпринять при разрыве соединения с сервером.
Очередное зависание Lua-скрипта, в функции getDepoEx
 
Цитата
Oleg Kuzembaev написал:
В ходе тестирования скрипта, у нас не возникло проблем, ошибок или зависаний Рабочего места.
Вы проверяли на рабочем месте из архива по ссылке в первом посте, без изменения настроек и кода скрипта и без подключения к серверу?
Закрывается DataSource при остановке скрипта?
 
Код
local run = true
function OnStop()
  run = nil
  message(tostring(ds:Close()))
end

function main()
  ds = assert(CreateDataSource(class, sec, INTERVAL_M5))
  while run do sleep(500) end
end

Код
local run = true
function OnStop()
  run = nil
end

function main()
  ds = assert(CreateDataSource(class, sec, INTERVAL_M5))
  while run do sleep(500) end
  message(tostring(ds:Close()))
end

Что в первом, что во втором случае, при нажатии на кнопку "Остановить" скрипт падает с ошибкой "bad argument #1 to 'tostring' (value expected)"
Очередное зависание Lua-скрипта, в функции getDepoEx
 
Станислав, я не знаю как вы тестируете, но из вашего скрина видно, что код getDepoEx("NC0011100000", "10382", "SBER", "NL0011100043", 20260601) не должен был вернуть table. Ну нет у вас лимитов с такими вводными.

Цитата
Станислав написал:
Стоит подключиться к серверу
и лимиты обновятся, это будет уже другой набор данных.

Цитата
Станислав написал:
Если использовать архив из первого сообщения, то проблема действительно воспроизводится, однако, только если не подключаться к серверу.
Я локализовал проблему, выложил архив, на котором воспроизводится описанная мной проблема. Что ещё нужно?
Очередное зависание Lua-скрипта, в функции getDepoEx
 
Цитата
Станислав написал:
Попробовал, не воспроизводиться.QUIK 13.0.0.165.
Вы что-то другое пробовали. В архиве, что я выложил (ссылка в первом посте), другие лимиты.
Очередное зависание Lua-скрипта, в функции getDepoEx
 
Oleg Kuzembaev, что показывает следующий скрипт?
Код
function main()
  local sec_code = "SBER"
  local n = getNumberOf("depo_limits")
  if n > 0 then
    message("Number depo_limits: " .. n)
    for i = 0, n - 1 do
      local l = getItem("depo_limits", i)
      message(l.sec_code .. ": limit_kind = " .. l.limit_kind .. "; currentbal = " .. l.currentbal .. "; wa_position_price = " .. l.wa_position_price)
    end
    message(tostring(getDepoEx("NC0011100000", "10382", "SBER", "NL0011100043", 20260601)))
  else
    message("depo_limits not found", 2)
  end
  message("Завершение работы main.")
end
В каком потоке делать финализацию при останове скрипта?
 
ИИ рекомендует:
Цитата
Как правильно организовывать остановку в QUIK
1. OnStop() только ставит флаг. Никаких циклов, очисток таблиц или долгих операций.
2. Очистка ресурсов выполняется в main() после выхода из рабочего цикла.
Кто что думает?
Очередное зависание Lua-скрипта, в функции getDepoEx
 
QUIK 13.0.0.165
Заинтересованные могут протестировать, скачав архив рабочего места по ссылке: https://cloud.mail.ru/public/PnRh/78X5kdGEB
Подключаться к серверу не требуется. Достаточно добавить в окно "Доступные скрипты" скрипт getDepoEx.lua (лежит в папке с программой) и запустить его.
Код
function main()
  local n = getNumberOf("depo_limits")
  message("Number depo_limits: " .. n)
  if n > 0 then
    getDepoEx("NC0011100000", "10382", "SBER", "NL0011100043", 20260601)
  end
  message("Завершение работы main.")
end

При запуске скрипта в окне "Системные сообщения" появляется сообщение "Number depo_limits: 4", и скрипт остаётся в запущенном состоянии. Сообщения "Завершение работы main." нет, что говорит о том, что не происходит выхода из функции getDepoEx.
При этом процесс info.exe грузит один из логических процессоров на 100%.
Сообщения об ошибках в Lua-скриптах не выводятся в окне сообщений
 
Если ошибки возникают в колбэках, то они выводятся в окно сообщений, а если ошибка в main, - то не выводится.
Сообщения об ошибках в Lua-скриптах не выводятся в окне сообщений
 
Почему-то сообщения об ошибках в Lua-скриптах не выводятся в окне сообщений и таблице системных сообщений.
Работа OnClose
 
Oleg Kuzembaev,
В руководстве пользователя QLua написано:
Цитата
IsWindowClosed

Функция предназначена для определения состояния окна таблицы «t_id».

Вызов IsWindowClosed внутри функции обратного вызова, заданной с помощью SetTableNotificationCallback(), всегда вернет «false».

Формат вызова:

BOOLEAN IsWindowClosed(NUMBER t_id)

Функция возвращает:

«false» – если окно таблицы «t_id» открыто в терминале;
«true» – если окно таблицы «t_id» закрыто пользователем вручную. Окно может быть открыто повторно с помощью функции CreateWindow;
«nil» – если таблица «t_id» не существует (указан несуществующий / некорректный идентификатор или таблица удалена функцией DestroyTable).
Но IsWindowClosed возвращает true для окна, которое не было закрыто пользователем вручную, при закрытии QUIK, загрузки настроек из wnd-файла, замены инструментов, что не соответствует документации.
Добавить время до микросекунд в стакан из getQuoteLevel2(), Добавить время до микросекунд в стакан из getQuoteLevel2()
 
Время последней записи (не заявки!) == время среза стакана.
Добавить время до микросекунд в стакан из getQuoteLevel2(), Добавить время до микросекунд в стакан из getQuoteLevel2()
 
nikolz, указывать надо время самой поздней записи, т.е. с максимальным значением поля moment (moment_ns). Это же очевидно.
Добавить время до микросекунд в стакан из getQuoteLevel2(), Добавить время до микросекунд в стакан из getQuoteLevel2()
 
nikolz,
getQuoteLevel2() возвращает "стакан" - таблицу заявок. Там нет сделок.
Указывать время последнего обновления записи, которое даёт шлюз ТС.
Работа OnClose
 
Цитата
Oleg Kuzembaev написал:
можно получать еще колбек о закрытии терминала и если последний не был получен, то с высокой долей вероятности окно было закрыто пользователем.
OnClose вызывается после закрытия всех окон. Таким образом, отсутствие OnClose ни о чём не говорит.
Вопрос ко всем, кто знает: какую таблицу возвращает getQuoteLevel2 если нет bid или ask?
 
Цитата
Serge123 написал:
функция getQuoteLevel2Ex
Эта функция отличается от getQuoteLevel2 тем, что вместо строк данных возвращает числовые - не нужно делать лишние преобразования "строка -> число".

Цитата
Alexander написал:
А вот зачем вариант со строками, где все цены и лоты в одну строку? Потом самому парсить эту строку в цикле? Потом из цикла всё это распихивать по своим таблицам или переменным? Зачем? Вам дана уже готовая таблица. Пользуйтесь. Если вам нужна компактность, сохранение, ну так кто мешает написать свои функции и из готовых таблиц слепить себе нужные строки? Ваш вариант будет ещё хуже, так как надо будет разбирать строки на отдельные данные через регулярки, это ещё дольше, чем у них на сях там всё уже по полочкам разложено.
Согласен, странное пожелание. Парсинг строк в Lua медленнее, чем просто взять значение из таблицы.
Добавить время до микросекунд в стакан из getQuoteLevel2(), Добавить время до микросекунд в стакан из getQuoteLevel2()
 
Цитата
Alena Mishina написал:
такого параметра мы не получаем из торговой системы
Иногда полезно заглядывать в документацию. Так, например, в шлюзе PLAZA II для многих таблиц транслируется время: параметры moment и moment_ns

Работа OnClose
 
Цитата
Oleg Kuzembaev написал:
Понять закрыто ли конкретное окно можно с помощью функции IsWindowClosed
Это не даёт информации о том, закрыто ли окно пользователем вручную, либо же окно уничтожено при закрытии терминала.
Страницы: 1 2 3 4 5 След.
Наверх