見出し画像

株と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の特徴を確認する。

手順

  1. J-Quants APIから取得した日足データを週足データに変換する。

  2. 全期間にわたりP、Lを計算

  3. 結果を可視化する

結果


x軸:週次利益P、y軸:週次損失L
描画時間短縮のため、ランダムサンプリングした2万点のデータをプロット

散布図からわかる通り、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をもとに利確ラインと損切ラインを決定する。

    • 週の引けですべてのポジションを解消し、翌週も同様の投資行動をとる。

なお、今回はロングのみを想定して閾値を設定しているが、ショートでも同様の傾向がみられることを確認している。


この記事が気に入ったらサポートをしてみませんか?