今回の記事では最も基本的なチャート分析である移動平均線を引いてみます。
完成したチャートは以下のようなグラフになります。
移動平均線とは?
移動平均線とはチャートのトレンドを把握するためによく使われるテクニカル分析の1つです。
各地点からの移動平均を計算してその点を繋げることによって線にしていきます。
移動平均
移動平均について簡単に復習しておきます。
移動平均は直近の\(n\)間の値の平均値です。
例えば時刻\(t\)においての直近\(n\)の移動平均\(a_t\)は、
$$\begin{aligned}
a_t = \frac{d_{t}+d_{t-1}+\cdots + d_{t-n}}{n}
\end{aligned}$$
で求められます。
ちなみに、\(d_t\)は時刻\(t\)のデータ(価格)を表しています。
チャートの各時間から\(n\)分前の移動平均をプロットしていくことで、チャートのトレンドを把握することができます。
移動平均線
移動平均線は、先程説明した移動平均を各時点から計算していきつなげた線になります。
このように移動平均線としてみてあげることでチャートの傾向をつかむことに役立ちます。
さらに詳しい説明は「移動平均線」で検索してもらえればたくさん出てくるのでここでは割愛します。
移動平均線を引く
では、移動平均線を引いていきましょう。
とりあえずデータを取得する
前回の記事で為替データの取得とチャートのプロットは説明しましたが、簡単におさらいしていきます。
まず、必要なライブラリをインストールします。
import pandas as pd import numpy as np import matplotlib.pyplot as plt import matplotlib.dates as mdates from mpl_finance import candlestick_ohlc import datetime from oandapyV20 import API import oandapyV20.endpoints.instruments as instruments import talib
データの取得とローソク足チャートをプロットします。
今回はUSD/JPYの日足のデータを2000個取得します。
データの取得のためにはOANDA API のアクセストークンが必要になります。
アクセストークンの取得に関してはこの記事を参照してください
access_token = "your access_token" api = API(access_token=access_token, environment="practice") params = { "granularity": "D", # 取得する足 "count": 2000, # 取得する足数 "price": "B", # Bid } instrument = "USD_JPY" # 通貨ペア instruments_candles = instruments.InstrumentsCandles(instrument=instrument, params=params) api.request(instruments_candles) response = instruments_candles.response df = pd.DataFrame(response["candles"]) ohlc = [] for r in response["candles"]: time = r["time"].replace(".000000000Z", "") time = datetime.datetime.strptime(time, "%Y-%m-%dT%H:%M:%S") time = mdates.date2num(time) r["bid"]["time"] = time ohlc.append(r["bid"]) df = pd.DataFrame(ohlc) df = df.astype(np.float64) # ローソク足のチャートの表示 fig, ax = plt.subplots(figsize=(10, 5)) df = df[["time", "o", "h", "l", "c"]] candlestick_ohlc(ax, df.values, width=.6, colorup="green", colordown="red") times = df["time"].values
これでとりあえず前回と同様にローソク足のチャートがプロットできました。
移動平均線を引く
次に移動平均線を引いていきましょう。
今回はpandasを使って移動平均線を引きます。
移動平均線を引く
さっそくソースコードを見てみます。
# 移動平均を計算する sma_25 = df["c"].rolling(window=25).mean().values # 25移動平均 ax.plot(times, sma_25, label="25") sma_75 = df["c"].rolling(window=75).mean().values # 75移動平均 ax.plot(times, sma_75, label="75") sma_200 = df["c"].rolling(window=200).mean().values # 200移動平均 ax.plot(times, sma_200, label="200")
ここでは、短期(25)、中期(75)、長期(200)の移動平均を求めています。
あとは、以下のコードでチャートを表示します。
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d')) plt.show()
x軸を時間にするために、
ax.xaxis.set_major_formatter(mdates.DateFormatter(‘%Y-%m-%d’))
をおこなっています。
うまく移動平均線を引くことができました。
終わりに
今回は前回プロットしたチャートに移動平均線を描いてみました。
なんとなくチャート分析ができるようになった感じがします笑