기고글 토론 "MQL5에서 ONNX 모델을 사용하는 방법" - 페이지 3

 

애플리케이션(개체, 모델 및 도구)에 대한 리뷰

알고리즘 트레이딩에서 딥러닝 적용에 관한 설문조사 (2021)

알고리즘 트레이딩은 금융 애플리케이션에서 가장 관심 있는 방향 중 하나입니다.

알고리즘 트레이딩 애플리케이션은 기존 트레이딩 전략에 비해 예측과 차익거래를 더 높은 효율성과 안정적인 성능으로 수행합니다.

트레이딩 예측 및 분석을 수행하기 위해 딥러닝을 이용한 알고리즘 트레이딩 모델에 대한 수많은 연구가 진행되었습니다.

이 글에서는 먼저 알고리즘 트레이딩에서 좋은 성과를 보인 몇 가지 딥러닝 방법을 요약하고, 알고리즘 트레이딩에서 딥러닝을 적용한 몇 가지 사례를 간략히 소개합니다.

그런 다음 딥러닝 기술을 기반으로 한 알고리즘 트레이딩의 최신 스냅샷 애플리케이션을 제공하고, 개발된 알고리즘 트레이딩 모델의 다양한 구현을 보여줍니다.

마지막으로 향후 가능한 몇 가지 연구 과제를 제안합니다.

이 백서의 주요 목적은 알고리즘 트레이딩에서 딥러닝 응용에 대한 포괄적인 연구 진행 상황을 제공하고, 컴퓨터 프로그램 트레이딩 시스템의 후속 연구에 도움이 되는 것입니다.


2. 금융 애플리케이션을 위한 딥러닝: 설문조사 (2020)

금융 분야의 컴퓨터 지능은 지난 수십 년 동안 학계와 금융 업계 모두에서 매우 인기 있는 주제였습니다.

수많은 연구가 발표되어 다양한 모델이 등장했습니다. 한편, 머신러닝(ML) 분야에서는 딥러닝(DL)이 기존 모델보다 뛰어난 성능으로 인해 최근 많은 주목을 받기 시작했습니다 .

현재 DL의 다양한 구현이 존재하며 폭넓은 관심이 계속되고 있습니다. 금융은 DL 모델이 주목받기 시작한 특정 분야 중 하나이지만, 여전히 많은 연구 기회가 존재할 만큼 그 영역은 넓게 열려 있습니다.

이 백서에서는 현재 금융 애플리케이션을 위해 개발된 DL 모델의 최신 스냅샷을 제공하려고 노력했습니다.

금융의 하위 분야에 따라 작품을 분류했을 뿐만 아니라 DL 모델을 기반으로 분석했습니다.

또한 향후 구현 가능성을 파악하고 해당 분야에서 진행 중인 연구의 경로를 강조하는 데에도 목표를 두었습니다.






딥러닝을 이용한 금융 시계열 예측: 체계적인 문헌 고찰: 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()

주피터 노트북의 실행 결과
 
뭔가 다른 것을 기대하셨나요? 자신의 경험과 지식을 통해서만 결과가 나올 수 있습니다.
 
Vladimir Perervenko #:
뭔가 다른 것을 기대하셨나요? 자신의 경험과 지식을 통해서만 결과가 나올 수 있습니다.

나는 오히려 지금 그런 일이 가능할 것이라고 기대하지 않았고 기술이 인상적입니다. 나는 그러한 도구를 사용하더라도 심각한 노동이 필요하며 경험은 어려운 실수의 아들이라는 데 동의합니다.....

 
Vladimir Perervenko #:

전처리를 MT로 전송하는 것은 문제가 되지 않습니다. MT 테스터에서 시스템을 테스트하고 싶고, 파이썬/R에서는 오류로 가득 찬 자체 테스터를 작성해야 합니다.

 
Vladimir Perervenko 프로젝트는 세 단계로 구성됩니다:
  • 전처리(많은 것들)
  • 모델 선택, 훈련, 최적화 등
  • 구현

µl에서 ONNX 모델을 사용하면 구현 문제를 해결할 수 있습니다. 그러나 모든 모델이 그렇지는 않으며 쉽지 않습니다.

모델의 훈련과 최적화는 Python에서 별도의 프로세스를 통해 해결됩니다.

그러나 위의 모든 단계 중에서 첫 번째 단계는 가장 시간이 많이 걸리고 창의력이 요구되며 가장 중요합니다. 그리고 µl에서 이를 실현하는 것은 불가능합니다. 우리는 원시 스케일링을 전처리로 간주하지 않습니다. "쓰레기 투입-쓰레기 배출"이라는 속담이 있습니다. MCL에서만 MO를 완전히 사용하기에는 MCL에서 추가로 개발하고 구현해야 할 것이 너무 많습니다. 특히 지속적으로 확장되고 있기 때문에 엄청난 것을 포용하는 것은 불가능합니다 ...

정말 그렇게 나쁜가요? 결국 신경망에 대한 많은 기사가 이미 작성되었습니다. 그리고 모든 것이 "단순"한 곳도 있습니다......

 
Vladimir Perervenko 프로젝트는 세 단계로 구성됩니다:
  • 전처리(많은 것들)

그러나 위의 모든 단계 중에서 첫 번째 단계는 가장 시간이 많이 걸리고 창의력이 요구되며 가장 중요합니다. 그리고 이를 µl에서 구현하는 것은 불가능합니다.

제가 알기로는 네트워크의 기능으로 작용하는 일부 가격 함수를 계산하는 것이 어렵다고 들었습니다.

예를 들어 이러한 것들의 구현을 발표 할 사람들이 여기에있을 것입니다.

 
Denis Kirichenko #:

정말 그렇게 나쁜가요? 이미 신경망에 대한 많은 기사가 작성되었습니다. 심지어 모든 것이 "단순"하다는 글도 있습니다. ....

나쁘지 않습니다. 전처리 기능의 최신 개발에 비해 모든 것이 매우 초기 단계에 있습니다.

저는 꽤 오랫동안 R로 프로그래밍을 해왔습니다. 얼마 전부터 파이썬을 사용해 왔는데, 파이썬에서 머신러닝 프로젝트(패키지)를 공부하면서 가장 크게 느낀 점은 전처리가 거의 없다는 것입니다. 접근 방식은 모델이 모든 것을 처리한다는 것입니다. 이것은 나쁘지도 좋지도 않습니다. 이것은 역사적으로 발전해 온 접근 방식입니다.

이와는 대조적으로 R은 전처리의 용도에 대한 이해와 함께 방대한 전처리 기능을 갖추고 있습니다.

최근에는 많은 유용한 개발을 상호 차용하고 있긴 하지만요.

방대함을 모두 커버하는 것은 불가능하며 개발자들은 이를 위해 노력합니다. C로 작성된 것을 포팅하려면-예,하지만 MKL에서 모든 것을 다시 작성하려면.....

ONNX와 관련하여. 이 영역은 새롭고 매우 유망하며 빠르게 발전하고 수요가 많습니다. 이는 ONNX와 전처리로 이동할 가능성이 있다는 것을 의미합니다. 텐서플로우에는 이미 전처리 계층이 있지만 간단하지만 여전히 존재합니다. 시도해 보시면 유용할 것입니다.

물론 교육에서 ONNX를 사용하는 것이 더 매력적으로 보이지만 이것은 Linux에만 해당됩니다. WSL 전문가라면 어떻게든 사용할 수 있을지도 모르죠.

 
이걸 사용하려면 차라리 간단한 포획 패턴😀을 사용하는 것이 좋습니다.
 
이 기사 덕분에 MT5에서 파이썬으로 데이터를 가져오고 파이썬에서 모델을 트랄링하는 방법을 알고 파이썬에서 모델을 가져와 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.