pandasのrolling()を使って株価の移動平均線を求める方法と注意点【データの昇順・降順を確認しとく】

今回は、株価のテクニカル分析で最もよく用いられる移動平均線についてのメモ。

 

 

移動平均線は、pythonのpandasモジュールを使えばすぐに求めることができますが、つまずいた点があったのでこの記事で整理しておきます。

 

 

つまずいたのはデータが昇順か降順かで微妙に取り扱いが変わってくるという点です。

スポンサーリンク

pythonのpandasモジュールで移動平均線を求める方法

移動平均線を求める方法は、さほど難しくはありません。

ma_df=df['close'].rolling(25).mean()

これだけでOKです。

 

rolling(k)のkに何日分の移動平均線を求めたいかを入力します。日足の場合、よく使われるのは5日・25日・75日あたりでしょう。

 

 

rolling(k)だけでは移動平均線は算出できません。k日分のデータを使って何を求めたいのかをrolling(k)の後に指定してやる必要があります。

 

 

移動平均線は、k日分の終値の平均値を求めたいので、rolling(k)の後にmean()メソッドをつけてやります。例えば、ここをstd()とかにすると標準偏差を求めることができ、ヒストリカルボラティリティの算出に活用したりできます。

スポンサーリンク

rolling()を使う際はデータの並び順に注意

rolling()で移動平均線を求める場合、データの並び順に注意する必要があります。

 

例えば、次みたいなデータ。(以下は私が作った架空のデータです)

dateclosema_5
2019-03-0610
2019-03-0520
2019-03-0430
2019-03-0340
2019-03-025030
2019-03-016040

このデータ変ですよね。3/6~3/2の5日移動平均線の値が3/2の行に入っています。5日移動平均線の値は、3/6の行になければいけません。

 

 

なぜこうなるかというと、rollingメソッドは、データを上から順に指定する仕様になっているからです。

 

 

対処法はちゃんとあって、shift()を使ってやります。

df['ma_5']=df['close'].rolling(5).mean().shift(-4)

shift(k)はデータをずらすメソッド。kの値分だけデータを下方向にずらします。kがマイナスの値の場合は、データを上方向にずらすことができます。

 

shitft(-4)でma_5列を上に4つずらしてやると・・・

dateclosema_5
2019-03-061030
2019-03-052040
2019-03-0430
2019-03-0340
2019-03-0250
2019-03-0160

こんな風になります。

 

 

株価や為替データは、新しい日付のデータが上にある降順のケースが多いです。降順のデータはrolling()だけでは適切に処理できないので、shiftを有効活用しましょう。

 

 

あとはsort_values、sort_indexを使ってデータを昇順に並び替えてからrolling()メソッドを適用する方法もあります。

#特定の列を使って並び替える場合
df=df.sort_values('date',ascending=True)
#インデックスを使って並び替える場合
df=df.sort_index(ascending=True)

ascending=Trueの部分で昇順・降順を選択します。Trueだと昇順になります。

 

 

地味な話なのか需要がないのか、rollingの話はあっても降順・昇順の話はネットで調べても参考記事が少なかったので、自分なりのやり方をまとめておきました。

コメント