こんにちは。TATです。
今日のテーマは「Pythonで株価のローソク足データを平均足に変換する方法」です。
Pythonでローソク足データから平均足を計算したい
Pythonを使って、ローソク足から平均足を計算する方法について解説します。
平均足を使うと、ローソク足に比べて陽線あるいは陰線が連続して出現しやすくなるのでトレンドの把握がより分かりやすくなります。
必要なPythonコードも全て公開するのでご自由に使い回していただけたらと思います。
目次
平均足とは?
まずは平均足について簡単に確認しておきましょう。
平均足の特徴
ローソク足に修正を加えた指標
平均足とは、ローソク足に修正を加えた指標です。
特にFXでは人気の指標でたくさんの方に利用されています。
トレンドが把握しやすい
平均足の1番の特徴は、トレンドの把握がしやすいということです。
陽線あるいは陰線が連続して出現しやすいため、トレンドの把握が容易になります。
平均足の見方
次に平均足の見方についてまとめます。
基本的には陽線なら上昇トレンド、陰線なら下落トレンドとして捉えます。
また、トレンドの勢いや転換のサインも見ることができます。
平均足の見方
- トレンド
- 陽線:上昇トレンド
- 陰線:下落トレンド
- 強いトレンド
- 上ヒゲのある陽線:強い上昇トレンド
- 下ヒゲのある陰線:強い下落トレンド
- トレンドの鈍化・転換の兆し
- 下ヒゲのある陽線:上昇トレンドの鈍化、トレンド転換の兆し
- 上ヒゲのある陰線:下落トレンドの鈍化、トレンド転換の兆し
平均足の計算方法
次に平均足の計算方法です。
ローソク足データから計算することができます。
高値と安値については、ローソク足と同じものを使います。
変更が必要になるのは始値と終値です。
平均足の計算方法
- 始値:
- 1日目:前日ローソク足の始値・高値・安値・終値の平均値
- 2日目以降:前日平均足の始値と終値の平均値
- 終値:当日ローソク足の始値・高値・安値・終値の平均値
終値は当日ローソク足の始値・高値・安値・終値の平均値になります。
始値は前日平均足の始値と終値の平均値となります。
この場合、1日目の計算ができないので、便宜的に1日目は前日ローソク足の始値・高値・安値・終値の平均値として計算されます。
Pythonでローソク足から平均足を計算する
それでは、平均足の特徴や計算方法がわかったところで、ここからはPythonを使ってローソク足から平均足を計算してみます。
まずは全コードをどうぞ
まずは必要なコードを全て公開してしまいます。
細かい解説は後から順番に行なっていきます。
ここでは例として2022年1月1日〜2022年6月30日までのトヨタ自動車(証券コード: 7203)の株価データを使用しています。
それではどうぞ!
from pandas_datareader import data # pandas_datareaderで株価データを取得 df = data.DataReader("7203.T","yahoo", start="2022-01-01", end="2022-06-30") # カラムの並び替え df = df[["Open", "High", "Low", "Close", "Volume"]] # dfのデータをdf_meanにコピー df_mean = df.copy() # 平均足の終値を計算 df_mean["Close"] = df[["Open", "High", "Low", "Close"]].mean(axis=1) # 平均足の始値を計算 # 1日目用:前日のローソク足の始値・高値・安値・終値の平均値を計算 df_mean["Open"] = df[["Open", "High", "Low", "Close"]].shift().mean(axis=1) # 2日目以降用:前日の平均足の始値と終値の平均値を計算 price_open = [] for i in range(len(df_mean)): if i == 0: price_open.append(np.nan) else: price_open.append(np.nanmean([price_open[-1], df_mean.iloc[i-1]["Close"]])) df_mean["Open"] = price_open # 冒頭5行を表示 df_mean.head()
分かりやすくするために、なるべく多くのコメントをつけました。
これで、ローソク足から平均足を計算することができます。
コードの解説
ここからコードの中身について順番に解説していきます。
株価データの取得
まずは株価データの取得です。
ここではpandas_datareaderを使って、トヨタ自動車の株価を取得しています。
from pandas_datareader import data # pandas_datareaderで株価データを取得 df = data.DataReader("7203.T","yahoo", start="2022-01-01", end="2022-06-30")
参考記事:【日本株対応】Pythonで株価データを取得する方法まとめ
【日本株対応】Pythonで株価のローソク足データを取得する方法まとめ【CSV、ライブラリ、スクレイピング】
続きを見る
カラムの並び替え
次にカラムの並び替えを行っています。
# カラムの並び替え df = df[["Open", "High", "Low", "Close", "Volume"]]
これは後々チャートで表示する際に都合が良いためです。
始値、高値、安値、終値、出来高の順番に並び替えています。
平均足のデータを格納するためにdfをコピーしてdf_meanを定義
次に、平均足のデータを格納するための変数df_meanを定義します。
# dfのデータをdf_meanにコピー df_mean = df.copy()
これはdfをコピーすればOKです。
高値と安値はそのまま利用するのでコピーしてしまったほうが後々楽になります。
平均足の終値を計算
次に平均足の終値の計算です。
これはローソク足の始値、高値、安値、終値の平均を計算すれば完了です。
# 平均足の終値を計算 df_mean["Close"] = df[["Open", "High", "Low", "Close"]].mean(axis=1)
mean(axis=1)とすれば、各行で平均を計算できます。
平均足の始値を計算
最後に平均足の始値を計算します。
ここが少し厄介なところです。
# 平均足の始値を計算 # 1日目用:前日のローソク足の始値、高値、安値、終値の平均値を計算 df_mean["Open"] = df[["Open", "High", "Low", "Close"]].shift().mean(axis=1) # 2日目以降用:前日の平均足の始値と終値の平均値を計算 price_open = [] for i in range(len(df_mean)): if i == 0: price_open.append(np.nan) else: price_open.append(np.nanmean([price_open[-1], df_mean.iloc[i-1]["Close"]])) df_mean["Open"] = price_open
まず、1日目の値を計算するために、前日のローソク足の始値、高値、安値、終値の平均値を計算します。
shiftを使うと簡単に計算できます。
2日目以降の計算には、前日の平均足の始値と終値が必要になるので、forループで順番に計算しています。
1日目は前日データがないのでnp.nan として、2日目以降は前日のデータを使って計算します。
np.nanmeanを使うとnp.nanを除去して平均値を計算してくれるので、2日目の計算では始値は無視して終値の値がそのまま使われます。
最後に計算結果(price_open)を、df["Open"]に上書きしてあげれば完成です。
チャートで可視化してみる
平均足の計算ができたので、結果をチャートで確認してみましょう。
比較のためにローソク足と平均足を並べて表示してみます。
mplfinanceを使う
Pythonでローソク足チャートを描くためにはいくつかのライブラリが利用できます。
ここでは短いコードでローソク足チャートが描けるmplfinanceを使って可視化してみます。
import mplfinance as mpf mpf.plot(df.iloc[1:], type="candle", style="binance", volume=False, figsize=(12,3), title="OHLC") mpf.plot(df_mean.iloc[1:], type="candle", style="binance", volume=False, figsize=(12,3), title="Mean")
上(OHLC)がローソク足、下(Mean)が平均足です。
mplfinanceでローソク足チャートを描くには、mplfinance.plotを使います。
この際、最初の引数にDataFrameを指定します。
このDataFrameにはindexをDateにして、カラムを左から順番に始値、高値、安値、終値の順番にしておく必要があります。
あらかじめカラムを並び替えておいたのはこのためです。
参考記事:【コード解説】Pythonで株価チャートを描く【mplfinance編】
Pythonのmplfinanceで株価のローソク足チャートを描く方法【コード解説】
続きを見る
平均足では陽線あるいは陰線が連続して出現しやすい
結果を比べると、平均足の方が陽線あるいは陰線が連続して出現しやすいことがわかります。
平均足を使えば、トレンドの把握が容易になり、この特徴を活かしてトレード戦略にも応用することができます。
まとめ
本記事では、「Pythonで株価のローソク足データを平均足に変換する方法」について解説しました。
平均足はローソク足データさえあれば簡単に計算することができます。
Pythonを使えば短いコードで変換できるので便利です。
平均足を使えばトレンドの把握が容易になり、さらにトレンドの強弱や転換のポイントも察知することができるようになるので、使いこなせるとトレードの武器になります。
是非とも、本記事でご紹介したコードを使ってみてください。
ここまで読んでくださり、ありがとうございました。