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

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

Страницы: Пред. 1 2 3 4 След.
Как зарегистрировать пожелание?
 
Как тут зарегистрировать пожелание?
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
TGB, колбэки внутри sleep должны вызываться или как?
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
TGB, можете написать прсевдокод, как по-вашему, использовать очередь событий?
Причины тормозов при старте. Вскрытие покажет.
 
nikolz, доказательства чего?
Причины тормозов при старте. Вскрытие покажет.
 
Цитата
nikolz написал:
На объем и время при старте  влияет повторный расчет индикаторов на Lua,
 циклический расчет индикаторов (возможно и графиков) для каждой свечи при старте
  и размер сохраненной истории, по которым считаются эти индикаторы.
Но как вы догадались, Холмс?  :lol:
Расчёт индикатора при старте не должен сильно отличаться от расчёта при его добавлении на график. При добавлении даже три раза пересчитывается, а при старте терминала - "только" два раза.
Но если в индикаторе используется getCandlesByIndex, то есть свои нюансы в расчётах.
Чтобы оценить влияние Lua-индикаторов, можно переименовать папку LuaIndicators, и сравнить время загрузки с индикаторами и без.
Гарантируется ли вызов колбэка при получении Квиком новых данных?, Вопросы разработчикам QUIK
 
В документе "Использование Lua в Рабочем месте QUIK.pdf" на стр. 5-8 приведено описание событийной модели, как одного из подходов написания скриптов Lua в Рабочем месте QUIK.
На стр. 8 приведён пример скрипта NumberOfTradesOnCallbacks.lua

Вопросы:
1) Гарантирует ли данный подход, что все данные по сделкам, которые получит терминал с момента запуска скрипта, будут обработаны скриптом в колбэке OnTrade?
2) Может ли быть такое, что данные на рабочее место поступили, а колбэк не был вызван?
getDepoEx в OnInit вешает терминал
 
Цитата
Oleg Kuzembaev написал:
Рабочее место никак не реагирует на нажатия?
Не реагирует.

Цитата
Oleg Kuzembaev написал:
Данные в таблицах обновляются?
Вы точно попытались? В рабочем месте, архив которого я выложил, открыто всего два окна: график и "Доступные скрипты".
Данные в каких таблицах, по вашему, должны обновляться?
Не приходит полная версия OnTrade
 
Цитата
Nikolay написал:
Вы в документации видите утверждение о гарантированности доставки, вызова. А если нет, то значит это не ошибка, а особенность. В документации к RabbitMQ гарантируют доставку, а здесь нет.
Я не об этом спросил.
Вы утверждаете
Цитата
Nikolay написал:
Банально не был вызван, а в таблице данные корректны. В текущих версиях это очень редко, а ранее было не так и редко.
Я и спросил были ли сообщения от пользователей об этих случаях, когда данные есть, а колбэка не было?
Не приходит полная версия OnTrade
 
Цитата
Nikolay написал:
Банально не был вызван, а в таблице данные корректны. В текущих версиях это очень редко, а ранее было не так и редко.
Чёт я такого не припоминаю, можно ссылку на обсуждение данной проблемы?
Не приходит полная версия OnTrade
 
Цитата
VPM написал:
Если колбэк потерян, система обнаружит это при следующем опросе и скорректирует состояние.
Цитата
Nikolay написал:
ориентируемся на колбек. Если он не пришел, каким-то образом, скорее всего с некой периодичностью читаем данные и сверяем.
Я всё никак не пойму, о потерях каких колбэков речь? Если колбэк не получен, то и в таблицах не будет информации, что вы там собираетесь сверять?
getDepoEx в OnInit вешает терминал
 
Oleg Kuzembaev, я привёл минимальный код, который гарантированно приводит к зависанию в описанной мной ситуации. По ссылке в первом сообщении есть архив рабочего места, на котором это можно проверить.
getDepoEx в OnInit вешает терминал
 
Вот такой код вешает QUIK 12.8.3.4 при открытом графике SBER с включенной настройкой показывать уровень позиции.
Код
function OnInit()
  getDepoEx("NC0011100000", "10547", "SBER", "NL0011100043", 20260216)
end

Ссылка на архив рабочего места. Зависает в т.ч. без подключения к серверу. При запуске скрипта после подключения - может зависнуть, а может и не зависнуть  :what:
Не приходит полная версия OnTrade
 
Цитата
TGB написал:
Вы проверяли задержку между коллбэком с заполненными параметрами и появлением записи в таблице? Если нет, то проверьте.
Зачем?
Не приходит полная версия OnTrade
 
Цитата
TGB написал:
не вижу смысла возни с коллбеками
Это ваш выбор. Но я написал о другом.
Ваш подход также не исключает получения "сырых", как вы выразились, колбэков по заявкам / сделкам.
Просто вы получаете их гораздо реже в силу того, что, как правило, колбэки с заполненными параметрами идут сразу следом за частично заполненными. Часто в ту же миллисекунду. Поэтому в таблице вы уже видите все параметры.
Но это не исключает вероятности получения "сырых" данных, о чём вы и написали в этой теме: https://forum.quik.ru/messages/forum10/message78826/topic9187/#message78826
Ваш подход мне понятен, и он имеет свои плюсы.
Но что на счёт рыночных данных по инструментам?
Колбэки OnParam и OnQuote сообщают, когда произошло изменение. Как вы определяете эти изменения?
Не приходит полная версия OnTrade
 
Цитата
TGB написал:
Зачем вы отрабатываете "сырые" коллбеки OnTrade?
Но вы так-то тоже обрабатываете "сырые" колбэки и получаете соответствующие проблемы, которые потом закрываете "костылями".
Не приходит полная версия OnTrade
 
Цитата
User12501 написал:
Но возможно именно у тех сделок, о которых речь, не было. Не проверял, в следующий раз как случится - посмотрю.
Вот с этого и надо было начинать.
Какой ACTION указан у транзакции, сделки по которым без trans_id?
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
Цитата
TGB написал:
В существующей версии QUIK выполнение коллбека блокируется до тех пор пока в потоке main не выполнится sleep или сишная функция.     Выше написанное означает полную зависимость служебного потока от пользовательского. Зачем это сделано в QUIKe?
Блокируется на время выполнения байт-кода. Не представляю, какой код нужно написать без вызова сишных функций, выполняющийся длительное время, чтобы это можно было заметить.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
VPM написал:
А Не смущает то что мы ее задаем и вынуждены контролировать?
Для чего?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Nikolay, а для чего вам знать размер очереди? Вы же не извлекаете из середины?
Если организуется FIFO, то берётся первый элемент из очереди до тех пор, пока там что-то есть.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
Nikolay написал:
Цитата
Йцукен написал:
Не факт
Да, но потокобезопасность - это гарантия, а не вероятность.
Я говорю, что сомнительно, что то, о чём вы пишите, вообще может произойти в Lua 5.4. Потому что там байт-код, который по определению выполняется под блокировкой.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
Nikolay написал:
в момент получения размера, другой поток изменит last или first
Не факт
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
Nikolay написал:
Потому что в момент получения размера, другой поток изменит last или first
При обращении к элементу с индексом, равным размеру очереди вы не получите nil в любом случае. В этом смысле работа с очередью потокобезопасна, если запись только - в одном потоке, а извлечение - в другом.
Но, если вы одновременно добавляете элементы в разных потоках или извлекаете в разных потоках, то да, нужно код оборачивать в ssort, например.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
VPM написал:
---- lifo из двусвязной очереди и пример позволят вести себя как стек - обеспечивая LIFO-порядок
Можно гораздо проще:
Код
local LIFO = {}
LIFO.__index = LIFO
function LIFO.new()
  return setmetatable({}, LIFO)
end
function LIFO:push(v)
  self[#self+1] = v
end
function LIFO:pop()
  local idx = #self
  if idx == 0 then return nil end
  local v = self[idx]
  self[idx] = nil
  return v
end
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
Nikolay написал:
размер уже можно получить кривой.
Почему?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
Nikolay написал:
И как она стала потокобезопасной в Lua, где этого нет.
Добавление элемента в начало очереди в одном потоке не приводит к тому, что при попытке в другом потоке извлечь последний элемент возвращается nil.

Цитата
Nikolay написал:
Когда я говорил о двойной очереди, я говорил именно о двух очередях.
А можно ссылку на это обсуждение?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
VPM написал:
-- Создание LIFO из двусвязанной очереди
table.insert / table.remove делают то же самое, только быстрее.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
Йцукен написал:
table.insert
* table.remove
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
VPM написал:
это же просто двойная очередь, с которой я разбирался и только ленивый меня "по столу носом не возил". Более медленный вариант, чем скажем кольцевой буфер?
А что сравнивать, если они для разных задач предназначены?
Кольцевой буфер - для хранения ограниченного количества элементов. Индексация всё время сдвигается вправо. Возможно удаление и изменение элементов с любым индексом.
Очередь из сообщения #699 аналог обычной таблицы с индексацией, начиная с 1. Используется, когда надо удалять элементы в начале таблицы, т.к. table.insert с этой задачей плохо справляется.
Приколы терминала QUIK
 
Цитата
nikolz написал:
получаю большую загрузку процессора (на 8.7 такого не было)
-----------------------
Тогда я удаляю свой скрипт
Загрузка процессора возвращается в норму
Без обид, но вы просто не умеете программировать  :lol:
свободные средства для срочного рынка на едином счете
 
У некоторых брокеров на срочной секции комиссия = комиссии биржи. Т.е., если биржевая комиссия = 0, то и брокерская = 0.
Но, если вы делаете тейкерские сделки по инструментам, где комиссия больше рубля, то очень дорого выходит.
Новый период и время проведения торгов на бирже.
 
Какой параметр на срочной секции показывает время аукциона (8:59) и начала торгов (9:00)?
STARTTIME выдаёт: "100000.000000" ("10:00:00")
Не приходит полная версия OnTrade
 
User12501, по каким классам инструментов наблюдается?
В самой таблице сделок trans_id есть?
onstop и колбек пользовательского окна
 
Цитата
tohoki написал:
поменять местами во времени реакцию на колбеки qtable_close и onstop, чтобы они обрабатывались в нормальном порядке. Именно в том, как они реально возникли.
Первым должен быть OnClose, а после - QTABLE_CLOSE.
onstop и колбек пользовательского окна
 
Цитата
tohoki написал:
и при закрытии скрипта и при закрытии терминала мы увидим в debugview только QTABLE_CLOSE и не увидим ONSTOP
Значит main завершился раньше. Надо ставить таймаут в конце main с ожиданием сигнала из OnClose / OnStop. Если по завершении этого времени сигнал не получен, считать, что таблица закрыта пользователем.

Цитата
tohoki написал:
такая архитектура приводит к тому, .что нормальное человеческое событийное программирование придется разбавлять невнятным винегретом из каких то переменных и непонятных таймаутов с потолка.
Да.
onstop и колбек пользовательского окна
 
Цитата
Ziveleos написал:
У меня так:
Автору надо, чтобы скрипт останавливался при закрытии таблицы.
onstop и колбек пользовательского окна
 
Цитата
Ziveleos написал:
Цитата
tohoki написал:
при закрытии скрипта и при закрытии терминала мы увидим в debugview только QTABLE_CLOSE и не увидим ONSTOP.
Всё с точностью до наоборот.
Может такое произойти, что скрипт остановится раньше, чем будет получен колбэк OnStop / OnClose (когда терминал долго закрывается, например).
Может ли уменьшиться количество свечей на графике в течение дня?
 
Сегодня в 10:12 на минутном графике Сбербанка (TQBR) CreateDataSource показала 66725 свечей.
После я перезагрузил QUIK (12.8.3), а когда подключился к тому же серверу, то свечей стало меньше - 65776 (в 10:59). Через час, в 11:59 - 65836 свечей.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
А, разобрался: функция Squeeze возвращает индекс в массиве "по кольцу" в пределах заданного периода.
При запусках коллбеков не восстанавливается состояние скрипта по сборке мусора (QUIK 12.2.1.2)
 
Цитата
TGB написал:
могут быть участки скрипта критичные по времени выполнения, на которых они имеют возможность отключать, но потом восстанавливать сборку мусора.
Можете привести пример кода, где отключение сборщика мусора увеличит его выполнение?
А то у меня наблюдается ровно обратная ситуация.
При запусках коллбеков не восстанавливается состояние скрипта по сборке мусора (QUIK 12.2.1.2)
 
Цитата
TGB написал:
Разработчик скрипта может в какой-то момент отключить на какое то время уборку мусора
Можно. А зачем?
Лишние вызовы OnAllTrade
 
Часть сделок прилетает повторно. Воспроизводится не всегда. Но, если в окне, где перезаказывали обезличенные сделки, нажать кнопку "Сохранить", то вероятность повторного получения сделок выше.
Лишние вызовы OnAllTrade
 
При перезаказе обезличенных сделок суммарное количество вызовов OnAllTrade больше, чем есть сделок на самом деле.
QUIK-Junior 12.8.3 и 12.5.0
Код
local run = false
function OnStop()
  run = nil
end

local a = 0
function OnAllTrade(alltrade)
  if run ~= true then return end
  a = a + 1
end

function main()
  local n, m
  while run ~= nil and 0 < getNumberOf("all_trades") do  -- ожидание перезаказа обезличенных сделок
    n = getNumberOf("all_trades")
    sleep(1)
  end
  if run ~= nil then
    run = true
    message("start: " .. a)
    repeat
      sleep(1)
      m = getNumberOf("all_trades")
    until not run or n <= m
    run = false
    message("getNumberOf: " .. m .. "\nOnAllTrade: " .. a)
  end
end

Результат:
Цитата
getNumberOf: 194038
OnAllTrade: 239930
В таблице обезличенных сделок количество совпадает с тем, что показывает getNumberOf.
Скрипт правильно ли написан
 
Цитата
Ziveleos написал:
в qlua нет функции print
Вообще-то есть. Но куда она выводит текст - не понятно.
Проблема с нажатием правой кнопки
 
Цитата
Anton Belonogov написал:
Мы можем зарегистрировать пожелание на доработку ПО для добавления такой возможности в будущих версиях.
А толку?
https://forum.quik.ru/messages/forum10/message48510/topic5808/#message48510
https://forum.quik.ru/messages/forum10/message42293/topic4921/#message42293
https://forum.quik.ru/messages/forum1/message58929/topic6811/#message58929
Задавать списки классов и кодов инструментов, для которых будут вызываться колбэки OnAllTrade, OnParam, OnQuote в Lua-скрипте
 
В Lua сделать возможным задавать списки классов и кодов инструментов, для которых будут вызываться колбэки OnAllTrade, OnParam, OnQuote в Lua-скрипте.

Пояснение:
Сейчас, если в Lua-скрипте, заданы функции обратного вызова, в частности OnAllTrade, OnParam, OnQuote, то они будут вызываться для всех инструментов, данные по которым поступают в терминал, что влечёт высокий оверхэд на вызов этих самых колбэков.
Под вызовом колбэков понимается именно их вызов терминалом. Не путать с исполнением Lua-кода пользовательской функции.
Проблемная работа программы с луа роботами, Проблемная работа программы с луа роботами
 
Цитата
nikolz написал:
измеряете время от входа в колбек до входа в функцию main.
Ясно, к вам вопросов больше нет.
Очевидно (но, видимо, не всем), что таким образом не возможно измерить время, затрачиваемое на вызов колбэка. Не путать со временем исполнения кода пользовательской функции колбэка.
Проблемная работа программы с луа роботами, Проблемная работа программы с луа роботами
 
Цитата
Nikolay написал:
Цитата
Йцукен написал:
OnAllTrade
Этот колбек самый опасный.
В каком смысле?
Проблемная работа программы с луа роботами, Проблемная работа программы с луа роботами
 
Цитата
nikolz написал:
На него затрачивается не более  5 мкс.
Интересно, как вы это измерили?  :shock:
При запусках коллбеков не восстанавливается состояние скрипта по сборке мусора (QUIK 12.2.1.2)
 
Нужно ли при завершении скрипта принудительно вызывать collectgarbage()?
Проблемная работа программы с луа роботами, Проблемная работа программы с луа роботами
 
Оверхед от вызова колбэков высокий, независимо от кода внутри колбэка.
Я вот думаю отказаться от OnAllTrade совсем.
Да и  от OnParam стоило бы отказаться, поскольку при включении "умного" заказа данных, терминал тянет данные почти по всем классам. Но в этом случае придётся постоянно в main опрашивать на наличие новых данных по инструментам, что отрицательно скажется на производительности.
Страницы: Пред. 1 2 3 4 След.
Наверх