Операционная система разработки многопоточных роботов торговли ценными бумагами в QUIK «OS_Quesha»

Автор записи: TGB
1 звезда2 звезды3 звезды4 звезды5 звезд (Голосов 1, среднее: 5,00 из 5)
Загрузка...

OS_Quesha представляет собой специализированную операционную систему реального времени (с характеристиками, часть из которых будет детально представлены в конце статьи), реализованную в среде QUIK. Она обеспечивает разработку многопоточных торговых роботов для QUIK версий 7…, установленных в Windows 10 (32 , 64 р). С ее помощью могут быть решены сложные задачи эффективного использования многопроцессорности современных ПК с целью повышения скорости обработки данных в роботах, разрабатываемых на языке QLua и C++. OS_Quesha обеспечивает в языке программирования QLua, изначально отсутствующий в нем, параллелизм выполнения его, взаимодействующих между собой, функций в рамках одной его инсталляции. Кроме того, средства OS_Quesha решают и иные существенные задачи, возникающие при разработке торговых роботов, в том числе, обеспечивают устойчивость их функционирования при сбоях аппаратуры и программ.
OS_Quesha запускается в QUIKе в виде обычного QLua-скрипта. При этом, в рамках процесса QUIK, она разворачивается в виде нескольких, эффективно взаимодействующих между собой, потоков, количество которых определяется ее настройками. Ее реализация внутри процесса QUIK обеспечивает тесную интеграцию с ним, а значит высокую скорость взаимодействия с ним, недостижимую при межпроцессорном взаимодействии. Для пользователя OS_Quesha представлена формой диалога, запускаемой в отдельном потоке. Из OS_Quesha доступен весь программный интерфейс QUIK, существующий для скриптов QLua. Наличие работающего шаблона TS_QUIK.lua (в виде исходного кода на языке QLua), демонстрирующего применение средств OS_Quesha и ее компактность, обеспечивают низкий порог вхождения при ее использовании.

       OS_Quesha имеет следующие особенности.

  1. Обеспечение построения программ в широком диапазоне эффективности их выполнения (в части использования оперативной памяти и времени ЦП с учетом многопроцессорности вычислительных систем).  Это определяется следующими факторами построения OS_Quesha:

эффективной, как в части потребляемой оперативной памяти, так и в части использования времени ЦП, реализацией ядра OS_Quesha средствами   C/C++ (объем исполняемого кода ядра менее 400 кб.)

-  изначально глубокой интеграцией языка программирования QLua со средой разработки C/C++

-  разработкой в OS_Quesha специальных решений, нацеленных на возможность реализации эффективных вычислений с использованием  многопроцессорности современных вычислительных систем.

В среде OS_Quesha имеется возможность создания, как программ, полностью написанных на сравнительно "медленном" языке QLua, так и программ, реализующих  все "тяжелые" вычисления на системном языке C/C++.  При втором варианте создания программ, можно достичь эффективности их выполнения, не отличающейся от того, что может быть создано с использованием "чистого" C/C++.   Причем, OS_Quesha добавляет удобные средства реализации параллелизма в среде C/C++.

Для удобства реализации второго варианта разработки программ, в составе OS_Quesha присутствуют исходные коды пакета подключения функций ("QluaUser"), разрабатываемых на языке C/C++.

  1. Возможность ее использования в двух вариантах:

- упрощенном, в котором обрабатывающие функции QLua-скриптов пользователя могут размещаться в 3-х готовых потоках, создаваемых в поставляемом демонстрационном шаблоне TS_QUIK.lua, с обеспечением взаимодействия между ними через циклические очереди и использования в них таймерных событий;  при этом достаточно представления о том, что при наличии у ПК нескольких физических потоков ЦП,  функции, размещенные в разных программных потоках (далее просто потоках), могут выполняться параллельно, а ограничением для таких функций является только необходимость синхронизации (и для этого предоставляются необходимые средства) записи в  совместно используемые глобальные переменные QLua;

- профессиональном, в котором используются все описываемые в шаблоне средства OS_Quesha.

  1. Настраиваемая многопотоковость выполнения функций. Любые функции QLua, кроме предопределенных функций обратного вызова QLua, могут быть запущены на выполнение  в отдельных потоках/псевдопотоках (П/П). Схема взаимодействия функций, запускаемых в потоках/псевдопотоках, генерируется автоматически на основании наглядного ее описания.
  2. Реализация режима псевдопотоков (легких потоков) эффективно использующего вычислительные ресурсы (оперативную память и время ЦП). Расходы оперативной памяти и времени ЦП на управление псевдопотоками как минимум в 50 раз меньше чем расходы ОС вычислительной системы на управление потоками.

  Основное назначение режима псевдопотока это обработка большого количества параллельных потоков данных, каждый из которых в отдельности требует незначительных вычислительных ресурсов.

  1. Полная инкапсуляция параллелизма функционирования потоков/псевдопотоков в средствах OS_Quesha, обеспечивающих эффективность (реализована специально разработанная схема синхронизации), корректность синхронизации и безопасность взаимодействия функций, выполняемых в разных П/П.

В OS_Quesha существуют два вида, параметрически задаваемой в глобальных настойках, синхронизации П/П: обычная, с использованием критической секции ОС, и быстрая (специально разработанная) на "защелках", без переключения потоков в случаях возникновении конфликтов синхронизации. При необходимости разработчик может использовать все средства синхронизации явным образом.

  1.   Распределенное, эффективное управление параллельными вычислениями, при котором обеспечивается автоматическая балансировка процессорного времени многопроцессорных вычислительных систем между функциями, работающими в различных П/П и решающими некоторую общую прикладную задачу за минимально возможное время.
  2. Обеспечение устойчивости функционирования роботов, созданных с использованием OS_Quesha  (средствами реализации эффективных контрольных точек в многопоточной среде исполнения).
  3. Контроль времени выполнения функций роботов, блокировок, зацикливаний в потоках/псевдопотоках, утечки оперативной памяти, а также состояния очередей взаимодействия П/П.
  4. Параметрически настраиваемый, расширяемый диалог с пользователем.
  5.   Наличие встроенных, централизованных средств отладки разрабатываемых многопоточных приложений. Эти средства представлены на трех уровнях:

1) уровень функций;

2) уровень межпотокового взаимодействия функций;

3) уровень оперативной отладки функций в среде OS_Quesha.

  1. Обеспечение встроенных средств эффективного (через оперативную память) взаимодействия OS_Quesha с приложениями, реализуемыми в отдельных процессах по предложенным, работающим шаблонам (с исходниками) для сред разработки: С#  и VB.net.
  2. Обеспечение средств парсинга сайтов для информационной поддержки торговли.
  3. обеспечение простоты и скорости установки (развертывания) OS_Quesha в QUIKе.
  4. Представление инструкции по использованию OS_Quesha в виде документированного, работающего, параметрического шаблона TS_QUIK.lua на языке QLua, на основе которого (внося изменения и дополнения) можно реализовать широкий класс торговых роботов.

          Некоторые характеристики OS_Quesha, полученные при ее тестировании и реальной эксплуатации

 

  1. Одним из объективных показателей надежности любой программы является длительность ее работы без проявления ошибок, после устранения очередной, обнаруженной в ней ошибки. В ядре, работающем почти круглые сутки в различных режимах, и являющимся самой сложной частью OS_Quesha, исправление, устраняющее последнюю по времени, обнаруженную в нем ошибку, было выполнено в мае 2019 года.
  2. Управление в OS_Quesha псевдопотоками, которые в циклических программах функционально эквивалентны, потокамреализовано, как минимум, в 50 раз эффективнее, чем управление потоками в ОС  ПК.
  3. Управление в OS_Quesha  ее потоками, распределенное, адаптивное, учитывающее текущее состояние доступных ей вычислительных ресурсов ПК (в том числе физические потоков). Это управление выполняет балансировку доступных (в каждый текущий момент времени) ему ресурсов между взаимодействующими функциями потоков OS_Quesha таким образом, чтобы общая задача, решаемая ими, выполнялась за минимальное время.
  4. Средства создания контрольных точек в OS_Quesha обеспечивают, наряду с обычной их записью, возможность инкрементной записи. В итоге, в практических случаях,  контрольные точки, не зависимо от их объема, в OS_Quesha  фиксируются менее чем за 1 милисекунду (на накопитель hdd). Короткий интервал времени их фиксации  обеспечивает высокую устойчивость работы OS_Quesha (малую вероятность попадания момента сбоя в системе, во временной интервал фиксации контрольной точки - ситуацию, после которой корректное продолжение работы системы, при ее перезапуске, не гарантируется).
  5. Объективным показателем, характеризующем эффективность схемы синхронизации П/П, при частоте синхронизаций, пропорциональной интенсивности взаимодействия П/П, можно считать следующий: <Количество конфликтов возникших при синхронизации> / <Общее количество синхронизаций> (чем меньше, тем лучше). Для реализованной в OS_Quesha неблокирующей синхронизации на «защелках», этот показатель, в тестовых условиях описанных далее, равен 0,00000027 при интенсивности 8000 синхронизаций в секунду. При этом затраты времени ЦП, на выполнение одной синхронизации это затраты (внутри функции синхронизации на языке C++) на выполнение семи арифметических команд, плюс 1,0000064 команды проверки занятости атомарной переменной синхронизации (дробная часть возникла из-за случаев конфликта синхронизации, в которых были повторы этой команды).

Выше приведенные характеристики были получены при тестировании шаблона TS_QUIK.lua в период активных торгов на бирже, на основании встроенной в OS_Quesha статистики по неблокирующей синхронизации. При выполнении теста, в процессе QUIK дополнительно создавалась следующая нагрузка:

1) окно диалога OS_Quesha ( отдельный поток, практически без потребления времени ЦП);

2) обрабатывались запросы таймерных событий в П/П;

3) контролировались блокировки, зацикливания, утечка памяти, а также очереди взаимодействия П/П (практически без потребления времени ЦП).

4) выполнялся обмен тестовыми сообщениями (с интенсивностью 1500 сообщений в секунду туда и обратно) с внешним приложением-процессом с  задержками в получении передаваемых сообщений ~ 5 млсек.;

5) в буфера текущих котировок записывались данные 22-ух  активно торгуемых акций (по каждой 18 параметров) с задержками по времени < 1 млсек. относительно времени вызова функции обратного вызова OnParam (оперативные данные по совершаемым сделкам на бирже);

6) архивировались  истории котировок активно торгуемых акций (пятиминутки и одноминутки) (практически без потребления времени ЦП);

В вышеописанных условиях тестирования, дополнительный рост потребления времени ЦП процессом  QUIK не превышал 1%.

Дополнительный рост потребления виртуальной памяти процессом  QUIK при этом был следующим:

1) память  на выполнение служебных функций OS_Quesha и организацию выполнения приложения: ~ 6 Мб (зависит, в основном, от количества очередей взаимодействия П/П и их длины, от размера (Stacks_threads) стеков потоков, созданных в OS_Quesha, а также от динамически меняющегося объема памяти, используемой в очередях при передаче и приеме тестовых сообщений);

2) память  для хранения текущих котировок: ~ 4 Мб (зависит от размера буферов текущих котировок N_size_cot, размера векторов виртуальных заявок N_size_zv, размещаемых в ней и от количества активно торгуемых акций, заданных в таблице Source_AD_QUIK  глобальных настроек системы).

6. Общий объем всех файлов, используемых  OS_Quesha непосредственно в ее работе (без учета документации на нее и баз данных хранения истории котировок ЦБ), менее 3 Мб.

----------

Более подробно OS_Quesha  описана в "Руководстве разработчика ...."  55 стр. в формате .pdf.

Автором, разработчиком и правообладателем OS_Quesha  является автор данной статьи.

Добавить комментарий

Операционная система разработки многопоточных роботов торговли ценными бумагами в QUIK «OS_Quesha»: 19 комментариев

  1. OS_Quesha 05.03.2020 была зарегистрирована Роспатентом под № 2020612905 в государственном реестре. В текущий момент существует ее версия, работающая в QUIK 8...

  2. Коллеги!
    Мне на почту приходят некоторые повторяющиеся вопросы относительно OS_Quesha, которые, наверное, лучше задавать в комментариях, чтобы читающие статью видели вопросы и ответы.
    Один из таких вопросов следующий: уточните, чем эта операционная система может мне интересна для создания и запуска робота?
    Ответ.
    OS_Quesha является набором инструментов для разработки роботов в QUIK и одновременно средой их функционирования. Для ее использования, как и любого инструмента, требуется ознакомиться с инструкцией по ее применению. Исходники шаблона, сильно упрощают ее применение, но все равно требуется какое-то время на ее изучение. Поэтому, если в вашем роботе не требуется:
    1) параллельного исполнения нескольких его взаимодействующих между собой циклических функций;
    2) ведения с ним диалога;
    3) ведения постоянного лога (журнала);
    4) продолжения функционирования с прерванного места после перезапуска;
    5) выполнения некоторых заданий по расписанию;
    6) выполнения виртуальных заявок;
    7) парсинга сайтов (считывания их данных),
    то, скорее всего, такого робота проще разработать в виде обычного QLua-скрипта.

    1. Здравствуйте!
      1. Существуют различные определения ОС. Одно из них (например, на сайте http://osys.ru/os/1/ponyatie_operatsionnoy_sistemy.shtml) следующее:
      «Операционная система (ОС) - комплекс системных и управляющих программ, предназначенных для наиболее эффективного использования всех ресурсов вычислительной системы (ВС) (Вычислительная система - взаимосвязанная совокупность аппаратных средств вычислительной техники и программного обеспечения, предназначенная для обработки информации)».
      Это определение краткое, емкое и, если под ВС понимать Windows, а также установленный в нем QUIK, то оно полностью определяет описанное в статье.
      Вы, наверняка, сможете привести и какое-нибудь другое определение ОС.

      2. Реальное время в операционных системах — это способность операционной системы обеспечить требуемый уровень сервиса в определённый промежуток времени.
      При создании OS_Quesha были учтены следующие известные, основные требования к системам реального времени:
      1) обеспечение предсказуемого времени обработки непредсказуемо возникающих внешних событий (обеспечен контроль ограничений на время выполнения циклических функций OS_Quesha; причем, для каждой функции может быть свое такое ограничение); это требование самое существенное, классифицирующее систему как СРВ;
      2) надежность (последнее по времени изменение ядра OS_Quesha было внесено в мае 2019г.);
      3) устойчивость функционирования при сбоях аппаратуры и программ (реализованы средства создания и использования контрольных точек при многопоточной обработки данных);
      4) обеспечение обработки большого количества входных и выходных потоков данных, на обра-ботку каждого из которых в отдельности, может требоваться незначительные вычислительные ресурсы (реализован режим псевдопотоков);
      5) обеспечение непрерывности функционирования систем (OS_Quesha, при ее эксплуатации, работает без перезапусков в течение месяцев, до очередного обновления Windows);
      6) учет динамичности таких систем (в OS_Quesha обеспечена возможность изменения схемы обработки данных в процессе ее функционирования);
      7) контролируемость состояния систем (в OS_Quesha обеспечен контроль утечки памяти, блокировок и зацикливаний потоков, а также состояния очередей взаимодействия П/П).

        1. При описании схемы вычислений (это все есть в "Руководстве разработчика ....") для каждой циклически исполняемой функции задается свое время, за которое должен закончиться ее цикл. И по каждой такой функции выполняется контроль

              1. в этом случае вы не можете называть свою систему системой реального времени. это просто система со встроенными средствами профилирования, которая выдает вам постфактум сообщения о том, что в таких-то местах требования пользователя были критически нарушены.

                1. Если вы разрабатывали системы реального времени, то, наверное, знаете, что ни одна из них не способна гарантировать выполнение произвольной функции, например, за 1 мксек. Обсуждаемое вы можете называть, если вам так удобно средством профилирования.

                  1. естественно, может. не конкретно, "что угодно за 1мксек", а каждый отдельный вызов api "не более чем..." и принципиальное отсутствие блокирующих вызовов. я по-этому и интересуюсь, что мне интересно, как вы этого добились, запуская обычные процессы windows и, очевидно, используя winapi. вы бы выложили хотя бы доку, а так - просто перечень деклараций. по-этому приходится уточнять.

                    1. Вы правы в том, что то сейчас выложено маловато и должно вызывать множество вопросов. Однако, я планирую выложить исполняемые коды системы, документацию и исходники шаблона ее применения в конце марта 2020г. По моим представлениям существующая документация на нее достаточна для профессионалов, однако для широкой публики ее надо слегка подкорректировать.
                      Дополнительно, я достаточно подробно показывал систему (демонстрационную) в действии Gilbert007 и можно поинтересоваться его впечатлениями увиденного. Наверное, ему можно тоже задать какие-то вопросы.

    1. Если интересно, то:
      1) я могу показать у себя на рабочем столе (подключу по TeamViewer);
      связаться со мной можно по почте: TGB_QS@mail.ru и договориться о времени показа;
      2) в принципе, если на это есть запрос, я готов выложить коды системы (для некоммерческого использования) на данном сайте; это, вместе с документацией, примерно 6 МБ .

        1. Здравствуйте!
          Я планирую выложить исполняемые коды системы, документацию и исходники шаблона ее применения в конце марта 2020г. По моим представлениям существующая документация на нее достаточна для профессионалов, однако для широкой публики ее надо слегка подкорректировать. Кроме того, мне нравится этот сайт, как он устроен, что на нем делается, профессионализм и доброжелательность Дмитрия. Поэтому я хотел бы сделать размещение кодов таким образом, чтобы это пошло на пользу сайта и это тоже мне надо продумать.

    2. Привет, Мастер!
      Отлично потратили вы время на создание, без условно отличного ПО,
      Но! Зачем?
      Квик это же полный отстой, который не поправить самописным ПО - никак, (тупо нет данных, косяк брокера или, арки) т.е. вообще никак!
      Вы потратили годы своей жизни - ЗРЯ, сожалею!
      Может вас утешит, я, как и тысячи других пользователей квик - тоже потеряли свое время ЗРЯ.
      В сумме, я считал пару лет назад, времени на этот говно-квик потрачено, примерно на 7.мио жизней одного чела, т.е. квик сожрал лучшие годы вашей жизни, как и моей и тысячи других тоже.
      И арка не собирается ничего менять, клятву Гиппократу они не давали, этож не медики, хотя медикам тоже с колокольни срать на клятвы.
      Естественно вы хотите компенсировать затраты на свое поделие, но к сожалению, их не будет.
      Ждать - нечего, займитесь лучше поиском Грааля, с вашей то базой знаний - это легко)
      Если своего нет, нет времени искать, готов поделиться, на договорных условиях.

      1. Здравствуйте!
        Спасибо за оценку продукта. Ваши выводы на основе краткого описания системы говорят о том, что вы в теме основательно.
        По сути:
        1. QUIK, как и практически любой другой готовый продукт, наверное, можно было сделать лучше, но его достоинством является то, что он смог занять часть рынка финансового ПО.
        2. OS_Quesha появилась в процессе автоматизации моей работы на фондовом рынке. Я сам системный программист, имеющий опыт разработки, в качестве ведущего разработчика, двух операционных систем реального времени. Поэтому в какой-то момент, с тем чтобы ускорить свою работу, занялся созданием удобных для себя инструментов разработки про-грамм в QUIK. OS_Quesha – это «сборище» таких инструментов и третья, теперь уже мини-операционная система, сделанная мной от начала до конца. Затратив определенные усилия и время на ее создание, я немало сэкономил на создании своего приложения. Кроме того, создание OS_Quesha для меня было некоторым развлечением (как бы компьютерная игра).
        3. Я, в определенной степени, разделяю ваш пессимизм относительно OS_Quesha, как коммерческого проекта. Поэтому собираюсь сделать ее бесплатной для некоммерческого применения. Однако, жизнь полна случайностей и кто-то сможет понять как ее использовать, с выгодой для себя, в коммерческих целях, и тогда она будет чего-то стоить.
        4. Насчет поиска Грааля мне надо подумать.