AIを使って不労所得の道へ(5)~手数料を0にしてみた~【AIncomeプロジェクト】

AIを使って不労所得

はじめに

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

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

AIncomeプロジェクト

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

前回までの取り組み

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

今回の取り組みの概要

デフォルトで手数料が組み込まれていました,しかし,BTC_FXは手数料が0なので,パラメータを0にして再度学習をさせていきたいと思います.

インポート

import os, gym
import gym_anytrading
import matplotlib.pyplot as plt
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

設定

# ログフォルダの生成
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
trade_fee = 0.0003

環境の生成

# 環境の生成
env = gym.make('forex-v0', frame_bound=(idx1, idx2), window_size=window_size)
env.trade_fee = trade_fee

env = Monitor(env, log_dir, allow_early_resets=True)

# シードの指定
env.seed(0)
set_global_seeds(0)

# ベクトル化環境の生成
env = DummyVecEnv([lambda: env])

# モデルの生成
model = PPO2('MlpPolicy', env, tensorboard_log=log_dir)
#model = ACKTR('MlpPolicy', env, verbose=1)

# モデルの読み込み
# model = PPO2.load('trading_model')

学習

# モデルの学習
model.learn(total_timesteps=128000)

# モデルの保存
model.save('trading_model4.1')

モデルのテスト

env = gym.make('forex-v0', frame_bound=(idx2, idx3), window_size=window_size)
env.seed(0)
state = env.reset()
while True:
    # 行動の取得
    action, _ = model.predict(state)
    # 1ステップ実行
    state, reward, done, info = env.step(action)
    # エピソード完了
    if done:
        print('info:', info)
        break
info: {'total_reward': -373.2999999999831, 'total_profit': 0.9271699595232792, 'position': 1}

trade_fee=0

info: {'total_reward': -152.69999999997458, 'total_profit': 0.9674896949404773, 'position': 1}

trade_fee=0.0003

info: {'total_reward': -373.2999999999831, 'total_profit': 0.9271699595232792, 'position': 1}

グラフのプロット

#plt.cla()
plt.figure(figsize=(30, 10))
env.render_all()
plt.show()

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

結果

手数料がないほうが,純利益が高いですね.しかし,手数料がある方が報酬の学習が上向きになっているのに対して,手数料が無いと迷走してることが分かります.これは面白い結果ですね.
しかし,学習回数を増やすとまた違った結果になるかもしれません.
そこで,次回は,並列処理を行い学習回数を増やしていきたいと思います.

参考サイト

1:AIを使って不労所得の道へ(1)~Python AnyTradingでランダム投資~【AIncomeプロジェクト】
2:AIを使って不労所得の道へ(2)~MLPでFXの学習させてみた~【AIncomeプロジェクト】
3:AIを使って不労所得の道へ(3)~学習結果をTensorboardで可視化させてみた~【AIncomeプロジェクト】
4:AIを使って不労所得の道へ(4)~学習回数を増やしてみた~【AIncomeプロジェクト】

コメント

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