ONNX.Price.Prediction/ONNX.Price.Prediction.mq5

102 lines
7.7 KiB
MQL5

2024-08-08 23:31:54 +02:00
<EFBFBD><EFBFBD>//+------------------------------------------------------------------+
//| ONNX.Price.Prediction.mq5 |
//| Copyright 2023, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
#resource "Python/model.onnx" as uchar ExtModel[]
#define SAMPLE_SIZE 10 // bars count in sample as defined in Python\PricePredictionTraining.py
// X, y = collect_dataset(df, history_size=10)
//+------------------------------------------------------------------+
//| Script for demonstration of identical execution of |
//| Python\PricePrediction.py and |
//| ONNX.Price.Prediction.mq5 |
//+------------------------------------------------------------------+
int OnStart(void)
{
//--- create a model from static buffer
//--- model.onnx file from resources is represented as const uchar model[89591]
long handle=OnnxCreateFromBuffer(ExtModel,ONNX_DEFAULT);
if(handle==INVALID_HANDLE)
{
Print("OnnxCreateFromBuffer error ",GetLastError());
return(-1);
}
//--- since not all sizes defined in the input tensor we must set them explicitly
//--- first index - batch size, second index - series size, third index - number of series (OHLC)
const long input_shape[] = {1,SAMPLE_SIZE,4};
if(!OnnxSetInputShape(handle,0,input_shape))
{
Print("OnnxSetInputShape error ",GetLastError());
OnnxRelease(handle);
return(-1);
}
//--- since not all sizes defined in the output tensor we must set them explicitly
//--- first index - batch size, must match the batch size of the input tensor
//--- second index - number of predicted prices (we only predict Close)
const long output_shape[] = {1,1};
if(!OnnxSetOutputShape(handle,0,output_shape))
{
Print("OnnxSetOutputShape error ",GetLastError());
OnnxRelease(handle);
return(-1);
}
//--- prepare input data
matrix rates; // matrix to get test sample OHLC