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

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

Страницы: 1 2 3 4 5 След.
В каком потоке делать финализацию при останове скрипта?
 
Цитата
Йцукен написал:
Видно, что 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
Это не даёт информации о том, закрыто ли окно пользователем вручную, либо же окно уничтожено при закрытии терминала.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
TGB,
Если без колбэков OnOrder и цикличного опроса активных заявок, то как, поделитесь секретом?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
TGB написал:
коллбек OnTransReply при выполнении  транзакций мной используется
OnTransReply вызывается при удалении заявки из Lua-скрипта.

Цитата
TGB написал:
В любом  случае обрабатывается только снимаемая заявка а не все активные заявки.
Тогда при удалении заявки, например, пользователем, брокером или биржей робот будет считать заявку активной.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
TGB написал:
Для просмотра изменений в заявках не надо перебирать все записи orders, stop_orders.
Цитата
TGB написал:
 Обрабатываются варианты:
1) удаления заявок;

Знаю методы:
1) колбэк;
2) либо регулярная проверка активной заявки в цикле main через getItem.
Во втором случае как раз надо перебирать все активные заявки, которые отслеживает скрипт. Или вы как-то по другому это делаете?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
TGB написал:
Для просмотра изменений в заявках не надо перебирать все записи orders, stop_orders.
Достаточно во вновь получаемых сделках (по изменению размера) таблицы traders выбирать trans_id (или номера ордеров) и просматривать только соответствующие заявки.
Вариант удаления заявки вы не рассматриваете?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
Nikolay написал:
Он и опрашивается, через запомненный индекс записи в таблице. Когда ордер найден в таблице, то повторно его иска не надо, просто получить запись в таблице с свежими данными.
В цикле вы дергаете getItem, независимо от того, изменились ли параметры заявки (заявок) или нет?  :what:
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
Nikolay написал:
Цитата
Йцукен написал:
Изменение параметров заявки не приводит к изменению количества записей в таблице. Об этом вы узнаете только через колбэк, либо через регулярный опрос уже существующих записей в таблице.
Да. Датчик температуры ничего не скажет об её изменении. Спросите - скажет.
При чём тут датчик температуры?
Если уж приводить аналогию, то, чтобы узнать изменение температуры отслеживаемого датчика, не нужно проверять изменение количества датчиков, а нужно опрашивать конкретный датчик.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
TGB написал:
Можно сделать паузу адаптивной к длительности основного цикла скрипта (это учтет все, в том числе и длительность обработки очереди):
А что это даёт?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
TGB написал:
можно реализовать проверкой (с использованием trans_id) в таблицах order, stop_order. И эту проверку надо выполнять  только, когда изменяется количество записей в них.
Изменение параметров заявки не приводит к изменению количества записей в таблице. Об этом вы узнаете только через колбэк, либо через регулярный опрос уже существующих записей в таблице.
Где смотреть вариационку?
 
Giulia, по моим наблюдениям так:

В клиринг после 23:50 с ПН по ПТ вариационная маржа начисляется за период с 19:00 предыдущего торгового дня по 19:00 текущего торгового дня.
При этом котировка последнего клиринга - это расчётная цена окончания основной торговой сессии в 19:00
CalcBuySell и getBuySellInfoEx неправильно считают для фьючерсов с валютой шага цены отличной от SUR
 
В QUIK была проблема (не знаю, починили ли): неверно рассчитывался объём ГО в заявках по ценам, отличным от котировки клиринга.
Как задать комментарий в заявке?
 
Пробовал:
CLIENT_CODE = <код клиента>/<комментарий>
CLIENT_CODE = <код клиента>//<комментарий>
CLIENT_CODE = /<комментарий>
CLIENT_CODE = //<комментарий>

В OnTransReply в поле brokerref отображается введённое в транзакции значение, а в OnOrder - всегда только <код клиента>
Где в QUIK посмотреть текущее значение денежных средств на срочной секции?
 
Ув. разработчики QUIK, разъясните, пожалуйста, из каких значений каких таблиц в QUIK можно узнать текущее значение денежных средств на срочной секции Московской биржи с учётом начисленной вариационной маржи за текущую сессию? Т.е., если прямо сейчас я закрою (закрыл) все раннее открытые позиции, то сколько у меня будет денежных средств после клиринговых расчётов, - где это можно увидеть?
Где смотреть вариационку?
 
Цитата

Промежуточный клиринг (ПК) отменяется и не будет проводиться
Изменения в процессах, связанные с отменой ПК:

Нет промежуточной переоценки, и учета, накопленного финансового результата в промежуточных регистрах
Экспирация контрактов ПК заменяется на экспирацию в торгах, с определением соответствующей ЦИ и пересчетом ГО по позициям
Параметр num_clr_2delivery будет изменен в рамках перехода на ЕТС – деление на 2 и округление в большую строну
Перестают отправляться отчеты, формируемые в ПК (dayriskparamsXXYY.csv; dayo07.csv; dayf07.csv; lldaymon.csv; daymonXXYY.csv)

Основной клиринг (ВК) в ЕТС делится на отдельные сущности:

Клиринговая сессия m-t-m – переоценка позиций, определение требований и обязательств (плановых остатков), лимитов (план + факт).
Расчетная клиринговая сессия – исполнение требований и обязательств и обновление фактических остатков
При этом Расчетные цены для клиринговой сессии m-t-m определяются с использованием данных на 19:00

https://www.moex.com/s3886

Но чё-то я ничерта не понял.
Если раньше сложив <Лимит открытых позиций> + <Накопленный доход> + <Вариационная маржа> можно было рассчитать текущие денежные средства в моменте, то как сейчас - не понятно.
Где смотреть вариационку?
 
Цитата
Giulia написал:
это маржа за период с 19:00 пятницы по время закрытия сделки сегодня. Почему?
Может быть, дело в том, что расчётные цены определяются в 19:00?

https://www.moex.com/s3886
Где смотреть вариационку?
 
Цитата
Giulia написал:
ВМ за 19:00-23:50. Но тогда по-прежнему где ВМ за 9:00-19:00?
Вот именно, а где вариационная маржа с начала торговой сессии?
Панель информации о позиции в стакане
 
Izotova Liliya, да вы ж можете сбросить пароли.
Панель информации о позиции в стакане
 
Цитата
Йцукен написал:
Проверил на другом счёте. По ВТБ позиций вообще нет. Но в стакане показывает.
Второй логин: U0229042
Панель информации о позиции в стакане
 
Izotova Liliya, во-первых, вы не очищаете настройки перед тестированием.
А потом вдруг выясняется: "ой, а у нас были такие-то настройки, поэтому не воспроизводилось".
Во-вторых, я указал логин: U0228637, через который вы могли подключиться и проверить, а не с админского места.
Панель информации о позиции в стакане
 
Izotova Liliya, я всю необходимую информацию предоставил.
Архив присылать не буду. Что толку?
Тут выкладывал архив с описанием проблемы: https://forum.quik.ru/forum10/topic9499/ Вы не соизволили скачать и проверить. Даже не ответили.
Будете вы исправлять ошибку в своём ПО или нет - мне всё равно.
Панель информации о позиции в стакане
 
Цитата
Izotova Liliya написал:
Для кода клиента 10910 попробуйте, пожалуйста, заново создать стакан котировок по инструменту SBER и проверить отображение позиции.
Я распаковал квик из архива quik_12.8.5_upd.zip в новую папку. Думаю, это больше, чем заново создать стакан.

Цитата
Izotova Liliya написал:
Касательно 2 и 4 скриншота просьба подробно описать последовательность действий
Это один скриншот. Открыты одновременно четыре стакана. Логин: U0228637
Скрытый текст

Проверил на другом счёте. По ВТБ позиций вообще нет. Но в стакане показывает.
Панель информации о позиции в стакане
 
Панель информации о позиции в стакане
 
QUIK 12.8.5.3
Причина очень медленной загрузки QUIK
 
Nikolay, я писал конкретно по вашей ситуации, где видны признаки проблем на локальном рабочем месте.
Судя по вашему описанию терминал обрабатывал колбэк OnTrade две с половиной минуты. И, как показывает мой опыт, даже, если новые данные поступили в терминал, он вам их не покажет, пока скрипты не обработают текущие данные.
Гарантируется ли вызов колбэка при получении Квиком новых данных?, Вопросы разработчикам QUIK
 
Немного изменил тестовый скрипт:
Скрытый текст

В Process Monitor видно 5 отправленных пакетов и 20 принятых, что соответствует 5 транзакциям и 20 колбэкам.
Скрытый текст

Т.ч., вопрос о наличии буфера на стороне клиента подтверждается.
Причём видно, что сохраняется хронология событий: после каждой sendTransaction следует OnTransReply, а затем OnTrade и OnOrder.
Гарантируется ли вызов колбэка при получении Квиком новых данных?, Вопросы разработчикам QUIK
 
Я понял: чтобы терминал показал нам данные, сначала он должен их расшифровать, но при отсутствии соединения с сервером, делать этого он не желает. Т.ч., эксперимент с отключением интернета не показателен.
Гарантируется ли вызов колбэка при получении Квиком новых данных?, Вопросы разработчикам QUIK
 
Цитата
TGB написал:
Поток, который мог бы их показать занят тем что генерит:
Так если в хронологическом порядке, то OnTrade и OnOrder были бы раньше, чем OnDisconnected

Цитата
TGB написал:
буфер, и если, вдруг, он реализован на стороне сервера
Да нет никакого буфера на стороне сервера. Все заявки и сделки на сервере хранятся в БД SQL. И при подключении к серверу тот отдаёт клиенту все пропущенные данные по заявкам/сделкам за текущую торговую сессию. Возможно, даже не пропущенные, а все, в т.ч. и полученные раннее, а клиент на своей стороне уже смотрит, какие данные он показывал, а каких ещё не было, и вызывает соответствующий колбэк.
Гарантируется ли вызов колбэка при получении Квиком новых данных?, Вопросы разработчикам QUIK
 
Цитата
TGB написал:
А если предположить, что пока вы отключали интерне, данные уже оказались в буфере?
Так чё ж они не доступны после выхода из колбэка OnParam?

Цитата
TGB написал:
Как вы думаете где могут "шляться" данные созданные 12:03:25.000  а выданные в коллбеке в 12:06:00.86?
С сервера получены после восстановления связи.
Гарантируется ли вызов колбэка при получении Квиком новых данных?, Вопросы разработчикам QUIK
 
В коде выше опечатка. Должно быть так:
Скрытый текст

И соответственно вывод будет:
Скрытый текст
Гарантируется ли вызов колбэка при получении Квиком новых данных?, Вопросы разработчикам QUIK
 
Цитата
Йцукен написал:
А, вы про OnTransReply? Похоже, что вы правы. Поскольку сервер QUIK не делает повторной попытки направить ответ по транзакции, то можно предположить, что пока терминал обрабатывал колбэк OnParam, то данные с сервера таки получены и сохранены в память.
Похоже, предыдущий вывод преждевременный: если отключить интернет через несколько секунд после отправки транзакций, когда ответ по транзакциям уже должен прийти, то никаких новых данных в main не будет. Т.е., версия с буфером не подтверждается.

Скрытый текст
Результат:
Скрытый текст
Страницы: 1 2 3 4 5 След.
Наверх