こんにちは。TATです。
今日のテーマは「【Pythonで株式投資】52週高値と出来高を組み合わせると最強シグナルになるかもしれない」です。
久しぶりの株式投資の検証記事になります。
タイトルの通り、52週高値と出来高を組み合わせたシグナルを考えてみたのでその結果をご紹介します。
結論から言いますと、結構いいかもしれません!
52週高値更新銘柄は、一つのシグナルとして利用されます。
過去1年間で最高値を更新しているので、何かしらの変化が起きている場合が多いです。
ただし、この52週高値を天井としてすぐさま下落に転じてしまうパターンも少なくありません。
そのまま上昇していくのか、あるいは下落に転じてしまうのか、この判断の手助けをしてくれるのが出来高です。
出来高を伴って52週高値を更新すると、そのまま上昇していく確率が増えます。
さらに業績とかその他の指標も組み合わせたら最強のシグナルになるんじゃないかと勝手に期待しています。
目次
今回検証してみるシグナルについて
まずは今回検証してみたシグナルについてご紹介します。
注目したのは3つの指標
注目したのは次の3つです。
注目ポイント
- 52週高値
- 52週出来高
- 出来高の10週移動平均線
上記の3つの指標に注目して、これらを組み合わせてシグナルとして機能するのかを検証していきます。
52週出来高は、52週高値の出来高バージョンで、過去52週で出来高が最大になっていることを意味します。
10週移動平均線というのはオニールの投資手法でよく使用されているので採用しました。
日足に換算すると50日になります。
2種類のシグナルを定義
52週高値、52週出来高、出来高の10週移動平均線を組み合わせて、次の2通りのシグナルを定義します。
シグナル
- シグナル1:52週高値 & 52週出来高
- シグナル2:52週高値 & 直近の出来高 > 出来高10週移動平均線 & 直近の出来高 > 前週の出来高
1つ目の「52週高値 & 52週出来高」はわかりやすいですね。
一番厳しい条件でシグナルとして使ってみます。
2つ目の「52週高値 & 直近の出来高 > 出来高10週移動平均線 & 直近の出来高 > 前週の出来高」は少し緩めです。
出来高の条件を少し緩めて、10週移動平均線を上回り、なおかつ出来高が前週よりも増えていることを条件にします。
ちなみにシグナル1はシグナル2を内包しています。
つまり、シグナル1が起きた時はシグナル2の条件も必ず満たしている、ということになります。
これらの条件がうまくシグナルとして機能するのかをみてみます。
チャートでシグナルを可視化する
次にシグナルを可視化してみます。
チャートに表示した方がわかりやすいですからね。
とりあえず適当な銘柄をピックアップしてシグナルと一緒に可視化してみます。
株価データの準備
まずは株価データを準備します。
すでに過去記事で紹介しているので詳細は割愛しますが、yahoo_finance_api2で株価データを取得します。
本記事では結果にフォーカスしたいので、コードの解説は行いません。
詳細はこちらの記事をご参照ください。
【Pythonコード解説】yahoo_finance_api2で日本株の株価データを取得する
続きを見る
ここでは例としてトヨタ自動車の週足データを過去3年分取得しました。
一応使用したコードだけ貼っときますね。
import sys from yahoo_finance_api2 import share from yahoo_finance_api2.exceptions import YahooFinanceError import pandas as pd ticker = 7203 my_share = share.Share('{}.T'.format(ticker)) symbol_data = None try: symbol_data = my_share.get_historical( share.PERIOD_TYPE_YEAR, 3, share.FREQUENCY_TYPE_WEEK, 1) except YahooFinanceError as e: print(e.message) sys.exit(1) df = pd.DataFrame(symbol_data) df["datetime"] = pd.to_datetime(df.timestamp, unit="ms")
取得したデータがこちらです。
52週高値、52週出来高、出来高の10週移動平均線を計算
次に必要なデータを計算します。
ここで必要になるのが、52週高値、52週出来高、出来高の10週移動平均です。
これらについてもコードで簡単にご紹介して詳細は割愛します。
Pandasのrolling関数を使えば一瞬です。
df["52w_high"] = df["high"].rolling(window=52).max() df["52w_volume"] = df["volume"].rolling(window=52).max() df["sma10_volume"] = df["volume"].rolling(window=10).mean()
簡単ですね。
これで計算完了です。
【コード解説】Pythonで株価データから主要なテクニカル分析を計算して可視化する【移動平均線、MACD、RSI】
続きを見る
シグナルを判定する
次にシグナルの判定です。
再掲しときます。
シグナル
- シグナル1:52週高値 & 52週出来高
- シグナル2:52週高値 & 直近の出来高 > 出来高10週移動平均線 & 直近の出来高 > 前週の出来高
これをPythonで実装していきます。
apply関数を使えば、1行で完了します。
また、前日の出来高を利用するために、shift関数で1日前のデータを用意しました。
df["d1_volume"] = df["volume"].shift() df["signal1"] = df.apply(lambda x: x["high"] if x["high"]==x["52w_high"] and x["volume"]==x["52w_volume"] else None, axis=1) df["signal2"] = df.apply(lambda x: x["high"] if x["high"]==x["52w_high"] and x["volume"]>x["sma10_volume"] and x["volume"] > x["d1_volume"] else None, axis=1)
結果がこちらです。
なかなかシグナルは発生しないので、ほとんどがNaNですね。
これでデータの準備は完了です。
チャートに表示する
次にチャートによる可視化です。
ローソク足チャートに出来高やシグナルを合わせて表示してみます。
Pythonでチャートを描くにはいろいろなライブラリがありますが、ここではmplfinanceを使います。
Pythonのmplfinanceで株価のローソク足チャートを描く方法【コード解説】
続きを見る
使用したコードはこちらです。
import mplfinance # indexの設定 df.index = pd.DatetimeIndex(df["datetime"]) add_plot = [ mplfinance.make_addplot(df["signal2"], panel=0, secondary_y=False, type='scatter', color="blue", markersize=50), mplfinance.make_addplot(df["signal1"], panel=0, secondary_y=False, type='scatter', color="orange", markersize=50), mplfinance.make_addplot(df["sma10_volume"], panel=1, secondary_y=False, color="gray") ] mplfinance.plot(df[["open", "high", "low", "close", "volume"]], type="candle", volume=True, addplot=add_plot, figsize=(15,5), style='yahoo')
表示されるチャートがこちらです。
オレンジがシグナル1、青がシグナル2です。
前述した通り、シグナル1はシグナル2を内包しているので、オレンジのシグナル1のところではシグナル2も同時に発生しています。
結果を見た感じ、いい感じに機能しているように見えます。
直近のシグナルはダマシとなっていますが、うまく活用すればそこそこ機能しそうな雰囲気があります。
2021年に最も上昇した銘柄で検証する
シグナルは決まったので早速検証を行ってみます。
まずは対象銘柄を決めなければいけません。
全銘柄を対象とするとカオスになるので、ここでは見ていく銘柄を絞っていきたいところです。
例として、2021年に最も上昇した銘柄を使ってみます。
過去に2021年に最も上昇した銘柄というものをご紹介しました。
【Pythonで株分析】2021年の株価上昇率ランキングトップ50銘柄を分析してみた
続きを見る
ここで紹介している銘柄をいつくかピックアップしてチャートで可視化してみます。
グローバルウェイ(3936)
まずは最も上昇していたグローバルウェイを見てみます。
ご覧の通り、2021年の7月あたりから大きく上昇しています。
度重なる株式分割で株価が大きく上昇した記憶があります。
ただ、2020年10月くらいに発生しているシグナルはダマシですね。
ここをうまく見極めるようにしないといけません。
シグナルが出た翌週の動きがポイントになってきますね。
ケイアイスター不動産(3465)
次にケイアイスター不動産を見てみます。
理由は僕が実際にトレードした銘柄だからですw
僕はオニールとミネルヴィニの成長株投資手法を日本株に適用しています。
この中で見つかった銘柄がこのケイアイスター不動産です。
シグナル2が連発してますね。
1回だけなら微妙ですが、連続で発生すると精度が上がりそうな気がします。
ただ2回目のシグナル1は完全に天井圏ですね。
その後は横ばいがしばしつづき、その後は下落に転じています。
シグナル1は発生の仕方についても注意した方がよさそうです。
スノーピーク(7816)
次にスノーピークを見てみます。
こちらも僕が実際にトレードした銘柄です。
コロナ禍でキャンプが一気に流行り出して、この会社も大きく業績を伸ばしました。
これもかなりいい感じに機能しているように見えます。
そして最後のシグナル1はまたしてもダマシですね。
やはり上昇の仕方には注意が必要です。
じわじわと上がってひょこんと52週高値を更新する程度がいいですね。
大きく上昇していたら要注意です。
そして過去に何回がシグナル1が発生していても怪しい可能性があります。
ある程度の期間をあけてこのシグナルが発生したらより精度が上がるかもしれません。
商船三井(9104)
最後に商船三井を見てみます。
コロナ禍では海運会社の株価が大きく上昇しました。
僕はトレードしてませんが、結構後悔していますw
ここでご紹介するシグナルを使えばうまく検知できるのかをみておきます。
やはりじわじわ上がっていく中でシグナルが発生するといいですね。
シグナル2が連発すると精度が上がりそうです。
さらにデータを組み合わせると強いかもしれない
ここまでで、52週高値を出来高を組み合わせると、大きく上昇しそうな銘柄をうまくキャッチできそうな感じがしてきました。
さらに精度を上げるためには、ここにデータを組み合わせることが大事になってきます。
2021年に大きく上昇したトップ50銘柄の半数大半をプログラムが検出してました
ちなみにこちらの記事で登場した銘柄の半数以上が僕のプログラムが検出してました。
【Pythonで株分析】2021年の株価上昇率ランキングトップ50銘柄を分析してみた
続きを見る
僕はオニールとミネルヴィニの成長株投資手法に基づいて、日本株で銘柄選定を行っています。
株式投資に必要なデータをプログラムで自動収集して、「投資でニート生活」というサイトで管理しています。
検出された銘柄は2つの監視銘柄で管理しています。
「直近の決算短信から抽出した監視銘柄一覧」では、オニールのCAN-SLIM投資法のCをベースに、直近四半期の売上高とEPSが前年同期比で20%
以上増加しているものが登録されています。
【CAN-SLIM投資法】その①:C(当期四半期のEPSと売り上げ)
続きを見る
「週足チャートから抽出した監視銘柄一覧」は、ミネルヴィニの投資手法で紹介されているトレンドテンプレートの条件(レラティブストレングスは除く)を満たす銘柄が登録されています。
【毎週無料公開】日本株にミネルヴィニのトレンドテンプレートを適用してスクリーニングする!
続きを見る
2021年に最も上昇したトップ銘柄50にランクインしていた銘柄の半分以上は、これら監視銘柄のいずれかに登録されていました。
業績が良ければ「直近の決算短信から抽出した監視銘柄一覧」に登録されていますし、業績はまだついてきていなくてもチャートの形から「週足チャートから抽出した監視銘柄一覧」に登録されています。
どちらも使うことでうまくお互いの弱点を補い合うことができます。
これらの監視銘柄に登録されている銘柄を対象にすると精度は上がりそうです。
レラティブストレングスも組み合わせる
さらにレラティブストレングスを加えると精度が上がるかもしれません。
レラティブストレングスはオニールのミネルヴィニの投資手法で重要視されている指標で、株価がどれくらい活発に動いているかを把握することができます。
1〜99の数字で表されて、たとえば95なら全体の銘柄の95%よりも株価が活発に動いていると判断されます。
オニールのミネルヴィニの投資手法では、このレラティブストレングスの高い銘柄(80以上)に投資することを推奨しています。
レラティブストレングスの計算方法については公開されていないのですが、調べたところ結構よさそうなものを見つけたので、「投資でニート生活」ではこれをプログラムで実装して日本株に適用しています。
【毎週無料公開】日本株でレラティブストレングスっぽいものを計算する【オニールの成長株発掘法】
続きを見る
結果の一部は「投資でニート生活」で公開しています。
いくつかの銘柄のチャートを見てみる
それでは、監視銘柄とレラティブストレングスで絞り込んだ銘柄をいくつかピックアップしてチャートを見てみましょう。
本記事を執筆している2022年6月5日現在では、直近のデータは6/4のレラティブストレングスになります。
レラティブストレングスが80を超えていて、なおかつ監視銘柄に登録されている銘柄をピックアップします。
ちなみにこれはnoteで提供しています。
ここから銘柄をいくつかピックアップします。
記事によれば、レラティブストレングスが80以上で、なおかつ2つの監視銘柄双方に登録されている銘柄は全部で75個ありました。
ここからピックアップします。
全部公開すると購読いただいている方に申し訳ないのと銘柄数が多すぎるので適当に3つに絞りますね。
ピックアップ銘柄
- INPEX(1605): 99
- ユニバ園芸(6061): 96
- FPG(7148): 96
銘柄の横にある数字が直近のレラティブストレングスです。
なぜこれらの銘柄を選んだのかというと、INPEXはレラティブストレングスが99で一番最初に出てきた銘柄、残り2銘柄は本記事を執筆している2022年6月5日現在で僕が実際に保有している銘柄だからです。
すみません、割と適当に選びました。。。
INPEX(1605): 99
まずはINPEXです。
いい感じです。
最初のシグナル2はダマシですが、シグナル1がかなりいい仕事をしています。
2週連続でシグナル1が出て、その後は少し横ばいになりましたがそこから大きく上昇しています。
ユニバ園芸(6061): 96
次にユニバ園芸です。
これはこの記事を執筆している時点で僕が保有している銘柄です。
こちらもシグナル1が大変いい仕事をしていますね。
シグナル2はやはり単発だと危険で、ある程度頻発してくると精度が上がります。
またシグナル2が出た翌週の株価の動きも大事になってきます。
FPG(7148): 96
最後にFPGです。
これもこの記事を執筆している時点で僕が保有している銘柄です。
一番最近エントリーした銘柄です。
こちらについては直近でシグナル1が2回発生していますが、これからどうなるかはまだわかりません。
これから爆上げすることを祈りながらしばし保有してみようと思います。
今後どうなるか、本記事を読んでくださった方はチェックしてみてください。上がってほしい。。。
スクリーニング銘柄をnoteで提供しています
最後に僕からお知らせです。
本記事で紹介したシグナルでスクリーニングした銘柄をnoteで提供しようと思います。
みた感じ、結構よさそうな結果だったので僕の方でも銘柄選定に利用していこうと思っています。
せっかく利用するならということでnoteでも提供していきます。
52週高値更新銘柄を提供しているサイトはたくさんありますが、ここに出来高を組み合わせてスクリーニングをしているものは、僕の知る限りではみたことがありません。
さらに監視銘柄の登録状況や直近のレラティブストレングスも合わせて提供するので、完全オリジナルなデータになるかと思います。
もしご興味あればnoteをご覧くださいませ。
まとめ
いかがでしたでしょうか。
ここでは「【Pythonで株式投資】52週高値と出来高を組み合わせると最強シグナルになるかもしれない」というテーマで、52週高値と出来高を組み合わせたシグナルについてご紹介しました。
ダマシはところどころありますが、それなりに機能しそうな結果を得ることができました。
レラティブストレングスなどのデータを組み合わせるとさらに精度を上げることができそうです。
ここで紹介したシグナルは完全オリジナルだと思います。
52週高値更新銘柄を提供しているサイトはありますが、ここに出来高を組み合わせているケースは僕の知る限りみたことがありません。
監視銘柄も組み合わせればさらにオリジナリティが増します。
スクリーニング結果はnoteで発信していくので、もしご興味あれば覗いていただければと思います。
ここまで読んでくださり、ありがとうございました。