記事「MQL5でONNXモデルを使用する方法」についてのディスカッション - ページ 3

 

アプリケーション(オブジェクト、モデル、ツール)に関するレビュー

1. アルゴリズム取引における深層学習の応用に関する調査(2021年)

アルゴリズム取引は、金融アプリケーションにおいて最も注目されている方向性の一つである。

伝統的な取引戦略と比較して、アルゴリズム取引アプリケーションは、より高い効率性と安定したパフォーマンスで予測や裁定取引を実行する。

ディープラーニングを用いたアルゴリズム取引モデルに関する数多くの研究が、取引の予測や分析を行うために行われてきた。

本稿ではまず、アルゴリズム取引アプリケーションにおいて優れた性能を示したいくつかのディープラーニング手法を要約し、アルゴリズム取引におけるディープラーニングの応用例を簡単に紹介する。

次に、ディープラーニング技術に基づくアルゴリズム取引の最新のスナップショットアプリケーションを提供し、開発されたアルゴリズム取引モデルのさまざまな実装を示すことを試みる。

最後に、今後考えられるいくつかの研究課題を提案する。

本稿の主な目的は、アルゴリズム取引におけるディープラーニングの応用に関する包括的な研究進捗を提供 し、その後のコンピュータプログラム取引システムの研究に役立てることである。


2.金融応用のためのディープラーニング:サーベイ(2020年)

金融における計算知能は、ここ数十年、学界と金融業界の双方にとって非常に人気のあるトピックである。

数多くの研究が発表され、様々なモデルが生み出されてきた。一方、機械学習(ML)の分野では、ディープラーニング(Deep Learning、深層学習)が最近注目を集め始めている

ディープラーニングは現在、さまざまな実装が存在し、幅広い関心が続いている。金融は、DLモデルが注目を集め始めた特別な分野の1つであるが、そのフィールドは広く、まだ多くの研究機会が存在する。

本稿では、金融アプリケーションのために開発された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)など、DLモデルの選択に基づいて分類した。

また、起こりうる挫折と機会を強調することで、この分野の将来像を描こうと試みた。





 

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 プロジェクトも、3つのフェーズで構成される:
  • 前処理
  • モデル選択、トレーニング、最適化など
  • 実装

μlのONNXモデルを使用することで、実装の問題は解決する。ただし、すべてのモデルではなく、かなり簡単ではない。

モデルのトレーニングと最適化は、Pythonの別プロセスで解決される。

しかし上記の中でも、最初の段階は最も時間がかかり、創造性が高く、最も重要である。そして、それをµl上で実現することは不可能 である。私たちはプリミティブ・スケーリングを前処理とは考えていない。そして、「Garbage in - rubbish out(ゴミを入れればゴミは出ていく)」という民間の知恵がある。MCLだけでMOをフル活用するためには、MCLで追加開発・実装すべきことが多すぎる。特に、MOは常に拡大し続けているのだから...。

そんなに悪いことな のか?結局のところ、ニューラルネットワークについてはすでに多くの記事が書かれている。そして、すべてが "シンプル "なものさえある......。

 
Vladimir Perervenko プロジェクトも、3つのフェーズで構成される:
  • 前処理(たくさんのこと)

しかし上記の中でも、最初の段階は最も時間がかかり、創造性が高く、最も重要である。そして、それをμ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.