基于Gym Anytrading 的強化學習簡單實例
近年來強化學習(RL)在算法交易領域受到了極大的關注。強化學習算法從經驗中學習并基于獎勵優化行動使其非常適合交易機器人。在這篇文章,我們將簡單介紹如何使用Gym Anytrading環境和GME (GameStop Corp.)交易數據集構建一個基于強化學習的交易機器人。
強化學習是機器學習的一個子領域,涉及代理學習與環境交互以實現特定目標。代理在環境中采取行動,接收獎勵形式的反饋,并學會隨著時間的推移最大化累積獎勵。代理的目標是發現一個將狀態映射到行動的最優策略,從而導致最好的可能結果。
Gym Anytrading
Gym Anytrading是一個建立在OpenAI Gym之上的開源庫,它提供了一系列金融交易環境。它允許我們模擬各種交易場景,并使用RL算法測試不同的交易策略。
安裝依賴
將使用的主要庫是TensorFlow, stable-baselines3和Gym Anytrading。運行以下代碼來安裝所需的依賴項:
!pip install tensorflow
!pip install stable_baselines3
!pip install gym
!pip install gym-anytrading
!pip install tensorflow-gpu
導入庫
導入必要的庫和設置環境開始:
# Gym stuff
import gym
import gym_anytrading
# Stable baselines - RL stuff
from stable_baselines3.common.vec_env import DummyVecEnv
from stable_baselines3 import A2C
# Processing libraries
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
加載GME交易數據
將使用GameStop Corp. (GME)的歷史交易數據作為示例。我們假設您擁有CSV格式的GME交易數據,沒有的話可以通過搜索引擎找到下載地址。
加載GME交易數據并為Gym Anytrading環境做準備:
# Load GME trading data
df = pd.read_csv('gmedata.csv')
# Convert data to datetime type
df['Date'] = pd.to_datetime(df['Date'])
df.dtypes
# Set Date as the index
df.set_index('Date', inplace=True)
df.head()
通過Gym創建交易環境
下一步就是使用Gym Anytrading創建交易環境。環境將代表GME交易數據,我們的代理將通過購買、出售和持有股票等行為與環境進行交互。
# Create the environment
env = gym.make('stocks-v0', df=df, frame_bound=(5, 100), window_size=5)
# View environment features
env.signal_features
# View environment prices
env.prices
探索環境
在繼續構建RL模型之前,可以先對環境可視化了解其特征。
# Explore the environment
env.action_space
state = env.reset()
while True:
action = env.action_space.sample()
n_state, reward, done, info = env.step(action)
if done:
print("info", info)
break
plt.figure(figsize=(15, 6))
plt.cla()
env.render_all()
plt.show()
該圖顯示了GME交易數據的一部分,以及Gym Anytrading環境生成的買入和賣出信號。
構建強化學習模型
我們將使用stable-baselines3庫構建RL模型。我們將使用A2C(Advantage Actor-Critic)算法
# Creating our dummy vectorizing environment
env_maker = lambda: gym.make('stocks-v0', df=df, frame_bound=(5, 100), window_size=5)
env = DummyVecEnv([env_maker])
# Initializing and training the A2C model
model = A2C('MlpPolicy', env, verbose=1)
model.learn(total_timesteps=1000000)
評估模型
在訓練模型之后,可以評估它在GME交易數據的不同部分上的表現。
# Create a new environment for evaluation
env = gym.make('stocks-v0', df=df, frame_bound=(90, 110), window_size=5)
obs = env.reset()
while True:
obs = obs[np.newaxis, ...]
action, _states = model.predict(obs)
obs, rewards, done, info = env.step(action)
if done:
print("info", info)
break
plt.figure(figsize=(15, 6))
plt.cla()
env.render_all()
plt.show()
總結
在這篇文章中,我們介紹了如何使用Gym Anytrading環境和stable-baselines3庫來構建一個基于強化學習的交易機器人。本文只是一個起點,構建一個成功的交易機器人需要仔細考慮各種因素并不斷改進。