В Новосибирске, когда то была хорошая школа IT-шников. И что-то, наверное, от нее осталось. Я надеюсь, что архитектором QUIK в текущий момент является один из выпускников этой школы. В QUIK все равно будут вноситься изменения (чтобы оставаться «наплаву»). И мне видится, что улучшить QUIK, помимо исправления существующих, неизбежных ошибок, можно внеся в него следующие изменения/дополнения: 1) В текущей версии в одном основном потоке обслуживаются: - запуск всех Lua-скриптов пользователя; - запуск коллбеков всех Lua-скриптов пользователя; -- обработка всех коллбеков таблиц QUIK (это не таблицы Lua); -- обработка всех индикаторов пользователя. Притом, что в текущий момент у подавляющего количества ПК много ядер ЦП, написанное выше явный перебор. Мне, представляется, что нет проблем перечисленное выше обрабатывать в отдельных потоках. Иначе, это ограничение пользователя в использовании возможностей его ПК. 2) Интерфейс взаимодействия QUIK c Lua-скриптом пользователя, реализованный в виде коллбекков, предполагает многопоточный режим использования Lua,. порождающий неприятные проблемы параллельного программирования (для решения которых сами же разработчики предлагают использовать потокобезопасную очередь между коллбеками и потоком main). Мне представляется, что имеет смысл вместо коллбеков использовать активную очередь событий, При этом не требуется использовать Lua в многопоточном, редко используемом и не очень стабильном режиме. При этом не будет проблем с подключением новых версий Lua. Более того, скрипты пользователя будут выполняться несколько быстрее из-за отсутствия синхронизации, требуемой в многопоточном варианте использования Lua. 3) В QUIK реализована функциональность просмотра графика котировок бумаг QUIK. Но отсутствует возможность просмотра котировок бумаг, сохраненных во внешних файлах. С учетом существующей функциональности QUIK, как мне представляется, реализация этой возможности не потребует больших усилий.
1) - ошибочное утверждение. ------------------ Вот доказательства: - запускаем QUIK и смотрим сколько потоков используется без подключения к серверу:
При запуске QUIK создает 5 потоков. (это уже больше чем число ядер) --------------------------------- - запускаем скрипт
Потоков уже 8. ---------------------------------- -- Запускаем еще один скрипт
Потоков уже 9 ----------------------------- -- Запускаем третий скрипт
Потоков уже 10. ===================== 2) - Разработчики дали решение этой проблемы. Оно прекрасно работает. Так как QUIK - это бесплатное приложение, то дареному в... не заглядывают. сделать что-то еще - это их право, но не обязанность. ================== 3) - с этим согласен. Хотя бы просто открыли формат файлов dat. Остальное я бы написал и выложил в свободный доступ. ----------------- Даже макрософт выкладывает форматы свои файлов.
Где вы у меня прочитали, что все запущенные пользовательские скрипты работают в одном потоке? У меня написано:
Цитата
TGB написал: В текущей версии в одном основном потоке обслуживаются: - запуск всех Lua-скриптов пользователя; - запуск коллбеков всех Lua-скриптов пользователя; - обработка всех коллбеков таблиц QUIK (это не таблицы Lua); - обработка всех индикаторов пользователя.
Вам до сих пор неизвестно, что в QUIK существует служебный, так называемый основной единственный поток, выполняющий то, что перечислено мною выше? Когда же вы научитесь читать чужие сообщения?
2.
Цитата
nikolz написал: Разработчики дали решение этой проблемы. Оно прекрасно работает. Так как QUIK - это бесплатное приложение, то дареному в... не заглядывают. сделать что-то еще - это их право, но не обязанность.
Вы, похоже, очень наивны и полагаете, что разработчики работают за бесплатно? Можно, наверное как то сообразить, что часть комиссии, уплачиваемая брокерам пользователями, идет на зарплату разработчикам, а также в доход акционерам ARQA.
TGB написал: 2) Интерфейс взаимодействия QUIK c Lua-скриптом пользователя, реализованный в виде коллбекков, предполагает многопоточный режим использования Lua,. порождающий неприятные проблемы параллельного программирования (для решения которых сами же разработчики предлагают использовать потокобезопасную очередь между коллбеками и потоком main). Мне представляется, что имеет смысл вместо коллбеков использовать активную очередь событий, При этом не требуется использовать Lua в многопоточном, редко используемом и не очень стабильном режиме. При этом не будет проблем с подключением новых версий Lua. Более того, скрипты пользователя будут выполняться несколько быстрее из-за отсутствия синхронизации, требуемой в многопоточном варианте использования Lua.
TGB, Не люблю высказываться на подобные темы, но ту Вы даже меня удивили. Мир стоит на пороге квантовых вычислений, а Вы предлагаете еще дальше откатиться в средние века. Создать "активную очередь событий" не знаю что Вы под этим понятием имеете ввиду, но очередь предполагает последовательное выполнение (вычисления) кода. О какой же многопоточности речь идет, все коллбекки исполняются в основном потоке, асинхронность создается в момент срабатывания функций обратного вызова, т.е. вызвали что то сделали и снова последовательное выполнение. При этом Вы сами пишите отвечая nikolz, "... в QUIK существует служебный, так называемый основной единственный поток, выполняющий то, что перечислено мною выше?", получается что нужно отказаться от отдельного потока main и выполнение main разместить в основном потоке , при этом создав "активную очередь событий".
Цитата
TGB написал: В Новосибирске, когда то была хорошая школа IT-шников. И что-то, наверное, от нее осталось. Я надеюсь, что архитектором QUIK в текущий момент является один из выпускников этой школы.
Школа как была отличной, так и остается, и дело на мой взгляд не в программистах, а в том как управляется проект (в главном конструкторе). Даже пример этого форума показывает Нельзя отпускать программиста (понапишут такого), без контроля инженера (следящего за прикладным характером задачи) .
VPM написал: получается что нужно отказаться от отдельного потока main и выполнение main разместить в основном потоке , при этом создав "активную очередь событий".
Я этого не писал. ------- Вообще то, не хочу вас, обидеть, но в моем сообщении пункты 1) и 2) написаны не для либеза. Думаю, что разработчикам QUIK понятно о чем я пишу в этих пунктах.
TGB написал: 1) В текущей версии в одном основном потоке обслуживаются:- запуск всех Lua-скриптов пользователя;- запуск коллбеков всех Lua-скриптов пользователя;-- обработка всех коллбеков таблиц QUIK (это не таблицы Lua);-- обработка всех индикаторов пользователя.
Зачем столько фантазии и эмоций. Сложно понять что думал человек, написавший три предложения. Давайте разберем то, что Вы написали и то, как я это понял. ------------------ Вот Ваши предложения: 1) В текущей версии в одном основном потоке обслуживаются: - запуск всех Lua-скриптов пользователя; - запуск коллбеков всех Lua-скриптов пользователя; -- обработка всех коллбеков таблиц QUIK (это не таблицы Lua); -- обработка всех индикаторов пользователя. ---------------------------- Разбираем: Вам не нравиться ,что в основном потоке терминала выполняется: запуск всех Lua Скриптов пользователя. -------------- И что в этом плохого? Мое мнение - это выполняется однократно и на дальнейшую работу скриптов не влияет. поэтому никакой проблемы в этом нет. Докажите, что это не так. ---------------------- - запуск коллбеков всех Lua-скриптов пользователя; Мое мнение: Колбеки не запускаются, а вызываются. Вызываются они в основном потоке, потому что иначе они не могут вызываться. Они и есть реакция на события в этом потоке. Вы знаете иной механизм вызова колбеков? Расскажите . -------------------- -- обработка всех коллбеков таблиц QUIK (это не таблицы Lua); Вообще непонятно. Что за "обработка" ? В каком основном потоке ? ------------------- -- обработка всех индикаторов пользователя. В каком основном потоке? Где это Вы прочитали ? =================== Поэтому Ваши высказывания ошибочны. если Вы не согласны, то докажите,а не обвиняйте, что другие не умеют читать Ваши мысли.
nikolz написал: Вам не нравиться ,что в основном потоке терминала выполняется:запуск всех Lua Скриптов пользователя.--------------И что в этом плохого?
Это мелочь, но при условии, что пакеты в скриптах подключаются в потоке main. Иначе одновременный запуск нескольких скриптов выполняется долго (из-за того, что это это выполняется в одном потоке).
2.
Цитата
nikolz написал: Мое мнение:Колбеки не запускаются, а вызываются.
Пусть для вас вызывается, а для меня запускается . Кому непонятно, что это одно и тоже?
3. По остальной части вашего комментария: Пользовательские индикаторы в графиках обрабатываются в основном (единственном) потоке. Это медицинский факт. Если вы не знаете как это проверить экспериментально, то я вам расскажу как это сделать. дополнительно, в основном (единственном) потоке запускаются коллбеки всех скриптов пользователя, а также вызываются коллбеки всех таблиц QUIK, созданных пользователем. Наверное, понятно и ежу, что в текущий момент в одном потоке все это будет выполняться последовательно. Это значит, что на архитектурном уровне QUIK в текущий момент существует зависимость по выполнению для его различных функциональностей, что является некоторым дефектом. Кому это непонятно?
3.
Цитата
TGB написал: Вы, похоже, очень наивны и полагаете, что разработчики работают за бесплатно? Можно, наверное как то сообразить, что часть комиссии, уплачиваемая брокерам пользователями, идет на зарплату разработчикам, а также в доход акционерам ARQA.
nikolz написал: - запуск коллбеков всех Lua-скриптов пользователя;Мое мнение:Колбеки не запускаются, а вызываются. Вызываются они в основном потоке, потому что иначе они не могут вызываться. Они и есть реакция на события в этом потоке.Вы знаете иной механизм вызова колбеков? Расскажите .
Как я понимаю человек предлагает вызывать колбеки в потоке Lua-скрипта.
Constantin написал: Как я понимаю человек предлагает вызывать колбеки в потоке Lua-скрипта.
Один из возможных вариантов предлагаемой обработки событий Qlua: 1) вместо регистрации функций обратного вызова, регистрация соответствующих потокобезопасных очередей событий (возможно, с теми же именами); я бы сделал эти очереди (можно, в принципе, обойтись и одной) циклическими, с указанием их длины при регистрации, но не более некоторого значения; 2) вместо sleep, служебная функция с тем же именем ожидания либо истечения интервала времени (как в sleep), либо появления данных в очередях событий (с выдачей списка непустых очередей); 3) добавление функции чтения очередей событий (их параметров). Эта схема реализует рекомендованную ARQA обработку параметров событий в main (смотрите "Использование Lua в Рабочем месте QUIK"), с тем, чтобы не было проблем синхронизации в скриптах. Кроме того, в такой схеме решается тяжелая задача подключения новых версий Lua в QUIK, так как не будет требоваться конфигурирования Lua для многопоточного использования (из-за запуска функций коллбеков в потоке, отличном от потока main, но в контексте пользователя). Подключение новых версий Lua в QUIK станет в описанной выше схеме рутинной задачей.
Мне интересна реакции разработчика QUIK, в лице поддержки, на те пункты, которые мною предлагаются. -------- На всякий случай, по пункту 2: Есть вариант его реализации таким образом. чтобы сохранить существующий интерфейс QLua c QUIK, с тем, чтобы пользователям не надо было изменять существующие скрипты. Это вызов функций обработки коллбеков в видоизмененной sleep с параметрами в нужном формате, считанными из предлагаемых очередей (очереди).
Constantin написал: Как я понимаю человек предлагает вызывать колбеки в потоке Lua-скрипта.
Один из возможных вариантов предлагаемой обработки событий Qlua: 1) вместо регистрации функций обратного вызова, регистрация соответствующих потокобезопасных очередей событий (возможно, с теми же именами); я бы сделал эти очереди (можно, в принципе, обойтись и одной) циклическими, с указанием их длины при регистрации, но не более некоторого значения; 2) вместо sleep, служебная функция с тем же именем ожидания либо истечения интервала времени (как в sleep), либо появления данных в очередях событий (с выдачей списка непустых очередей); 3) добавление функции чтения очередей событий (их параметров). Эта схема реализует рекомендованную ARQA обработку параметров событий в main (смотрите "Использование Lua в Рабочем месте QUIK"), с тем, чтобы не было проблем синхронизации в скриптах. Кроме того, в такой схеме решается тяжелая задача подключения новых версий Lua в QUIK, так как не будет требоваться конфигурирования Lua для многопоточного использования (из-за запуска функций коллбеков в потоке, отличном от потока main, но в контексте пользователя). Подключение новых версий Lua в QUIK станет в описанной выше схеме рутинной задачей.
Это делается очень просто. ---------------------- Применяю это с момента появления VMLua в КВИКЕ. --------------------- Возьмите готовую библиотеку https://quik2dde.ru/viewtopic.php?id=78 ------------------ и используйте всего две функции CreateEvent и WaitForSingleObject ------------------- Как реализовать очередь есть в документации QLUA
nikolz написал: - запуск коллбеков всех Lua-скриптов пользователя;Мое мнение:Колбеки не запускаются, а вызываются. Вызываются они в основном потоке, потому что иначе они не могут вызываться. Они и есть реакция на события в этом потоке.Вы знаете иной механизм вызова колбеков? Расскажите .
Как я понимаю человек предлагает вызывать колбеки в потоке Lua-скрипта.
Мечтать не вредно. Пусть сначала сделает и докажет, что это лучше. -------------- Существующее решение работает быстро и даже раньше, чем данные попадают в таблицы терминала.
nikolz написал: Это делается очень просто. ----------------------Применяю это с момента появления VMLua в КВИКЕ.---------------------Возьмите готовую библиотеку https://quik2dde.ru/viewtopic.php?id=78 ------------------и используйте всего две функцииCreateEvent и WaitForSingleObject-------------------Как реализовать очередь есть в документации QLUA
Опять вы не поняли. То о чем вы пишите, я у себя реализовал давно, как только начал разбираться с QUIK. Сутью 2-го пункта является;
Цитата
TGB написал: в такой схеме решается тяжелая задача подключения новых версий Lua в QUIK, так как не будет требоваться конфигурирования Lua для многопоточного использования (из-за запуска функций коллбеков в потоке, отличном от потока main, но в контексте пользователя). Подключение новых версий Lua в QUIK станет в описанной выше схеме рутинной задачей.
2.
Цитата
nikolz написал: TGB , Sleep - это функция, которая останавливает поток и возвращает управление OC. Что Вы будете модифицировать в ней?
Опять, та же фигня . Я пишу про sleep (это функция QLua):
Цитата
TGB написал: Это вызов функций обработки коллбеков в видоизмененной sleep с параметрами в нужном формате, считанными из предлагаемых очередей (очереди).
а вы про системную Sleep. Вы, что, не понимаете разницы?
3.
Цитата
TGB написал: Вы, похоже, очень наивны и полагаете, что разработчики работают за бесплатно? Можно, наверное как то сообразить, что часть комиссии, уплачиваемая брокерам пользователями, идет на зарплату разработчикам, а также в доход акционерам ARQA.
TGB, Про колебки Вы пишите фигню. Колбеки не запускаются, а вызываются. ------------------------ Никто не мешает Вам запустить в колбеке новый поток. -------------- Я это использую уже давно. Об это писал у же на форуме.
Вы тоже не читаете внимательно чужие предложения. Я на форуме не только предлагал, но и показывал как это работает у меня. ------------------- Например, я выполнение различных алгоритмов обработки событий реализую не только на Lua, но и на Luajit ( что более чем на порядок быстрее) на Terra, на Python, на julia.
вот тут можете посмотреть варианты как делать очередь. И результаты тестов различных вариантов. https://forum.quik.ru/forum17/topic8426/ --------------- С интересом посмотрю Ваши результаты решений. Может обсудить конкретные решение, что будет полагаю интересно начинающим.
nikolz написал: Я на форуме не только предлагал, но и показывал как это работает у меня.
Вы опять не поняли. Я эту ветку создал не для того чтобы обсуждать свои или чужие решения. До сих пор я понимал и решал свои проблемы и при этом пользовался интернетом. Если вы читали мой первый комментарий, то в нем написано как можно улучшить QUIK. 2.
Несмотря на написанное мною в первом пункте, посмотрел и впечатлился: .
Цитата
nikolz написал: Смотрим первую картинку. Нижнее 3 окно в ней - это график прибыль/убыток за 2023 год. линия зеленая на оси справа показывает положительные 220% -это профит лонг. линия синяя на оси справа показывает положительные 150% - это профит short линия белая на оси справа показывает положительные 370% - это профит long+short.
Сдаюсь . Таких годовых процентов у меня не было. Вам мой совет возьмите кредит, ну хотя бы 1000000 руб., ну хотя бы под 20% годовых на 3 года. Вам светит за три года приблизительно следующая сумма: 1000000 * 3,7 * 3,7 * 3,7 - 1000000 - 3*1000000*0,2 = 49000000 руб. А может вы уже и сейчас миллиордер ?
Если скрипту давать работать с 10% от депозита, то получится 37% годовых грязными, или 32% чистыми. Если вместо воды пить шампанское, получается не так уж и много...
Когда-то давно в телеграм канале один старый трейдер советовал брать и держать акции сберика, когда одна стоила 132 р., потом когда 137 р., 142 р., т.к. идёт долгострочный тренд с прицелом на ист. максимум. Если бы я послушал его, то сейчас без всяких "ботов" и "стратегий" имел бы 100% годовых чистыми...
Подозреваю, что если бы я подписался на платный канал к.э.н. с птичьей фамилией из Владивостока, который следит за фондовым рынком, то было бы примерно то же...
Этот комментарий, сугубо, для поддержки QUIK. --- Как результат * в данной ветке, возникло дополнительное предложение: 4) На форумах ARQA для комментирующих пользователей ввести месячный лимит трафика, после которого не будет возможность вводить комментарии. Значением этого лимита могло быть: <Годовой трафик nikolz> / 12 / 10. Но, конечно, насчет значения лимита, решать ARQA. Наличие такого лимита, обеспечило бы: - экономию дискового пространства баз форумов; - автоматическое модерирование форумов за счет принуждения думать о краткости и четкости текстов, пишущих комментаторами; - удобство для читающих комментарии, в которых будет меньше флуда.