株とpythonと備忘録 23/1/14
はじめに
目標
当週tの特徴量空間F(t)をもとに、翌週t+1の週次利益P(t+1)および週次損失L(t+1)を予測する。
Pは週始値と週高値との対数差分、Lは週始値と週安値との対数差分と定義する。
予測対象
東京証券取引所に上場している全銘柄(2023/1/14時点で4247銘柄)
実行環境、使用データ等
windows10
python 3.9
Jupyter Notebook
J-Quants APIを用いて取得した、東証全上場銘柄の2017/1/4~2023/1/13の日次データを使用。
J-Quants APIについては以下を参照のこと。
本稿の内容
PとLの特徴を確認する。
手順
J-Quants APIから取得した日足データを週足データに変換する。
全期間にわたりP、Lを計算
結果を可視化する
結果
散布図からわかる通り、Pが大きければLは小さく、Lが大きければPは小さい傾向がある。この傾向は、リスクを限定しつつ短期間で大きな利益を上げるには都合がよい。
ここで、P>=0.2(週始値>=週高値×約1.2)を満たすデータについてさらに調べると以下の結果となった。
count(P>=0.2) : 16984
count(L> 0.1) : 686
count(L<= 0.1) : 16298
percent(L> 0.1) : 4.039095619406501
Pが0.2をこえるデータのうち、Lが0.1をこえるものは約4%である。これは大変うれしい結果である。
仮に、ある銘柄の翌週のPが0.2をこえると予測されたなら、約96%の確率で翌週のLは0.1を超えない。このため、利確ラインを+20%に、損切ラインを-10%に設定しておけば、理論的には予測精度×0.96の確率で、1週間で20%の利益をとることができる。
仮に予測精度が60%であったとしても、勝率57.6%、ペイオフレシオ2のトレードを年間16984/6 =約2830回行うことができる。資金が足りないので実際には不可能だろうが……。
ペイオフレシオを2に固定し、閾値の値を振った結果は以下のとおりである。
count(P>=0.1) : 74121
count(L> 0.05) : 10440
count(L<= 0.05) : 63681
percent(L> 0.05) : 14.085077103654834
count(P>=0.3) : 5969
count(L> 0.15) : 105
count(L<= 0.15) : 5864
percent(L> 0.15) : 1.7590886245602277
count(P>=0.4) : 2690
count(L> 0.2) : 18
count(L<= 0.2) : 2672
percent(L> 0.2) : 0.6691449814126395
当然のことながら、閾値を上げるほど総数は減る。さらに、損切が発動するであろう確率も減ることが期待される(percentが低下しているため)。
閾値を上げれば、単位期間(1週)でとれる利益が大きくなり、かつ損切を迫られる可能性が減る。なんと好都合なことか。
まとめ
今回行った検証から、翌週の週次利益Pが大きいほど、好適なトレードを行えると判断できる。
上記はもはや、翌週の週次損失Lを予測する必要がないことを意味するため、今後構築するモデルは週次利益Pのみを予測するものとする。
実際のトレード時には、予測されたPの上位N銘柄に等しい金額を機械的に投じる。
その際、ペイオフレシオを任意に設定し、Pをもとに利確ラインと損切ラインを決定する。
週の引けですべてのポジションを解消し、翌週も同様の投資行動をとる。
なお、今回はロングのみを想定して閾値を設定しているが、ショートでも同様の傾向がみられることを確認している。
この記事が気に入ったらサポートをしてみませんか?