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

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

Страницы: 1 2 3 4 След.
Система принятия решений и/или Нечеткая логика(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 не будет. Т.е., версия с буфером не подтверждается.

Скрытый текст
Результат:
Скрытый текст
Гарантируется ли вызов колбэка при получении Квиком новых данных?, Вопросы разработчикам QUIK
 
Цитата
TGB написал:
Да в main их не видно, но я имею ввиду QUIK. Если вы сделаете задержку в OnParam 10000, то это не значит, что биржа будет ждать перед отсылкой данных о выставлении заявки 10 сек. пока один из 100000 терминалов QUIK не разблокирует свой поток обработки коллбеков.
А, вы про OnTransReply? Похоже, что вы правы. Поскольку сервер QUIK не делает повторной попытки направить ответ по транзакции, то можно предположить, что пока терминал обрабатывал колбэк OnParam, то данные с сервера таки получены и сохранены в память.
Гарантируется ли вызов колбэка при получении Квиком новых данных?, Вопросы разработчикам QUIK
 
Цитата
TGB написал:
В выложенном коде отсутствует таблица transaction (шаблон заявки).
Там были транзакции ACTION="NEW_ORDER"

Цитата
TGB написал:
но данные в QUIK при этом приходят (это видно в потоке main).

А я вижу, что новые данные в main доступны только после выхода из OnParam. Когда эти данные пришли - не вижу.
Код
18:41:29.218  Start OnParam                 
18:41:29.218                orders: 58
...
18:41:32.234  End OnParam                 
...
18:41:32.234                orders: 59
Гарантируется ли вызов колбэка при получении Квиком новых данных?, Вопросы разработчикам QUIK
 
Цитата
TGB написал:
Цитата
paluke написал:
Так коллбеки в том же потоке, что и прием данных
Вы это проверяли?

Пока скрипт обрабатывает колбэк, он или другие скрипты могут отправлять транзакции на сервер из main. Но новые данные с сервера скрипты не получат, пока поток колбэков не освободится.

Скрытый текст
Результат:
Скрытый текст
Скорость обработки заявок при помощи OnTransReply gate_reply_time
 
Цитата
Egor Zaytsev написал:
Время gate_reply_time проставляется шлюзом, а date_time сервером. Расхождения могут быть, когда шлюз и сервер стоят на разных "машинах", однако если шлюз и сервер стоят рядом, то все равно требуется время пока шлюз передаст транзакцию серверу.
Цитата
Egor Zaytsev написал:
gate_reply_time - время отправки ответа на транзакцию шлюзом (заполняется шлюзом при отправке ответа на транзакцию серверу Quik) date_time - время получения сервером ответа на транзакцию от шлюза (заполняется серверным временем, когда он получает ответ на транзакцию от шлюза)
Добавьте это в руководство пользователя QLua
Причина очень медленной загрузки QUIK
 
Цитата
Nikolay написал:
В  итоге сканер сделок по таблице увидел новую сделку от 14:57:01, сканер  состояния ордеров через таблицы увидел изменение состояния ордера на  исполнен в 14:59:31 - две с половиной минуты от сделки.
При этом колбеки OnTrade и OnOrder пришли в 14:59:32, т.е. на секунду позже.
Можно предположить, что основной поток был чем-то занят, поэтому колбэк OnTrade был вызван с опозданием. И терминал в это время не мог принимать и отправлять данные на сервер, в связи с чем получил информацию по заявке только через две с половиной минуты.
Причина очень медленной загрузки QUIK
 
Цитата
Nikolay написал:
В  итоге сканер сделок по таблице увидел новую сделку от 14:57:01, сканер  состояния ордеров через таблицы увидел изменение состояния ордера на  исполнен в 14:59:31 - две с половиной минуты от сделки.
Это разные скрипты или один?
При запусках коллбеков не восстанавливается состояние скрипта по сборке мусора (QUIK 12.2.1.2)
 
Цитата
TGB написал:
У меня сборка мусора возникает с интервалом ~15 сек. и длится < 1 млс.
Как вы узнали?
В каком потоке делать финализацию при останове скрипта?
 
Если ставить флаг завершения скрипта в OnClose, то можно финализацию делать в main. Тогда при закрытии квика скрипты будут завершаться параллельно.
В каком потоке делать финализацию при останове скрипта?
 
Похоже, скрипты в любом случае останавливаются последовательно.
Логи двух скриптов при закрытии QUIK 12.8.5.3
Код
11.03.26 21:34:50.907 OnStop
11.03.26 21:34:51.892 main
11.03.26 21:34:52.908 main
11.03.26 21:34:53.923 main
11.03.26 21:34:54.923 main
11.03.26 21:34:55.939 main
Код
11.03.26 21:34:56.923 OnStop
11.03.26 21:34:56.939 main
11.03.26 21:34:57.955 main
11.03.26 21:34:58.970 main
11.03.26 21:34:59.986 main
11.03.26 21:35:00.987 main
11.03.26 21:35:02.003 main

Видно, что OnStop второго скрипта вызывается только после завершения main первого.
Да и при остановке скриптов кнопкой "Остановить" GUI подвисает, пока скрипт полностью не остановится, независимо, в каком потоке происходит финализация.
В каком потоке делать финализацию при останове скрипта?
 
Код
function OnStop()
  run = nil
  t_id = nil
end

function main()
  while run do
    SetCell(t_id, ...)
    ...
    sleep(1000)
  end
  finalize()
end

Есть вероятность, что после срабатывания OnStop до удаления идентификатора таблицы (t_id = nil) main попытается записать в таблицу (SetCell)?
В каком потоке делать финализацию при останове скрипта?
 
По DestroyTable - в курсе, что её запускать лучше в OnStop
В каком потоке делать финализацию при останове скрипта?
 
Если делать финализацию OnStop, то при закрытии квика скрипты будут останавливаться последовательно, т.е. ждать друг друга.
Если - в main, то есть вероятность, что main не уложится в отведённые 5 сек, и что-нибудь не успеет. Тогда надо в OnStop делать return побольше. Есть ли тут подводные камни?
Поделитесь опытом, как вы делаете?
Кто меняет разрешение системного таймера?
 
https://habr.com/ru/companies/intel/articles/186998/
Можно ли уточнить задержку в Интернете до выставления заявок?, Как можно раньше выставить заявку после начала их приёма
 
Цитата
nikolz написал:
Обсуждаем не функцию sleep
А вы какую-то другую функцию используете?

Цитата
nikolz написал:
Оба варианта останавливают поток до наступления указанного времени.
Вариант из сообщения #25 - да.
Ваш вариант - нет. Он некорректно сработает, как в описанном выше случае, так и в случае перевода часов, например, при синхронизации.

Цитата
nikolz написал:
если в цикле применяете многократно sleep, то результат имеет большую погрешность по сравнению с однократным на весь интервал времени.
Отнюдь, количество вызовов sleep в цикле вообще не имеет значения.
Поскольку в примере #25 выход из цикла происходит при достижении заданного времени, то погрешность будет не более максимального значения из max(квант_времени, значение_в_sleep) + погрешность os.time()
Изучите, что такое погрешность и как она определяется, прежде, чем пытаться рассуждать на эту тему.

Цитата
nikolz написал:
если в цикле sleep применяется с минимальным интервалом а весь интервал ожидание существенно больше ,то процессор будет лишь греть воздух выполняя многократные вызовы sleep.
Поставьте sleep побольше, в чём проблема?
Код
  local function waitForDateTime(datetime)
    local seconds_since_epoch = os.time(datetime)
    assert(os.time() < seconds_since_epoch)
    while seconds_since_epoch - os.time() > 1 do sleep(1000) end
    while os.time() < seconds_since_epoch do sleep(1) end
  end
Свободное перемещение графика
 
Nikolay, а я где-то написал про клиентов? Безусловно вы правы в том, что клиентами ARQA являются проф.участники РЦБ. Но кто являются основными пользователями QUIK? Если "розничные спекулянты", как вы изволили выразится, не будут пользоваться квиком, то кто будет покупать лицензии на десятки тысяч рабочих мест?
Свободное перемещение графика
 
Цитата
Karina Dmitrieva написал:
Цитата
На мой взгляд будет правильнее выносить на голосование на внесение, изменение того или иного функционала, провести опрос пользователей.
Благодарим за Ваше предложение.
Мы неоднократно задумывались над данной возможностью, считая такой механизм весьма демократичным и перспективным, но в силу некоторых объективных обстоятельств мы пока не готовы к реализации такого подхода.
Однако данную идею в голове держим, и, возможно, что в будущем позиция по данной теме изменится.

Дарю идею:
В терминале QUIK добавляете таблицу "Пожелания пользователей", в которой отмечаете присвоенный приоритет и количество проголосовавших.
Каждый пользователь может проголосовать один раз за любое пожелание. Все голоса сохраняются на сервере брокера, который периодически присылает в ARQA файл с голосами. Вы сводите отчёты всех брокеров воедино и рассылаете им обновлённые списки.
А то сейчас я даже не представляю, как вы определяете сколько человек заинтересованы в той или иной доработке.
Если будут вопросы, - обращайтесь :wink:
Можно ли уточнить задержку в Интернете до выставления заявок?, Как можно раньше выставить заявку после начала их приёма
 
Цитата
nikolz написал:
Можете объяснить как Вы к этому пришли?
На практике.
https://support.microsoft.com/ru-ru/windows/завершение-работы-компьютера-перевод-его-в-спящий-режим-или-в-режим-гибернации-2941d165-7d0a-a5e8-c5ad-8c972e8e6eff

Цитата
nikolz написал:
Оба варианта останавливают поток до наступления указанного времени.
Нет. sleep приостанавливает выполнение скрипта на заданное количество миллисекунд.
Можно ли уточнить задержку в Интернете до выставления заявок?, Как можно раньше выставить заявку после начала их приёма
 
Цитата
Ziveleos написал:
Немного доработанный вариант:
Код
function WakeUpAt(hour,min,sec,ms)
  local t = os.sysdate()
  local now = os.time(t)
  local tail = t.ms
  t.hour = hour
  t.min = min
  t.sec = sec
  sleep(((os.time(t)- now)*1000)- tail + ms)
end

Если компьютер будет кратковременно переводиться в режим сна, то время запланированной задачи отодвинется на время сна. Поэтому вариант с периодической проверкой текущего времени надёжней.
Свободное перемещение графика
 
Цитата
Karina Dmitrieva написал:
Каждое пожелание в обязательном порядке рассматривает и оценивает аналитическая группа компании.
Судя по тому, что некоторые пожелания так и остаются десятилетиями висеть на стадии "рассмотрения", аналитическая группа просто не справляется со шквалом пожеланий))
Стоп-заявка выставляется как лимитная.
 
Цитата
nikolz написал:
ГК РФ
Конкретную норму можете указать?
os.sysdate()
 
При системном таймере 1 ms os.sysdate() "тикает" не равномерно.

Код
  local function difftime(t1, t2)
    return os.time(t1) - os.time(t2) + (t1.mcs - t2.mcs) / 1000000
  end

  local n = 0
  local sum = 0
  local max = 0
  local min
  while run do
    local t1 = os.sysdate()
    local t2 = os.sysdate()
    while t1.mcs == t2.mcs do t2 = os.sysdate() end
    local dt = difftime(t2, t1) * 1000
    --message(string.format("%.3f ms", dt))
    n = n + 1
    sum = sum + dt
    if dt > max then max = dt end
    if min == nil or dt < min then min = dt end
    sleep(1)
  end
  message(string.format("avg: %.3f;  max: %.3f;  min: %.3f", sum / n, max, min))

Результат в Win11:
Код
avg: 1.049;  max: 6.480;  min: 0.067
Т.е., шаг меняется от 67 мкс до 6,4 с
Страницы: 1 2 3 4 След.
Наверх