AIを使って不労所得の道へ(7)~FXの学習を並列処理にしてみた~【AIncomeプロジェクト】

AIを使って不労所得

はじめに

素人でも戦略的に取引したい

株やFXの知識がないため,戦略的な取引ができない素人が多いと思います.私もその一人です.
そこで,強化学習の力を借りて戦略的に取引をしようと思います.

AIncomeプロジェクト

AIで所得(Income)を得るため「AIncome」と名付けました.

前回までの取り組み

前回は強化学習とそれをシミュレーションするOpenAI Gymの説明をしました*1.さらには,ランダムで行動を決定して売り買いしてみたところ,ランダムでも利益が出るような結果になっていました*1.また,ランダム投資からPPO2へ深層学習強化学習のモデル投入*2やTensorboardで可視化*3,手数料の考慮*4などを取り組んでいました.
さらに,学習回数を10倍に増やしたりしてみましたところ,処理時間が大幅に増えてきました*5ので,並列化の知識を付けました*6

今回の取り組みの概要

CartPoleではなく,FXのデータに対して並列処理を行って学習時間を短縮していきたと思います.

Google Drive setting

from google.colab import drive
drive.mount('/content/drive')
%cd /content/drive/MyDrive/AIncome
!pwd

作業フォルダ

!mkdir AutoTrade07_multi
%cd  AutoTrade07_multi
!pwd

必要パッケージのインストール

"""
#!pip install gym[all] -U
!pip install "gym==0.19.0"
!pip install stable-baselines[mpi]
#!pip install tensorflow==1.14.0
!pip install tensorflow-gpu==1.14.0
!pip install pyqt5
!pip install imageio
!pip install gym-anytrading
"""
!pip install "gym==0.19.0"
!pip install stable-baselines[mpi]
#!pip uninstall -y tensorflow-gpu
#!pip uninstall -y tensorflow
#!pip install tensorflow-gpu==1.14.0
!pip install gym-anytrading
!pip uninstall tensorboard-plugin-wit --yes

インポート

"""

import gym_anytrading

from gym_anytrading.envs import TradingEnv, ForexEnv, StocksEnv, Actions, Positions
from gym_anytrading.datasets import FOREX_EURUSD_1H_ASK, STOCKS_GOOGL
from stable_baselines.common.vec_env import DummyVecEnv
from stable_baselines import PPO2
from stable_baselines import ACKTR
from stable_baselines.bench import Monitor
from stable_baselines.common import set_global_seeds
"""
import os, gym
import matplotlib.pyplot as plt

設定


# ログフォルダの生成
log_dir = './logs/'
os.makedirs(log_dir, exist_ok=True)

# train data
idx1 = 100
idx2 = 5000

# test data
idx3 = 6000

window_size = 100

trade_fee = 0

環境の生成

import gym

import gym_anytrading
from gym_anytrading.envs import TradingEnv, ForexEnv, StocksEnv, Actions, Positions

from stable_baselines.common.policies import MlpPolicy
from stable_baselines.common import make_vec_env
from stable_baselines import PPO2

# multiprocess environment
env = make_vec_env('forex-v0', n_envs=400)
env.trade_fee = trade_fee

# model = PPO2(MlpPolicy, env, tensorboard_log=log_dir)
model = PPO2('MlpPolicy', env, tensorboard_log=log_dir)

model.learn(total_timesteps=2500000)
model.save("ppo2_forex-v0")

del model # remove to demonstrate saving and loading

model = PPO2.load("ppo2_forex-v0")
# Enjoy trained agent

plt.figure(figsize=(30, 10))
obs = env.reset()
while True:
    action, _states = model.predict(obs)
    obs, rewards, dones, info = env.step(action)
    # env.render()
    # print('info:', info)

    # エピソード完了
    if dones.any():
        print('info:', info)
        break

create total_reward list and plot

トータルの報酬をヒストグラムにしたものがこちらです.
平均で見ると勝っていますね.
これは面白い結果です.

import numpy as np

plt.figure(figsize=(30, 10))
print('info:', len(info))
total_profit_list = []

for inf in info:
  total_profit_list.append(inf['total_reward'])

plt.hist(np.array(total_profit_list))

tensorboard

# Load the TensorBoard notebook extension
%load_ext tensorboard
%tensorboard --logdir logs/

プログラムコード

AIncome/AutoTrade7.ipynb at main · HamaruKi0303/AIncome
Contribute to HamaruKi0303/AIncome development by creating an account on GitHub.

参考サイト

コメント

タイトルとURLをコピーしました