![見出し画像](https://assets.st-note.com/production/uploads/images/143042470/rectangle_large_type_2_07f5d8155b65aa3f2c9ed81fd37bd8a2.jpeg?width=1200)
2023年6月~2024年5月版 AIの指示通りに株式トレードをやってみた 二値分類 スイングトレード編
今回は、スイングトレード編
もうないだろうと自分でも思っていたのですが、また、新たな株式トレードのアイデアが浮かんできました。
今回の記事では、前回の記事で使用した学習済みAIモデルを使用し、スイングトレードによる株式トレードのアルゴリズムを使用したバックテストの結果を記載します。
今回のバックテストもExcelで行っています。
今回作成したExcelファイルを本記事の最後に添付しましたので、ご興味のある方はダウンロードしてみてください(個別銘柄向けにお試しシートも用意しました)。
また、前回の記事については、下記を参照ください。
おさらい 学習済みAIモデルの仕様と制約について
私が作成したAIモデルは、当日の日経平均株価の終値に対して、翌営業日の日経平均株価の終値が上昇するか下落するかを予測するものです。
推論値が0.5以上は翌営業日の日経平均株価の終値が上昇すると予測、推論値が0.5未満は翌営業日の日経平均株価の終値が下落すると予測したことになります。
また、AIモデルの説明変数には、日経平均株価の4値(始値、高値、安値、終値)とVIX指数を使用しています。
このため、私が作成したAIモデルの予測には、当日の日経平均株価の4値とVIX指数の確定が必須条件です。
各数値が確定するスケジュール(時間は日本時間)
当日の15:00に日経平均株価の4値が確定
翌日の05:00(サマータイム) or 06:00以降にVIX指数が確定
つまり、私が作成したAIモデルの予測を知ることができるのは、早くても翌営業日の朝となります。
このため、当日の終値が確定する前にAIモデルの予測を知ることはできません。
株式トレードのアルゴリズムとバックテストのルール
株式トレードのアルゴリズムを以下に記載します。
株式トレードのアルゴリズム(考え方)
AIの予測が前営業日と変わった場合、翌営業日(正確には、予測が出た当日)の始値で建玉を決済すると同時に予測に基づいて新規に売買する
AIの予測が前営業日と変わらない場合、建玉を決済せず、何もしない(スイングトレード)
今回の株式トレードのポイントは、AIの予測が変わらなければ、建玉を決済せず、保持するところにあります。
株式トレードのアルゴリズム(詳細)
初めての売買は、前営業日のAIの予測に従い、当日の始値でエントリーする
AIが上昇と予測した場合、始値で買いエントリー
AIが下落と予測した場合、始値で空売りエントリー
以後は、前々営業日と前営業日のAIの予測に差が生じたか否かで対応を変える
前々営業日と前営業日のAIの予測が同じ(共に上昇、あるいは、共に下落)場合、建玉を維持
前々営業日と前営業日のAIの予測が異なる(上昇と下落の組み合わせ)場合、以下の通りとする
前々営業日が上昇、前営業日が下落の場合、当日の始値で買い玉を決済すると同時に始値で空売りエントリー
前々営業日が下落、前営業日が上昇の場合、当日の始値で売り玉を決済すると同時に始値で買いエントリー
また、バックテストのルールは下記の通りとします。
バックテストのルール
売買は1株単位とする
手数料や税金、等は考慮しない
日経平均株価に対するバックテストの結果
2023年6月から2024年5月までの日経平均株価の過去データを使用したバックテストを行いました。
結果のまとめを紹介する前に、バックテストの詳細について説明します。
![日経平均株価 バックテスト 詳細 一部抜粋](https://assets.st-note.com/img/1717497582649-DvRJUE7jmJ.png?width=1200)
上記は、日経平均株価に対するバックテストの詳細を一部抜粋したものです(バックテストの全ての記録は、本記事に添付したExcelファイルを参照ください)。
2023年6月1日(正確には、6月2日の朝)の推論値が0.5以上であるため、翌営業日である6月2日の始値で買いを行いました。
6月2日のEntry列には買い値である31,300.72円が保持されています。
6月8日までの推論値は0.5以上が続いたため、買い玉を保持しています。
6月9日の推論値が0.5未満となったため、翌営業日の6月12日の始値で買い玉を決済し、かつ、始値で空売りを行いました。
6月12日のEntry列、Exit列およびPL列には、それぞれ下記の値が保持されています。
Entry列: 空売りを行った株価である32,412.12円
Exit列: 買い玉を決済した株価である32,412.12円
PL列: 買い玉を決済した損益(この場合は利益)である1,111.40(=32,412.12 - 31,300.72)円
ちなみに、Entry列とExit列に表示される株価は、常に一緒になります。
この点については冗長かとも思ったのですが、この方が理解しやすいのではないかと考え、この形式にしました。
6月12日の推論値は、引き続き0.5未満であったものの、翌営業日の6月13日の推論値は0.5以上となりました。
このため、翌営業日の6月14日の始値で売り玉を決済し、かつ、始値で買いを行いました。
6月14日のEntry列、Exit列およびPL列には、それぞれ下記の値が保持されています。
Entry列: 買いを行った株価である33,331.47円
Exit列: 売り玉を決済した株価である33,331.47円
PL列: 売り玉を決済した損益(この場合は損失)である-919.35(=32,412.12 - 33,331.47)円
その後の結果も含めて、バックテストの損益をまとめたものを下記に示します。
![日経平均株価 バックテスト 結果](https://assets.st-note.com/img/1717476537538-ICf6l6uptB.png)
上記の表において、損益はその月の損益([円])を、また、累積はその月までの損益に対する累積([円])を表しています。
上記の表をグラフにしたものが、下記となります。
![日経平均株価 バックテスト 結果 グラフ](https://assets.st-note.com/img/1717476578595-NNnmjWre6B.png)
上記のグラフにおいて、損益が左の縦軸、累積が右の縦軸に対応しています。
また、横軸は年月(YYMM)です。
今回のアルゴリズムを使用した株式トレードの損益合計は、1年間で14,965円の利益でした。
前回の結果は10,758円の利益でしたので、改善したことが確認できました。
日経平均レバレッジ上場投信(1570)に対するバックテストの結果
2023年6月から2024年5月までの日経平均レバレッジ上場投信(1570)の過去データを使用したバックテストの結果を下記に示します。
![日経平均レバレッジ上場投信 1570 バックテスト結果](https://assets.st-note.com/img/1717476894184-LCRS0QRwfy.png)
![日経平均レバレッジ上場投信 1570 バックテスト結果 グラフ](https://assets.st-note.com/img/1717476903010-3ptbGhTSFt.png)
今回のアルゴリズムを使用した株式トレードの損益合計は、1年間で13,690円の利益でした。
前回の結果は6,865円の利益でしたので、改善したことが確認できました。
常に50株単位での売買を行った場合、1年間で684,500円の利益となります(手数料、税金、等は考慮せず)。
ファーストリテイリング(9983)に対するバックテストの結果
日経平均株価の構成比率が高い個別銘柄の代表として、ファーストリテイリング(9983)の過去データを使用したバックテストの結果を下記に示します。
![ファーストリテイリング 9983 バックテスト 結果](https://assets.st-note.com/img/1717477104659-a6vSTqZzTH.png)
![ファーストリテイリング 9983 バックテスト 結果 グラフ](https://assets.st-note.com/img/1717477112095-UjaQnAJEbG.png)
今回のアルゴリズムを使用した株式トレードの損益合計は、1年間で17,970円の利益でした。
前回の結果は5,751円の利益でしたので、改善したことが確認できました。
ファーストリテイリング(9983)は100株単位での売買ですので、1,797,000円の利益となります(手数料、税金、等は考慮せず)。
結果に対する個人的な見解
先ず始めに、評価データの期間をバックテストの期間に含めたことについてです。
今回のバックテストの期間のうち、2023年6月から2024年1月まではAIモデル向けの評価データ(学習データではない)に使用しています。
このため、純粋なAIモデルの効果は、2024年2月から5月までの4カ月間となります。
日経平均株価および日経平均レバレッジ上場投信(1570)の結果を見る限り、評価データの期間をバックテストの期間に組み込んだことによる影響は無さそうな気がします。
しかし、ファーストリテイリング(9983)に関しては、評価データの期間である2023年6月から2024年1月までの損益がほぼプラスであるものの、2024年2月から5月までの4カ月間は損益がバラついており、気になるところです。
この結果の原因として私が想像しているものは次の3つです。
ファーストリテイリング(9983)のバックテストに影響を与えそうな原因
評価データの期間をバックテストの期間に組み込んだこと
日経平均株価の予測向けに作成したAIモデルをファーストリテイリング(9983)に適用したこと
ただの偶然
判断するには、もう少し情報が欲しいところです。
続いて、今回のスイングトレードによる株式トレードのアルゴリズムについてです。
今回のスイングトレードによる株式トレードのアルゴリズムは、もしかしたら使える手法かもしれないと思うようになってきました。
ただし、現状はバックテストの期間が直近の1年間のみであるため、あきらかに検証不足です。
長期間のバックテストを行う方法として考えられるのが、次の2つの方法です
長期間のバックテストを行う方法
現状のAIモデルに長期間の推論値を出力させ、この推論値に基づいてバックテストを行う
良い点: AIモデルの再設計を行う必要がなく直ぐにでも実行できる
悪い点: 学習データの期間がバックテストの期間に含まれるため正確性に疑問が生じる
学習データおよび評価データの期間を短くしてAIモデルを再設計する
良い点: 正しいプロセスでバックテストの期間を確保できる
悪い点: AIモデルの再設計に時間と手間を要する
とりあえず、手間のかからない1の方法でバックテストの結果を確認してみたいと思います。
その結果で期待が持てそうであれば、2の方法をやってみます。
バックテスト向けに作成したExcelファイル
今回のバックテスト向けに作成したExcelファイルを以下に添付します(zip形式で圧縮しています)。
Excelファイルのシート構成
バックテスト お試し用 202306-202405
バックテスト 日経平均 202306-202405
バックテスト 日経レバ 1570 202306-202405
バックテスト ファストリ 9983 202306-202405
「バックテスト お試し用 202306-202405」は、気になる銘柄があればお試しできるように用意しました。
「バックテスト お試し用 202306-202405」の使い方
セルD3~セルD248に2023年6月1日から2024年5月31日までの始値を入力
始値を入力すると、後はExcelが月毎の損益と累積およびグラフを表示してくれます。
この記事が気に入ったらサポートをしてみませんか?