Если бы я был архитектором QUIK

Страницы: 1
RSS
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
В Новосибирске, когда то была хорошая школа 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.
Остальное я бы написал и выложил в свободный доступ.
-----------------  
Даже макрософт выкладывает форматы свои файлов.
 
1.
 
Цитата
nikolz написал:
Потоков уже 8.
  Где вы у меня прочитали, что все запущенные пользовательские скрипты работают в одном потоке?
У меня написано:
Цитата
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);
Вообще непонятно. Что за "обработка" ?
В каком основном потоке ?
-------------------
-- обработка всех индикаторов пользователя.
В каком основном потоке?
Где это Вы прочитали ?
===================  
Поэтому Ваши высказывания ошибочны.
если Вы не согласны, то докажите,а не обвиняйте, что другие не умеют читать Ваши мысли.
 
1.
Цитата
nikolz написал:
Вам не нравиться ,что  в основном потоке терминала выполняется:запуск всех Lua Скриптов пользователя.--------------И что в этом плохого?
  Это мелочь, но при условии, что пакеты в скриптах подключаются в потоке main. Иначе одновременный запуск нескольких скриптов выполняется долго (из-за того, что это это выполняется в одном потоке).

2.
Цитата
nikolz написал:
Мое мнение:Колбеки не запускаются, а вызываются.
 Пусть для вас вызывается, а для меня запускается  :smile: . Кому непонятно, что это одно и тоже?

3. По остальной части вашего комментария:
   Пользовательские индикаторы в графиках обрабатываются в основном (единственном) потоке. Это медицинский факт. Если вы не знаете как это проверить экспериментально, то я вам расскажу как это сделать. дополнительно, в основном (единственном) потоке запускаются коллбеки всех скриптов пользователя, а также вызываются коллбеки всех таблиц QUIK, созданных пользователем. Наверное, понятно и ежу, что в текущий момент в одном потоке все это будет выполняться последовательно. Это значит, что на архитектурном уровне QUIK в  текущий момент существует зависимость по выполнению для его различных функциональностей, что является некоторым дефектом. Кому это непонятно?

3.
Цитата
TGB написал:
Вы, похоже, очень наивны и полагаете, что разработчики работают за бесплатно? Можно, наверное как то сообразить, что часть комиссии, уплачиваемая брокерам пользователями, идет на зарплату разработчикам, а также в доход акционерам ARQA.
 Где возражения?
 
Пропустил:
Цитата
nikolz написал:
В каком основном потоке ?
  Есть такой документ разработчика QUIK: "Использование Lua в Рабочем месте QUIK". Найдите в интернете и почитайте.
 
Цитата
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 с параметрами в нужном формате, считанными из предлагаемых очередей (очереди).
 
Цитата
TGB написал:
Цитата
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  
 
Цитата
Constantin написал:
Цитата
nikolz написал:
- запуск коллбеков всех Lua-скриптов пользователя;Мое мнение:Колбеки не запускаются, а вызываются. Вызываются они в основном потоке, потому что иначе они не могут вызываться. Они и есть реакция на события в этом потоке.Вы знаете иной механизм вызова колбеков? Расскажите .
Как я понимаю человек предлагает вызывать колбеки в потоке Lua-скрипта.
Мечтать не вредно.
Пусть сначала сделает и докажет,  что это лучше.
--------------
Существующее решение работает быстро и даже раньше, чем данные попадают в таблицы терминала.
 
 
TGB,
Sleep - это функция, которая останавливает поток и возвращает управление OC.
Что Вы будете модифицировать в ней?
 
1.
Цитата
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.
Что Вы будете модифицировать в ней?
Опять, та же фигня :smile: .  
Я пишу про sleep (это функция QLua):
Цитата
TGB написал:
Это вызов функций обработки коллбеков в видоизмененной sleep с параметрами в нужном формате, считанными из предлагаемых очередей (очереди).
а вы про системную Sleep. Вы, что, не понимаете разницы?

3.
Цитата
TGB написал:
Вы, похоже, очень наивны и полагаете, что разработчики работают за бесплатно? Можно, наверное как то сообразить, что часть комиссии, уплачиваемая брокерам пользователями, идет на зарплату разработчикам, а также в доход акционерам ARQA.
 Где возражения?
 
Цитата
TGB написал:
2.  
Цитата
nikolz написал:
 TGB  ,
Sleep - это функция, которая останавливает поток и возвращает управление OC.
Что Вы будете модифицировать в ней?
 Опять, та же фигня :: .  
Я пишу про sleep (это функция QLua):
Цитата
Фигня это у Вас.
sleep в QLua - это обертка для Sleep OC.
Поэтому Ваше рассуждение про "модификацию" - это пустая фраза.
 
TGB,
Про колебки Вы пишите фигню.
Колбеки не запускаются, а вызываются.
------------------------
Никто не мешает Вам запустить в колбеке новый поток.
--------------
Я это использую уже давно.
Об это писал у же на форуме.
 
Вы тоже не читаете внимательно чужие предложения.
Я на форуме не только предлагал, но и показывал как это работает у меня.
-------------------
Например, я выполнение различных алгоритмов обработки событий реализую не только на Lua, но и на Luajit ( что более чем на порядок быстрее)
на Terra, на Python, на julia.  
 
вот тут можете посмотреть варианты как делать очередь.
И результаты тестов различных вариантов.
https://forum.quik.ru/forum17/topic8426/
---------------
С интересом посмотрю Ваши результаты решений.
Может обсудить конкретные решение, что будет полагаю интересно начинающим.
 
1.
Цитата
nikolz написал:
Я на форуме не только предлагал, но и показывал как это работает у меня.
   Вы опять не поняли.  Я эту ветку создал не для того чтобы обсуждать свои или чужие решения. До сих пор я понимал и решал свои проблемы и при этом пользовался интернетом.
  Если вы читали мой первый комментарий, то в нем написано как можно улучшить QUIK.
2.
Цитата
nikolz написал:
И результаты тестов различных вариантов. https://forum.quik.ru/forum17/topic8426/
 Несмотря на написанное мною в первом пункте, посмотрел и впечатлился:
.
Цитата
nikolz написал:
Смотрим первую картинку.
Нижнее 3 окно в ней - это график прибыль/убыток за 2023 год.
линия зеленая на оси справа показывает положительные 220% -это профит лонг.
линия синяя на оси справа показывает положительные 150% - это профит short
линия белая на оси справа показывает положительные 370% - это профит long+short.
 Сдаюсь :smile: . Таких годовых процентов у меня не было.
Вам мой совет возьмите кредит, ну хотя бы 1000000 руб., ну хотя бы под 20% годовых на 3 года.
Вам светит за три года приблизительно следующая сумма: 1000000 * 3,7 * 3,7 * 3,7 - 1000000 - 3*1000000*0,2 = 49000000 руб.
А может вы уже и сейчас миллиордер :smile: ?
 
Если скрипту давать работать с 10% от депозита, то получится 37% годовых грязными, или 32% чистыми. Если вместо воды пить шампанское, получается не так уж и много...

Когда-то давно в телеграм канале один старый трейдер советовал брать и держать акции сберика, когда одна стоила 132 р., потом когда 137 р., 142 р., т.к. идёт долгострочный тренд с прицелом на ист. максимум. Если бы я послушал его, то сейчас без всяких "ботов" и "стратегий" имел бы 100% годовых чистыми...

Подозреваю, что если бы я подписался на платный канал к.э.н. с птичьей фамилией из Владивостока, который следит за фондовым рынком, то было бы примерно то же...
 
Цитата
TGB написал:
Вам светит за три года приблизительно следующая сумма: 1000000 * 3,7 * 3,7 * 3,7 - 1000000 - 3*1000000*0,2 = 49000000 руб.
  В приблизительных вычислениях ошибка, но возражения не дождался.
Точно: 1000000 * 4,7 * 4,7 * 4,7 - 1000000 - 3*1000000*0,2 = 102223000 руб. до уплаты налога.
 
Этот комментарий, сугубо, для поддержки QUIK.
---
 Как результат  *  в данной ветке, возникло дополнительное предложение:
 4) На форумах ARQA для комментирующих пользователей ввести месячный лимит трафика, после которого не будет возможность вводить комментарии.
     Значением этого лимита могло быть: <Годовой трафик nikolz> / 12 / 10. Но, конечно, насчет значения лимита, решать ARQA.
     Наличие такого лимита, обеспечило бы:
      - экономию дискового пространства баз форумов;
      - автоматическое модерирование форумов за счет принуждения думать о краткости и четкости текстов, пишущих комментаторами;
      - удобство для читающих комментарии, в которых будет меньше флуда.
Страницы: 1
Читают тему
Наверх