プログラムで株価のゴールデンクロスとデッドクロスを検出

日経平均の日足データからゴールデンクロスとデッドクロスを検出してみました。
プログラムは python で、pandas の DataFrame にほぼおまかせです。

検出

手順は単純で

  • ① csv の 日足データを DataFrame に読み込み
  • ② 短期と長期の移動平均を求め
  • ③ 両者がクロスするポイントを探す

だけです。

入力は csv

日足の csv ファイルはこんな感じです。

プログラム

移動平均の日数(短期と長期)を冒頭で指定します。複数のパターンを指定でき、下記の例では、5日と25日25日と75日13日と26日の 3 つを指定しました。

実行すると

カラムが追加され、ゴールデンクロスが出れば 1、デッドクロスが出れば -1、それ以外は 0 がセットされます。

チャートで確認

チャート上にプロットしてみます。

cross_5_25_a
cross_25_75_a
cross_13_26_a

ちょっと改善

上昇、下降をバタバタ繰り返す日が続くと、ゴールデンクロスとデッドクロスが短期間に連続して出てしまいます。たとえば上の図を見ると、7/25 にデッドクロス、翌営業日の 7/28 にゴールデンクロスが出ています。
プログラム上、短期と長期の移動平均を比較し、値の大小が逆転すればすぐにサインを出しているのが原因です。

cross_gd

これだと、方向が曖昧なままあわててサインを出すことになり、指標としてイマイチです。

そこで対策として、3 日分の推移を見て、多数決を取ることにします。どういうことかというと、当日をふくめて過去 3日を確認し、2 日以上の状態を優先するように変更します。

cross_mj

チャート描画も含めたコーディングはこうなります。

結果

チャートはこうなります。
7月後半の小刻みな出力は消えています。

cross_5_25_b
cross_25_75_b
cross_13_26_b

メリット、デメリット

こちらの方法だと曖昧なサインを出すことはなくなりますが、1日ないし 2日、サインが遅れます。

コメントはお気軽に