Обсуждение статьи "Создание объектно-ориентированного движка инференса ONNX на языке MQL5"

Опубликована статья Создание объектно-ориентированного движка инференса ONNX на языке MQL5:

В статье рассказывается, как запускать модели, обученные на Python, непосредственно в MetaTrader 5 с помощью функций ONNX терминала. Мы создаем класс MQL5, который инкапсулирует создание сеанса, фиксирует формы входных/выходных тензоров, применяет min-max-нормализацию признаков, чтобы повторять обработку, использованную при обучении, и запускает OnnxRun один раз на каждый бар, чтобы снизить нагрузку на ЦП. В результате получается надежный и удобный в сопровождении канал инференса для графиков в реальном времени и Тестера стратегий без использования сокетов или DLL-библиотек.

Чтобы понять механику реализации, необходимо проанализировать, как модели машинного обучения сохраняются и экспортируются с точки зрения их структуры. Open Neural Network Exchange — это универсальный открытый формат, разработанный для единообразного представления моделей машинного обучения в различных программных средах. Когда нейронная сеть экспортируется из Python в формат ONNX с помощью таких библиотек, как TensorFlow или Scikit-Learn, она сериализуется в статический математический граф, состоящий из узлов и ребер. Каждый узел представляет собой конкретную математическую операцию, такую как умножение матриц или нелинейная функция активации, а ребра — многомерные массивы, называемые тензорами, которые передаются между этими операциями.

Когда терминал MetaTrader 5 загружает файл ONNX, он использует свой собственный внутренний движок для воссоздания именно этого математического графа в системной памяти. Терминалу требуются точные указания относительно размерности данных, которые он будет получать, и размерности данных, которые он должен выводить. Если нейронная сеть была обучена на языке Python для приема пяти технических индикаторов в качестве входных данных, то форма входного тензора строго определяется как массив из пяти элементов. Попытка передать необработанные рыночные цены закрытия непосредственно в движок ONNX без соответствия этой заранее заданной форме тензора приведет к немедленной ошибке терминала и сбою сеанса инференса. Программное управление этими формами входных и выходных тензоров является абсолютной основой стабильной интеграции.


Автор: Amanda Vitoria De Paula Pereira