Python

【コード解説】Pythonでゴールデンクロスとデッドクロスを判定する

2021年7月18日

こんにちは。TATです。

今日のテーマは「Pythonでゴールデンクロスとデッドクロスを判定する」です。

Pythonを使って、移動平均線やMACDなどのゴールデンクロスやデッドクロスを判定する方法について解説します。

 

過去にPythonでテクニカル分析の計算方法について解説しました。

関連記事
【コード解説】Pythonで株式投資に必要なテクニカル分析を計算する

続きを見る

 

また、Pythonで株価データを扱う記事については記事が散在しているのでこちらにまとめましたのでご参考ください!

関連記事
【まとめ】Pythonで株価データを扱う
【まとめ】Pythonで株価データを扱う

続きを見る

 

ここで紹介している記事は自由にパクっていただいて大丈夫です!

僕のコード以外にもいい方法はいくらでもあるので、使いやすいように適宜改良しちゃってください。

 

【コード解説】Pythonでゴールデンクロスとデッドクロスを検出する

【コード解説】Pythonでゴールデンクロスとデッドクロスを判定する

(おさらい)株価データを用意する

まずは分析に使う株価データを用意します。

こちらについては過去記事でも解説済みなのでさらっといきます。

 

株価データを取得する

株価データの取得方法についてはこちらの記事で解説済みです。

お好きな方法を参考にしていただければと思います。

関連記事
【コード解説】Pythonで株価データを取得する!【3つの方法を解説】

続きを見る

関連記事
【Pythonコード解説】yahoo_finance_api2で日本株の株価データを取得する
【Pythonコード解説】yahoo_finance_api2で日本株の株価データを取得する

続きを見る

 

ここではトヨタ自動車(証券コード: 7203)の日足データを使って解説していきます。

用意したデータはこんな感じです。

 

移動平均線を計算する

次に移動平均線を計算します。

こちらについても過去記事で解説済みなのでサクッといきます。

関連記事
【コード解説】Pythonで株式投資に必要なテクニカル分析を計算する

続きを見る

 

今回は5日移動平均線と25日移動平均線でゴールデンクロスとデッドクロスを判定することにします。

 

完成したデータがこちらです。

前半はデータがないので、ラスト5行を表示しています。

 

これで必要なデータは揃いました。

次にゴールデンクロスとデッドクロスを検出する方法を考えていきます。

 

ゴールデンクロス・デッドクロスの検出方法を考える

ゴールデンクロスとデッドクロスを判定する方法はシンプルです。

 

ゴールデンクロス・デッドクロスの定義を考える

まずは定義から考えてみます。

5日移動平均線と25日移動平均線で考えるとこんな感じですね。

判定方法

  • 5日移動平均線が25日移動平均線を下から上に突き抜けるとゴールデンクロス
  • 5日移動平均線が25日移動平均線を上から下に突き抜けるとデッドクロス

 

移動平均線でゴールデンクロスおよびデッドクロスを判定するなら、期間の異なる2種類の移動平均線が必要です。

期間の短いものが長いものを、下から上に突き抜けるとゴールデンクロスで、上から下に突き抜けるとデッドクロスになります。

これをプログラムでどう実装していくかを考えていきます。

 

ポイントは差分を見ること!

この状況をプログラムに判定させようと思うと、2つの移動平均線を差分を見ることがポイントになります。

解説のために簡単なグラフを作りました。

5日移動平均線(SMA5)と25日移動平均線(SMA25)の差分(SMA5 - SMA25)をプロットしています。

 

ここからわかることは次の通りです。

ポイント

  • SMA5がSMA25より上にあるときは、SMA5 - SMA25はプラスの値になる。逆だとマイナスになる。
  • ゴールデンクロスは、SMA5 - SMA25がマイナスからプラスに反転する。
  • デッドクロスは、SMA5 - SMA25がプラスからマイナスに反転する。

 

チャートを見ると明らかですね。

プログラムでゴールデンクロスやデッドクロスを判定するためには、SMA5 - SMA25が反転するのを判定できれば良いことになります。

 

ちなみに上記のチャートはplotlyというPythonのライブラリーを使っています。

関連記事
【コード解説】Pythonで株価チャートを描く【plotly編】

続きを見る

 

プログラムではロジックをシンプルに!

また、プログラムで実装する際には、なるべくシンプルにしたいところです。

例えば、SMA5 - SMA25の値については、絶対値がいくらであるかはさほど重要でなく、プラスかマイナスかがわかればOKです。

プラスなら+1、マイナスなら−1にしておけば十分です。

 

こうしておくと、SMA5とSMA25の値は、-1, 0, 1のいずれかになります。

シンプルですね。

 

そしてこの差分の符号の反転を判定するには、1つ前の数値と比較すればOKです。

-1から1になればゴールデンクロス、1から−1になればデッドクロスです。

SMA5 - SMA25をdiff(0), その1日前の値をdiff(1)とすると次の式が成り立ちます。

ポイント

diff(0) - diff(1)の結果は、

  • 2((+1)-(-1))だとゴールデンクロスを意味する
  • -2((-1)-(+1))だとデッドクロスを意味する
  • そのほかは何もないので無視する

 

かなりシンプルになりました。

これで、ゴールデンクロスとデッドクロスを判定することができます。

目で見るとゴールデンクロスやデッドクロスを判断するのは簡単ですが、プログラムで実行するとなるとこのようにロジックに落とし込んでいく必要があります。

ここがプログラムをする楽しみでもあります。

 

ゴールデンクロス・デッドクロスの判定ロジックをPythonで実装する

ロジックがわかったところでPythonで実装していきます。

 

先ほど用意したデータを使います。

 

基本のプログラム(とりあえずこれパクればOKです)

先ほどご紹介したロジックをプログラムで実行する流れは次のようになります。

ポイント

  1. SMA5 - SMA25を計算する(この結果がdiff(0)となる)
  2. shift関数を使ってdiffの値を1つずらす(これがdiff(1)になる)
  3. diff(0) - diff(1)を計算する
  4. 計算結果が2ならゴールデンクロス、−2ならデッドクロスと判定する

 

ややこしく書いていますが、プログラムとしてはとても短く済ませることができます。

まずはコードをどうぞ。2行で完了します。

 

これだとSMA5とSMA25にしか適用できないので、関数を作って2種類のデータを渡すと自動でゴールデンクロスとデッドクロスを判定できるようにします。

関数名はfind_crossとしました。

 

これでshortとlongを渡してあげるとゴールデンクロスとデッドクロスを判定してくれます。

こんな感じです。

 

なんにもなければnan、ゴールデンクロスならGC、デッドクロスならDCと返ってきます。

 

ざっくりコードを解説します

ここで少しコードを解説しておきます。

2行にまとめてしまったのでわかりにくいかもしれません。特に2行目。。。

 

最初のdiffの計算はいいですよね。

列ごと引き算しているだけです。

 

問題は2行目のcrossの計算です。

ポイントになるのはnumpyのwhereとsign、pandasのshiftです。

 

numpyのwhere

numpyのwhereは条件式に基づいて、TrueのときとFalseのときで任意の数値を返すことができます。

np.where(condition, Trueの返り値, Falseの返り値) といった使い方です。

ここでは、whereを2回使って、3つに条件分岐しています。

2のときと、−2のときと、どちらにも当てはまらないときです。

2ならGC、−2ならGC、それ以外ならnanを返します。

 

numpyのsign

numpyのsignを使うと、データの符号を判定することができます。

プラスなら1、マイナスなら−1が返ってきます。

これで絶対値は気にせずに数字の符号だけを扱うことができるようになります。

 

pandasのshift

最後にpandasのshiftです。

これを使うとデータを任意の数だけずらすことができます。

デフォルトだと1つだけずらします。

数値を入れると任意の数だけずらすことも可能です。

マイナスを入れると逆向きにシフトします。

 

このshiftを利用すれば、1つ前のデータと計算するのがとても容易になります。

コードにあるnp.sign(diff) - np.sign(diff.shift(1))がまさにそれです。

shiftを使って1つ前のデータを引き算して、さらにsignを合わせて1か−1に変換しています。

 

この結果をwhereを使って、2ならGC、−2ならDC、それ以外ならnanを返します。

numpyとpandasを利用すると、複雑な計算を短いコードで実装することが可能になります。

 

移動平均線でゴールデンクロス・デッドクロスを判定する

それでは計算結果を可視化してみます。

 

ゴールデンクロス・デッドクロスの列を追加

まずはSMA5とSMA25のゴールデンクロスとデッドクロスをプロットします。

計算結果をcrossという列として追加します。

 

ラスト10行を見るとDC(デッドクロス)が発生していますね。

実際に先ほどのチャートを見るとデッドクロスが起きていることがわかりますね。

 

チャートに描く

それではチャートにゴールデンクロスとデッドクロスをプロットしてみます。

SMA5 - SMA25は出来高に変更します。

普通のチャートはこんな感じです。

 

ここで使ったコードも公開しておきます。

 

 

こちらのチャートはplotlyで描いており、過去記事で解説しています。

関連記事
【コード解説】Pythonで株価チャートを描く【plotly編】

続きを見る

 

ゴールデンクロスとデッドクロスを追加する

ここにゴールデンクロスとデッドクロスを追加します。

ちょっと色変わっちゃいましたが、marker_colorを指定して適宜調整してください。

 

使用したコードはこちらです。

 

「追加ここから」から「追加ここまで」の部分が追加箇所になります。

ゴールデンクロスとデッドクロスでそれぞれ追加します。

条件指定でcross列がGCあるいはDCとなっているところの値をプロットします。

SMA5の値をそのまま使うとグラフが被ってしまうので、0.98倍とか1.02倍とかして少しずらして表示するようにしています。

ここの調整も好みの問題ですね。自由に変えちゃってください。

 

これでゴールデンクロスとデッドクロスをチャートで描くことができました。

 

(応用編)MACDでゴールデンクロス・デッドクロスを判定する

最後に応用編です。

MACDでゴールデンクロスとデッドクロスを判定してみます。

先ほどご紹介した関数(find_cross)を使えば、任意データのゴールデンクロスとデッドクロスを判定することができます。

ここに引き渡すデータをMACDに変更して、チャートに描いてみます。

 

MACDの計算

MACDの計算方法についてはこちらの記事で解説しているので割愛します。

関連記事
【コード解説】Pythonで株式投資に必要なテクニカル分析を計算する

続きを見る

 

使用したコードはこちらです。

 

計算結果はこのようになりました。

 

ゴールデンクロス・デッドクロスを判定する

結果をもとにゴールデンクロスとデッドクロスを判定してみます。

返り値をcrossというカラムに格納します。

ラスト20行を確認するとデッドクロスが判定されていることが確認できました。

 

MACDをチャートに描く

最後に計算した結果をチャートにプロットしてみます。

出来高に加えてMACDを追加して、さらにゴールデンクロスとデッドクロスも表記します。

 

使用したコードがこちらです。

 

 

これで完成したチャートがこちらです。

 

MACDのチャートを追加しつつ、ゴールデンクロスとデッドクロスもきちんと表記されていることが確認できました。

以上にように、find_cross関数で任意のデータを引き渡せば、ゴールデンクロスとデッドクロスを判定できるので、お好きなデータでご活用いただければと思います。

 

データ分析にはPythonが最適です。

以上で、Pythonでゴールデンクロスとデッドクロスを判定する方法の解説はおしまいです。

 

Pythonを使うと、煩雑な処理も短いコードで実装することができます。

ゴールデンクロスとデッドクロスを判定するプログラムなら数行で事足りてしまいます。

Pythonは、データ分析やデータの可視化などを得意とするプログラミング言語で、さらにAI関連のライブラリーが豊富なので、昨今のAIブームで需要が爆発しています。

おすすめ
【いますぐ始められます】データ分析をするならPythonが最適です。【学習方法もご紹介します!】
おすすめ
【人気上昇中】今人気のプログラミング言語「Python」は何ができるのか?できることまとめます【転職でも有利です】

 

また、Pythonは、僕自身も独学で習得できたくらい初心者でも学びやすい言語です。

僕の場合は社会人になってから独学でPythonを習得して転職にも成功しました。Pythonをきっかけに人生が大きく変わりました。

おすすめ
【実体験】ゼロからのPython独学を決意してから転職を掴み取るまでのお話。
【実体験】ゼロからのPython独学を決意してから転職を掴み取るまでのお話。

続きを見る

 

僕自身はUdemyでPythonを独学しました。

おすすめ
プログラミングの独学にUdemyをおすすめする理由!【僕はUdemyでPythonを独学しました!】
おすすめ
【目的別】Pythonが学べるUdemyのおすすめコースを紹介します【随時更新】

 

僕自身の独学の経験をベースに、Python独学ロードマップをまとめたので、もしご興味があればご覧ください。

おすすめ
【決定版】Python独学ロードマップ【完全初心者からでもOKです】
【決定版】Python独学ロードマップ【完全初心者からでもOKです】

続きを見る

 

まとめ

いかがでしたでしょうか。

ここでは「Pythonでゴールデンクロスとデッドクロスを判定する」というテーマで、Pythonを使って、移動平均線やMACDなどのゴールデンクロスやデッドクロスを判定する方法について解説しました。

 

Pythonなら複雑な処理でも短いコードで実装することができます。

ここでご紹介したコードは自由にパクっていただいて大丈夫です。

僕のコードの他にももっといい書き方はいくらでも存在します。

パクリつつ、適宜どんどん改良していっていただければと思います。

 

また、本記事の他に、Pythonで株価データを扱う記事については、記事が散在しているのでこちらにまとめました。

ご興味があればご参考ください!

関連記事
【まとめ】Pythonで株価データを扱う
【まとめ】Pythonで株価データを扱う

続きを見る

 

ここまで読んでくださってありがとうございました。

おすすめ
【決定版】Python独学ロードマップ【完全初心者からでもOKです】
【決定版】Python独学ロードマップ【完全初心者からでもOKです】

続きを見る

おすすめ
プログラミングの独学にUdemyをおすすめする理由!【僕はUdemyでPythonを独学しました!】
おすすめ
【目的別】Pythonが学べるUdemyのおすすめコースを紹介します【随時更新】

データ販売を始めました


オニールとミネルヴィニの投資手法を日本株に適用するために必要なデータの販売を始めました。

あらゆるデータを集約して、誰でも簡単にスクリーニングできるようにCSV形式でデータを提供します。

オニールとミネルヴィニの投資手法を日本株に適用するために必要なデータを販売します!

続きを見る




Pythonの独学ならUdemyがオススメ!


Udemyなら、セール中だと90%オフとかで買えるのでコスパ最強です。

僕はUdemyでPython独学に成功しました。

関連
【目的別】Pythonが学べるUdemyのおすすめコースを紹介します【随時更新】

続きを見る



関連
プログラミングの独学にUdemyをおすすめする理由!【僕はUdemyでPythonを独学しました!】

続きを見る



Udemyを詳しく見る!



プログラミングスクールもオススメ!



プログラミングスクールもオススメの選択肢です。

初心者をしっかりサポートしてくれるシステムが整っているので、挫折する可能性が一気に下がります。

効率よく最速で学ぶならプログラミングスクールが最適です。

関連
【まとめ】Pythonが学べるおすすめプログラミングスクール

続きを見る



関連
プログラミング学習は独学とプログラミングスクールどちらにすべきか?【結論、全部試すべし!】

続きを見る



関連
高額なプログラミングスクールを利用する価値はあるのか?【結論、人それぞれですw】

続きを見る




TechAcademy (テックアカデミー)


オンラインに特化したプログラミングスクールで、プログラミングの他に動画編集などの豊富なコースが用意されています。







TechAcademyを詳しく見る!



TECH::CAMP (テックキャンプ)


いつでも講師に質問できるチャットシステムが最強です!







TECH::CAMPを詳しく見る!



 

CodeCamp (コードキャンプ)


講師とのマンツーマンレッスンで挫折しない!







CodeCampを詳しく見る!


-Python
-, , ,

© 2021 気ままなブログ