2007年1月~2024年5月版 AIの指示通りに株式トレードをやってみた 二値分類 スイングトレード編
今回はバックテストの期間を長くした結果を紹介します
前回の記事では、2023年6月から2024年5月までの1年間を対象とした学習済みAIモデルの推論に基づくスイングトレードのバックテストを行った結果を紹介しました。
前回の記事については、下記を参照ください。
個人的には、バックテストの結果が良かったと感じたため、さらに長い期間のバックテストを行うことにしました。
具体的な期間は、2007年1月から2024年5月までとしました。
2007年を起点とした理由は、2008年のリーマンショックをバックテストの期間に含めたかったからです。
バックテストの期間に関する問題点
今回のバックテストの期間を2007年1月からとすることについて、一つ問題があります。
それは、AIモデルの学習データの期間がバックテストの期間に含まれてしまうということです。
AIモデル向け学習データおよび評価データの期間
学習データ: 1990年1月4日~2023年1月24日
評価データ: 2023年1月25日~2024年1月30日
学習データの期間がバックテストの期間に含まれることで、AIモデルの実力よりも良い結果が得られる可能性があります。
本来であれば、学習データおよび評価データの期間はバックテストの期間を含めないように調整し、AIモデルを設計する必要があります。
今回の記事において、正しいやり方を選択しなかった理由は、時間と手間を減らしたかったからです。
今回のバックテストの結果次第では、正しいやり方での再検証を考えるつもりです。
株式トレードのアルゴリズムとバックテストのルール
株式トレードのアルゴリズムとバックテストのルールは、前回の記事で使用したものと全く同じです。
株式トレードのアルゴリズム(考え方)
AIの予測が前営業日と変わった場合、翌営業日(正確には、予測が出た当日)の始値で建玉を決済すると同時に予測に基づいて新規に売買する
AIの予測が前営業日と変わらない場合、建玉を決済せず、何もしない(スイングトレード)
バックテストのルール
売買は1株単位とする
手数料や税金、等は考慮しない
日経平均株価に対するバックテストの結果
2007年1月から2024年5月まで日経平均株価の過去データを使用したバックテストの結果を下記に示します。
上記の表において、損益はその年の損益([円])を、また、累積はその年までの損益に対する累積([円])を表しています。
注意
2024年は1月から5月までとなっています
上記の表をグラフにしたものが、下記となります。
上記のグラフにおいて、損益が左の縦軸、累積が右の縦軸に対応しており、横軸は年(YY)です。
また、月単位でのバックテストにおける損益の累積をグラフにしたものが下記となります。
上記のグラフにおいて、縦軸が損益の累積([円])、横軸は年月(YYMM)です。
バックテストの結果から分かったこと
リーマンショックのあった2008年は(なぜか)最も良いパフォーマンスが得られ、その額は13,222円であった
2013年はアベノミクス相場が始まったにもかかわらず最も損失が多くなり、その額は-2,309円であった
2010年から2013年までの4年間と2015年から2017年までの3年間はパフォーマンスが低迷した
年間を通して損失となったのは2010年、2011年および2013年の3年間のみであった
ファーストリテイリング(9983)に対するバックテストの結果
日経平均株価の構成比率が高い個別銘柄の代表として、ファーストリテイリング(9983)の過去データを使用したバックテストの結果を下記に示します。
バックテストの結果から分かったこと
2023年は最も良いパフォーマンスが得られ、その額は20,806円であった
2013年はアベノミクス相場が始まったにもかかわらず最も損失が多くなり、その額は-5,293円であった
2007年から2017年までの11年間はパフォーマンスが低迷した
2018年以降はパフォーマンスが改善した
結果に対する個人的な見解
今回の結果に対する私の見解は、以下の通りです。
今回の学習済みAIモデルと株式トレードアルゴリズムの組み合わせは、実際に株式トレードを行うにはリスクが大きいと感じる
バックテストのパフォーマンスは日経平均株価の方がファーストリテイリング(9983)よりも高くなっている
今回使用したAIモデルは日経平均株価を対象としているため、個別銘柄を対象とする場合はAIモデルのチューニングが必要である
2013年のバックテストのパフォーマンスが悪い理由は分からない
2013年のバックテストのパフォーマンスが悪い理由が分からなかったので、日経平均株価の終値とファーストリテイリング(9983)の終値をグラフにしてみました。
ファーストリテイリング(9983)は、リーマンショック(2008年)の影響が少ないように見えます。
また、問題の2013年は、日経平均株価およびファーストリテイリング(9983)の何れも株価が上昇しています。
株価の動きとバックテストの損益の関係性が全く見えません。
ただし、損益の観点では、2010年から2017年と2018年以降とで雰囲気が変わっているような気がします。
例えば、AIモデルの学習期間を2017年以前とし、評価期間を2018年として良い結果が得られるのであれば、かなり使えるレベルになるような気がします。
改めて、株式トレードアルゴリズムの検討と、それに最適なAIモデルの設計が必要だと感じました。
バックテスト向けに作成したExcelファイル
今回のバックテスト向けに作成したExcelファイルを以下に添付します(zip形式で圧縮しています)。
Excelファイルのシート構成
バックテスト お試し用 200701-202405
バックテスト 日経平均 200701-202405
バックテスト ファストリ 9983 200701-202405
N225_200701-202405
9983_200701-202405
「バックテスト お試し用 200701-202405」は、気になる銘柄があればお試しできるように用意しました。
「バックテスト お試し用 200701-202405」の使い方
セルD3~セルD2405に2007年1月4日から2024年5月31日までの始値を入力
始値を入力すると、後はExcelが月毎の損益と累積およびグラフを表示してくれます。
使用上の注意
バックテストのキモとなる推論値は記載されている年月日に基づいて算出されています
始値を入力する際は、年月日が完全に一致していることをご確認ください
万が一、年月日が違っていた場合はバックテストも誤った結果となってしまいます
年月日が一致する個別銘柄の株価データをダウンロードする方法として、私が以前に作成したPythonプログラムを使用する方法があります。
Pythonプログラムを保存したファイル名をfilename.pyとした場合、Pythonプログラムの実行方法は以下の通りです。
> python filename.py --code 9983 --s 2007-1-1 --e 2024-5-31 --dl 9983.csv
上記の通りに実行した場合、ファーストリテイリング(9983)の株価データを2007年1月1日以降から2024年5月31日以前までダウンロードし、9983.csvファイルに保存します。