こんにちは。TATです。
今日のテーマは「【Pythonで株式投資】レラティブストレングスと52週高値は買いシグナルに有効かを検証してみる【後編】」です。
前編では、純粋にレラティブストレングスと52週高値のデータのみを使ったテクニカル分析のみでした。
こちらは残念な結果となりました。。。
【Pythonで株式投資】レラティブストレングスと52週高値は買いシグナルに有効かを検証してみる【前編】
続きを見る
後編ではこれにファンダメンタルズデータを加えます。
売上高やEPS、ROEなどを考慮したらパフォーマンスは向上するのかをみていきます。
前編はかなり長くなってしまったので、後編はなるべくコンパクトにまとめるように努めます。。。
目次
【Pythonで株式投資】レラティブストレングスと52週高値は買いシグナルに有効かを検証してみる【後編】
データの準備
まずはデータの準備です。
前回用意したデータに加えて、ファンダメンタルズデータを追加します。
XBRLデータで収集してます
ファンダメンタルズデータについては、僕が運営している「投資でニート生活」でTDNETとEDINETからXBRLデータを収集しています。
これを集めるためのプログラムを書くのは大変でしたが、ここに来てようやく活用する時が来ました。
PythonでTDNETとEDINETからXBRLデータを集めたら地獄だった話。
続きを見る
毎日最新のデータを収集してDBで管理しています。
APIを介していつでもデータを取得できるようになっています。
今回はここから必要なデータをとって使っていきます。
取得するデータについて
今回利用するデータについては、次の通りです。
いずれもオニールやミネルヴィニの投資手法を軸に、僕が使えるかな?と勝手に判断したものです。
利用するデータ
- 四半期ごとの決算期末日
- 売上高
- EPS
- ROE
- 自己資本比率
- 営業CF
- 投資CF
- 財務CF
- 期末発行済株式数(時価総額を計算するため)
データはこんな感じです。
例としてトヨタ自動車のデータを抽出しました。
上記のデータを用意して、売上高とEPSについては前年同期比を計算してカラムを追加します。
営業CFと投資CFからフリーCFも計算します。
これを元のデータとくっつけて、52週高値が更新されたタイミングのデータ判定してくっつけます。
これで、52週高値が更新された日のファンダメンタルズを確認することができます。
これを使って、いろいろな条件でシミュレーションしていきます。
さまざまな条件でシミュレーションをやってみる
データの準備ができたところでシミュレーションしていきます。
設定条件
前編では、レラティブストレングスや52週高値の更新間隔日数などを考慮しました。
これら全てを考慮するとデータ量が凄まじいことになってしまうので今回は次の条件に絞ります。
シミュレーションの条件
- 投資金額の上限は50万円とする
- 株価5,000円以上の銘柄は買わない。
- 株価が2,300円とかなら50万円になるべく近づけるために100株ではなく200株購入する
- *これは僕の投資戦略に合わせています
- 52週高値の更新間隔日数は20日以上とする
- 前編の結果より、ある程度間隔が開いた方がが結果は良くなることがわかっている
- 20日の他にも、50日、100日、200日で検証する
- 利確・損切りポイントを広めに設定する
- 前編の結果より、株価の動きにはある程度許容した方がいいことがわかっている
- 利確は10%, 15%, 20%、損切りは-10%, -15%, -20%で検証する
- レラティブストレングスは80以上とする
- レラティブストレングスは高い方がパフォーマンスが良くなる
- 80の他にも、90以上、95以上、99の条件でも検証する
上記の内容に、ファンダメンタルズデータを加えて検証を行っていきます。
損益の判定方法
また、損益の計算については、2通りで計算します。
1週間(5営業日)と1ヶ月(21営業日)の2つの期間を使い、利確ポイントと損切りポイントを決めます。
期間内に利確ポイントに達したら利確、損切りポイントにまで下がったら損切りです。
損益を判定するために、まずは期待収益とリスクを計算します。
ここでは、1週間・1ヶ月間の高値と安値から計算します。
これで期待利益率と想定損失率を計算することができます。
用意したデータでは、終値ベースで高値と安値を計算したもの(sell_price_M1_close_highest、sell_price_M1_close_lowest)と、高値ベース・安値ベースでそれぞれ高値と安値を計算したもの(sell_price_M1_high_highest, sell_price_M1_low_lowest)があります。
例えば、sell_price_M1_high_highestは、買いシグナル(52週高値更新)が出てからの1ヶ月間における高値の最高値を示しています。
どっちで計算しても良いですが、ここでは最大の利益と最大の損失ということで高値ベース・安値ベースでそれぞれ高値と安値を計算したもの(sell_price_M1_high_highest, sell_price_M1_low_lowest)を使って計算します。
それぞれ期待収益率とリスクとして計算します。
この期待収益が利確ポイントを超えるか、あるいはリスクが損切りポイントが超えているかで損益を判定します。
どちらの超えている場合は、負けを認めて損切りを選ぶことにします。
本来は利確ポイントと損切りポイントでどちらが先に達するのかを判定する必要がありますが、今回のデータはここまで用意していませんでした。
反省です。。。
時価総額を調整する
まずは時価総額からみていきます。
株価が大きく上昇する銘柄を分析すると、時価総額が300億円未満である場合が多いです。
これはいろいろな成長株投資を解説する本に記載されています。
直近で読んだのはこちらの本です。
ここでは、時価総額を300億円以下、500億円以下、1000億円以下でどれくらい変化があるのかをみていきます。
まずはW1(1週間)でシミュレーションした結果です。
最もパフォーマンスの良かったトップ5です。
残念ながら、一番成績の良いものでもマイナスでした。。。
-0.37%とほぼ横ばいです。
M1(1ヶ月)でシミュレーションした結果も同様でした。
時価総額だけだと厳しいですね。
売上高とEPSでみる
次に売上高とEPSを使ってみます。
ここではそれぞれの前年同期比を使います。
これは、オニールやミネルヴィニの投資手法を参考にしています。
直近の四半期決算で売上高とEPSが前年同期比で20%以上成長している銘柄でシミュレーションしてみます。
結果がこちらです。
こちらもトップ5を見てみます。
まずは1週間の結果です。
またもやすべてマイナスの結果になりました。。。
ただ、損益率は先ほどの-0.38%よりかは改善しています。
しかし、1ヶ月でみると悪化してました。
フリーCFを考慮する
次にフリーCFでもみてみます。
フリーCFがプラスのものに絞ったらどうなるでしょうか。
結果としては、どちらもダメでしたw
ROEを考慮する
次にROEで見てみます
ROEが大きいと資本効率が高くなります。
特に海外の投資家はROEを重視しているので、これが高いと外資からの投資も増える可能性が出てきます。
よく基準とされるのが、ROEが8%とか10%です。
ここでは、8%, 10%, 15%, 20%で比較してみます。
1週間の結果を見てみると、へぼいですがようやくプラスが出てきました。
+0.48%なんて誤差ですけどねw
トップ5全てがROE20%というのも面白いですね。
高ければ高い方がいいんでしょうか。
1ヶ月で見てもプラスが出てきましたが、利益としてはめちゃ低いですw
自己資本比率を考慮する
最後に自己資本比率です。
財務の健全性を確認するためによく利用されます。
いろいろな本を読んでいると、自己資本比率40%が1つの目安にされていることが多いように個人的に感じていますので、これを満たす銘柄に絞ってみてみます。
結果は、全然ダメでした。
どっちもダメですね。
全部考慮する
最後にやけくそで全部入れてみますw
1個ずつ考慮した場合だとダメなパターンがほとんどでしたが、組み合わせたらいいパターンがあるかもしれません。
まずは1週間の結果です。
今までの中では最高の損益率が出ました。
それでも1.39%でした。。。
辛いですね。そもそもやり方を根本的に変えた方が良さそうです。
1ヶ月の結果を見てもめちゃしょぼいです。
レラティブストレングスと52週高値では機械的にトレードすることはなかなか難しいんですかね。
とりあえず、色々と試した結果、これで行くとやべーなということがわかったので満足です。
データの分析・可視化にはPythonが最適!
本記事で紹介したコードは、全てPythonを使って書いています。
Pythonはデータの分析や可視化を得意とするプログラミング言語で、さらにAI関連のライブラリーも豊富で昨今のAIブームで需要が急拡大しています。
→ 【いますぐ始められます】データ分析をするならPythonが最適です。
また、Pythonは比較的学びやすい言語でもあります。
実際、僕は社会人になってからPythonを独学で習得して転職にも成功し、Python独学をきっかけに人生が大きく変わりました。
→ 【実体験】ゼロからのPython独学を決意してから転職を掴み取るまでのお話。
Pythonの学習方法についてはいろいろな方法があります。
僕はUdemyを選びましたが、書籍やプログラミングスクールも選択肢になります。
→ 【決定版】Python独学ロードマップ【完全初心者からでもOKです】
→ 【まとめ】Pythonが学べるおすすめプログラミングスクール
→ プログラミングの独学にUdemyをおすすめする理由!【僕はUdemyでPythonを独学しました!】
まとめ
いかがでしたでしょうか。
ここでは「【Pythonで株式投資】レラティブストレングスと52週高値は買いシグナルに有効かを検証してみる【後編】」ということで、レラティブストレングスと52週高値を利用した買いシグナルについて検証してみました。
前編では、テクニカル分析を中心に行い、本記事である後編ではこれにファンダメンタルズ分析を加えました。
結果としてはとても残念でしたが、ふと思った疑問をデータを使って検証することができたので満足してます。
今回は、買いシグナルが出てから1週間あるいは1ヶ月の株価の動きしか考慮していません。
これを引き伸ばしたら結果は変わってくるもしれませんし、売却のタイミングをもっと工夫すればパフォーマンスが向上する可能性は十分にあります。
今回、色々とデータをこねくり回して分析するのはとても面白かったので、今後もちょくちょく思いついたことをやってみようと思います。
現状、僕の投資戦略では、実際にここで利用したデータを使ってトレードをしています。
最終的には僕がマニュアルでチェックした上で最終判断をしていますが、今回の結果を見るとこのチェックがとても大事であることもよくわかります。
やはり数字だけではなくて、四季報のコメントを見たり、サイトを調べたり、社長のインタビューを見たりすることも大事なのかなと改めて思いました。
【2022年版】日本株の投資戦略を少し変更したのでご紹介します【成長株×分散×中長期】
続きを見る
結果はズタボロですが、ご興味あれば前編も見てあげてください。
【Pythonで株式投資】レラティブストレングスと52週高値は買いシグナルに有効かを検証してみる【前編】
続きを見る
ここまで読んでくださり、ありがとうございました。