文章 "如何在 MQL5 中使用 ONNX 模型" - 页 3

 

应用评论(对象、模型和工具)

1. 深度学习在算法交易中的应用调查(2021 年)

算法交易是金融应用中最受关注的方向之一。

与传统交易策略相比,算法交易应用执行预测和套利的效率更高,性能更稳定。

利用深度学习进行交易预测和分析的算法交易模型研究层出不穷。

本文首先总结了几种在算法交易应用中表现良好的深度学习方法,并简要介绍了深度学习在算法交易中的一些应用。

然后,我们尝试提供基于深度学习技术的算法交易应用的最新快照,并展示了所开发算法交易模型的不同实现方式。

最后,我们提出了一些未来可能的研究课题。

本文的主要目的是全面介绍深度学习在算法 交易中的应用研究进展,为后续计算机程序交易系统的研究提供 借鉴。


2.深度学习在金融领域的应用:一项调查(2020年)

过去几十年来,金融领域的计算智能一直是学术界和金融业非常热门的话题。

已发表的大量研究产生了各种模型。与此同时,在机器学习(ML)领域,深度学习(DL)最近开始受到广泛关注,这主要是因为它的性能优于经典模型。

如今,已有许多不同的深度学习实现方法,而且这种广泛的兴趣仍在继续。金融是 DL 模型开始受到关注的一个特殊领域,然而,这个领域还很广阔,仍然存在很多研究机会。

在本文中,我们试图为金融应用领域已开发的 DL 模型提供一个最新的快照。

我们不仅根据其在金融领域的目标子领域对作品进行了分类,还根据其 DL 模型对其进行了分析。

此外,我们还旨在确定未来可能的实施方案,并强调了该领域内正在进行的研究的途径。






3.利用深度学习进行金融时间序列预测:系统性文献综述:2005-2019(2019年)

Financial time series forecasting is, without a doubt, the top choice of computational intelligence for finance researchers from both academia and financial industry due to its broad implementation areas and substantial impact.

机器学习(ML)研究人员提出了各种模型,并发表了大量相应的研究报告。

因此,已有大量调查报告涉及 ML 在金融时间序列预测研究中的应用。

最近,深度学习(DL)模型开始出现在这一领域,其结果明显优于传统的 ML 模型。

尽管人们对为金融时间序列预测研究开发模型的兴趣与日俱增,但却缺乏专门针对金融领域深度学习的综述论文。

因此,我们在本文中对金融时间序列预测实施的 DL 研究进行了全面的文献综述。

我们不仅根据其预期的预测实施领域(如指数、外汇、商品预测)对研究进行了分类,还根据其 DL 模型选择(如卷积神经网络 (CNN)、深度信念网络 (DBN)、长短期记忆 (LSTM))对研究进行了分组。

我们还试图通过强调可能出现的挫折和机遇来展望这一领域的未来,以便感兴趣的研究人员能够从中受益。





 

CHATGPT 创建的 CNN LSTM 神经网络

# Import necessary libraries
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, LSTM, Dropout, Conv1D, MaxPooling1D, Flatten

# Load the dataset
df = pd.read_csv('https://query1.finance.yahoo.com/v7/finance/download/AAPL?period1=1411958400&period2=1636521600&interval=1d&events=history&includeAdjustedClose=true')

# Preprocess the data
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(df['Close'].values.reshape(-1, 1))

# Split the data into training and testing sets
training_size = int(len(scaled_data) * 0.7)
testing_size = len(scaled_data) - training_size
training_data = scaled_data[0:training_size, :]
testing_data = scaled_data[training_size:len(scaled_data), :]

# Function to create input features and labels for model
def create_dataset(dataset, look_back):
    data_X, data_Y = [], []
    for i in range(len(dataset)-look_back-1):
        a = dataset[i:(i+look_back), 0]
        data_X.append(a)
        data_Y.append(dataset[i + look_back, 0])
    return np.array(data_X), np.array(data_Y)

# Create input features and labels for training and testing sets
look_back = 60
X_train, y_train = create_dataset(training_data, look_back)
X_test, y_test = create_dataset(testing_data, look_back)

# Reshape the input data for CNN-LSTM model
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))

# Define and compile the CNN-LSTM model
model = Sequential()

model.add(Conv1D(filters=32, kernel_size=5, activation='relu', input_shape=(look_back, 1)))
model.add(MaxPooling1D(pool_size=2))
model.add(Dropout(0.2))

model.add(Conv1D(filters=64, kernel_size=5, activation='relu'))
model.add(MaxPooling1D(pool_size=2))
model.add(Dropout(0.2))

model.add(LSTM(50, return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(50))
model.add(Dropout(0.2))

model.add(Dense(1))

model.compile(loss='mean_squared_error', optimizer='adam')

# Train the model on the training data
model.fit(X_train, y_train, epochs=100, batch_size=32)

# Use the model to make predictions on the testing data
y_pred = model.predict(X_test)

# Rescale the data back to original values
y_pred = scaler.inverse_transform(y_pred)
y_test = scaler.inverse_transform(y_test.reshape(-1, 1))

# Plot the original and forecasted values
plt.plot(y_test, label='Actual')
plt.plot(y_pred, label='Predicted')
plt.xlabel('Time')
plt.ylabel('Close Price')
plt.title('AAPL Stock Price Forecast')
plt.legend()
plt.show()

Jupyter Notebook 中的执行结果
 
你是否期待着不同的结果?只有通过自己的经验和知识,才会有结果。
 
Vladimir Perervenko #:
你是否期待着不同的结果?只有通过自己的经验和知识才能有结果。

我倒是没想到现在还有这种可能,技术令人印象深刻。我同意,即使有了这样的工具,也需要认真的劳动,经验是艰苦错误的儿子.....。

 
Vladimir Perervenko #:

将预处理转移到 MT 不是问题,但我很想在 MT 测试仪中测试系统,而在 python/R 中我需要编写自己的测试仪,错误百出。

 
Vladimir Perervenko 项目 都包括三个阶段:
  • 预处理
  • 模型选择、训练、优化等
  • 实施

在 µl 中使用 ONNX 模型解决了实施问题。不过,并非所有模型都能实现,而且也不太容易。

模型的训练和优化由 Python 中的一个单独流程解决。

但在上述所有过程中,第一阶段是最耗时、最具创造性和最重要的。而且不可能 在 µl 上实现。我们不认为原始缩放是预处理。民间智慧说:"垃圾进,垃圾出"。要在 MCL 上充分使用 MO,需要在 MCL 上额外开发和实施的东西太多了。不可能包罗万象,尤其是它还在不断扩展......

真的有那么糟糕 吗?毕竟,关于神经网络的文章已经写了很多。甚至有些文章把一切都写得很 "简单".....。

 
Vladimir Perervenko 项目 都包括三个阶段:
  • 预处理

但在上述所有阶段中,第一阶段最耗时、最具创造性,也最重要。而且不可能在 µl 上实现。

据我所知,我们说的是计算作为网络特征的某些价格函数的难度。

您能举个例子吗?也许这里会有人提出这些东西的实现方法。

 
Denis Kirichenko #:

真的有那么糟糕 吗?我的意思是,已经有很多关于神经网络的文章了。甚至有些文章把一切都写得很 "简单"....。

还不错。与现代预处理功能的发展相比,一切都还处于萌芽状态。

我用 R 编程已经有很长一段时间了。不久前我开始使用 Python,在研究 Python 机器学习项目(包)时,我注意到的主要问题是几乎完全没有预处理。我们的做法是,模型会把一切都处理掉。这既不是坏事,也不是好事。这是历史上形成的方法。

与此相反,R 有一个庞大的预处理库,而且对预处理的用途有很好的理解。

尽管最近有许多有用的发展相互借鉴。

我的意思是说,不可能面面俱到,但开发人员会努力做到这一点。要移植用 C 语言编写的东西--是的,但要用 MKL..... 重写一切。

关于 ONNX。该领域是一个新兴领域,前景广阔,发展迅速,需求旺盛。这意味着有可能进入 ONNX 和预处理领域。TensorFlow 已经有了预处理层,虽然很简单,但还是有的。你需要试试,它会派上用场的。

当然,在训练中使用 ONNX 看起来更有吸引力,但这只适用于 Linux。也许 WSL 专家可以使用它。

 
要使用这种形态,我更愿意使用简单的吞没形态😀,而不是无缘无故地复杂化。
 
多亏了这篇文章,我才知道如何从 mt5 获取数据到 python,并在 python 中处理模型,然后从 python 获取模型,在 mt5 上生成 ea。
How to use ONNX models in MQL5
How to use ONNX models in MQL5
  • www.mql5.com
ONNX (Open Neural Network Exchange) is an open format built to represent machine learning models. In this article, we will consider how to create a CNN-LSTM model to forecast financial timeseries. We will also show how to use the created ONNX model in an MQL5 Expert Advisor.