本記事は、PythonのPandasを用いてファイナンスの基本的な理論などについて学んでいきます。
今回は、前回学んだ移動平均を利用したトレンドの見方としてゴールデンクロス(Golden Cross)とデッドクロス(Dead Cross)について学んでいきます。
Pandasとは
Pandasとは、データ分析や操作をまとめたPythonのライブラリです。
特にPanel、DataFrameおよびSeriesと呼ばれるデータ構造は使いやすく、また統計量を求めるための様々なメソッドが組み込まれています。
なお、Pandasの由来はPanel Dataから来ているそうです。
以下が公式のドキュメントになります。
ゴールデンクロスとは
前回では移動平均について学びました。
移動平均では通常、短期と長期の2つを使用してトレンドの発生などを確認します。
特に短期の移動平均線が長期の移動平均線を下から上に突き抜けることをゴールデンクロス(Golden Cross)と言います。
これにより、トレンドが上昇に転じたかどうかを判断します。
デッドクロスとは
上記のゴールデンクロスとは反対に、短期の移動平均線が長期の移動平均線を上から下に突き抜けることをデッドクロス(Dead Cross)と言います。
これにより、トレンドが下降に転じたかどうかを判断します。
Pythonでゴールデンクロスとデッドクロスを描いてみる
それでは、Pythonでゴールデンクロスとデッドクロスをチャートに描いてみます。
import pickle import pandas as pd import matplotlib.pyplot as plt def show_golden_and_dead_cross(df, ma1=5, ma2=25, start=False, end=False): ma_1 = pd.Series.rolling(df.close, window=ma1).mean() ma_2 = pd.Series.rolling(df.close, window=ma2).mean() xdate = [x for x in df.index] plt.figure(figsize=(15,5)) plt.style.use('ggplot') close = df.close diff = ma_1 - ma_2 golden = ma_1[(diff.shift(1) < 0) & (diff > 0)] dead = ma_1[(diff.shift(1) > 0) & (diff < 0)] if start: xmin = start else: xmin = df.index[0] if end: xmax = end else: xmax = df.index[-1] ymin = close.loc[xmin:xmax].min() - 50 ymax = close.loc[xmin:xmax].max() + 50 plt.plot(xdate, close ,color="b",lw=1,linestyle="dotted",label="Close") plt.plot(xdate, ma_1, label="Moving Average {} days".format(ma1)) plt.plot(xdate, ma_2, label="Moving Average {} days".format(ma2)) plt.scatter(golden.index, golden, label="Golden Cross", s=100, c="red", alpha=0.7) plt.scatter(dead.index, dead, label="Dead Cross", s=100, c="black", alpha=0.7) plt.legend(loc='best') plt.ylim(ymin, ymax) plt.xlim(xmin, xmax) plt.show() with open('n225.pkl', 'rb') as f: n225 = pickle.load(f) show_golden_and_dead_cross(n225)
動作確認
それでは、上記で作成したスクリプトを実行してみます。
事前に2017年1月~2019年2月までの日経平均株価のDataFrameをpickleとして保存しておき、それをロードして使用しています。
今回は5日と25日の組み合わせで描画させています。
上記の赤丸部分がゴールデンクロスで、黒丸部分がデッドクロスになります。
トレンドの転換点が分かりやすく描画されている一方、だましも見受けられるので、決して絶対的なものではありません。
参考書籍
Python3ではじめるシステムトレード ──環境構築と売買戦略 (Modern alchemists series)