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

Автор записи: TGB

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  является автор данной статьи.