私と私の猫の他は誰でも隠し事を持っている

野良プログラマ発、日々のアウトプット

Pandas 演習としてのテクニカル指標計算【最終回】 〜 MA-RCI (オリジナル)の巻

このシリーズも今回で10回目。ネタが尽きてきたというか、指標計算に関してはわりとこなれてきた感もあるのでこれで最後にします。最終回記念としてお題は既存のテクニカル指標ではなく、先ごろ考案したオリジナル(たぶん)のトレンド系指標です。

アイディアの発端は移動平均でした。ご存知のように日足チャートを見る時には値動きの傾向を掴む為によく、下図のように 5日・25日・75日の移動平均線を重ね描きします。それによって短期・中期・長期のトレンドをを把握する訳です。この3本の移動平均線を何らかの方法で束ねることで、期間に縛られることなくトレンドを判断できる指標が作れないものかな、と考えた訳です。

f:id:mariyudu:20190602133700p:plain

移動平均は短期である程、値動きに敏感に反応するので、値動きの上昇傾向がハッキリするにつれてチャートの上から短期線・中期線・長期線の順で描かれる傾向が強くなります(上図緑色帯)。下降傾向ならばこの逆で(上図赤色帯)、ボックストレンドだとそれぞれの平均線が順不同で絡み合った状態(上図青色帯)になります。この特質を利用して、完全な上昇トレンド時の順位を[5日線:(位置が上から数えて)1番目, 25日線:2番目、75日線:3番目]と想定し、日々の移動平均線群の位置順位との相関係数を取ってみれば、その計算結果は上昇が明確である程1(100%)に近づき、下降なら-1(-100%)に、ボックストレンドなら0前後をフラフラするのではないでしょうか? 移動平均の相対順位を RCI 計算するということで、指標名は「MA-RCI(仮)」ですなw

さらに、これを実際に試してみるなら移動平均線も3種類では計算結果のバリエーションが乏しくなりそうなので、10本くらいに増やしたいところです。平均日数を、[5,10,15...] と等差数列的にするか、[5,7,10...] と等比数列的にするか判断に迷いますが、どうせなら面白いほうがいいじゃん、と特に根拠もなくフィボナッチ数列の [2, 3, 5...] でやってみることにしました。ということでコーディング開始!

今回も日経平均プロフィルさんから日経平均をげとして使います。CSV ファイルを読み出して Pandas データフレームに格納する処理のコードはシリーズ第1回目を参照ください。

まず、データフレームに9種類の移動平均を計算して列追加します。Pandas ならとても楽々〜。

MA_DAYS = (2, 3, 5, 8, 13, 21, 34, 55, 89) # 平均日数
for d in MA_DAYS:
    df[f'ma_{d}'] = df.close.rolling(d).mean()

ここでいったん、計算した移動平均を直近250日間のローソク足チャートに重ね書きしてみます。枯れ木に蜘蛛の巣が絡まっているみたいだなー。

f:id:mariyudu:20190601184421p:plain

さて、9本の移動平均を相対順序づけして、基準ベクトルと相関係数を取ってみます。

ma_cnt = len(MA_DAYS)
trd_rank = np.arange(len(MA_DAYS), 0, -1) # 基準用の順位配列
ma_rank = np.array(df[[f'ma_{d}' for d in MA_DAYS]].rank(axis=1)) # 各移動平均の値を昇順に順位づけ
df['ma_rci'] = 1 - (6 * ((trd_rank - ma_rank)**2).sum(axis=1)) / (ma_cnt * (ma_cnt**2 - 1))

で、得られた列 ma_rci を日足と二段で可視化してみるとこんな感じ。

f:id:mariyudu:20190601184556p:plain

どうでしょうか? なんだかそれなりにトレンドが表現できている気がします。これを使ってトレンドフォロー型売買のバックテストでもしてみますかね。

ちなみに、結果は割愛しますが、(5, 15, 25, 35, 45, 55, 65, 75, 85) という等差、および (3, 5, 7, 10, 15, 23, 34, 51, 77) の等比での移動平均でも同様に計算・可視化してみたのですが、前者は比較的ダマシの多そうな単純な線に、後者は上記のフィボナッチ日数に近いシェイプの線になりました。興味のある方はご自身で計算してみて下さい。

今回も、コード一式と実行結果は Google Colaboratory でシェアしてあります。↓

colab.research.google.com

それから、本シリーズでのテクニカル指標計算方法は、下記の書籍を参考にしました。様々な指標を紹介するだけでなく計算方法・活用方法・組み合わせ例に至るまで解説されており、良書だと思います。