- Поддержка ONNX
- Преобразование форматов
- Автоконвертация данных
- Cоздание модели
- Запуск модели
- Проверка в тестере
- OnnxCreate
- OnnxCreateFromBuffer
- OnnxRelease
- OnnxRun
- OnnxGetInputCount
- OnnxGetOutputCount
- OnnxGetInputName
- OnnxGetOutputName
- OnnxGetInputTypeInfo
- OnnxGetOutputTypeInfo
- OnnxSetInputShape
- OnnxSetOutputShape
- Структуры данных
Запуск модели
Для запуска ONNX модели в MQL5 необходимо выполнить 3 шага:
- Загрузить её из *.onnx файла с помощью функции OnnxCreate или из массива с помощью OnnxCreateFromBuffer.
- Указать форму входных и выходных данных функциями OnnxSetInputShape и OnnxSetOutputShape.
- Запустить модель с помощью OnnxRun, передав ей входные и выходные параметры.
- Завершить при необходимости работу модели с помощью OnnxRelease.
При создании ONNX модели нужно учитывать существующие лимиты и ограничения, которые описаны в https://github.com/microsoft/onnxruntime/blob/rel-1.14.0/docs/OperatorKernels.md
Например, вот некоторые из них:
Операция |
Поддерживаемые типы данных |
---|---|
ReduceSum |
tensor(double), tensor(float), tensor(int32), tensor(int64) |
Mul |
tensor(bfloat16), tensor(double), tensor(float), tensor(float16), tensor(int32), tensor(int64), tensor(uint32), tensor(uint64) |
Ниже представлен пример MQL5 кода из публичного проекта ONNX.Price.Prediction.
const long ExtOutputShape[] = {1,1}; // форма выходных данных модели
|
Пример выполнения скрипта:
ONNX: Creating and using per session threadpools since use_per_session_threads_ is true
|
Терминал MetaTrader 5 самостоятельно выбрал оптимального исполнителя для проведения вычислений — ONNX Runtime Execution Provider. В данном случае модель отработала с использованием CPU.
Изменим скрипт, чтобы посчитать процент успешных предсказаний цены Close на основании значений предыдущих 10 баров.
#resource "Python/model.onnx" as uchar ExtModel[]// модель в виде ресурса
|
Запускаем скрипт и получаем точность предсказаний примерно 51%
ONNX: Creating and using per session threadpools since use_per_session_threads_ is true
|