ATR(Average True Range)

 

概要
図1 ATRの描画例

アベレージ・トゥルーレンジ(ATR)は1878年にJ・ウェイルズ・ワイルダー氏によって考案されたテクニカル指標で、図1のように相場の変動率を計算し過熱感を判断するトレンド系指標です。

計算方法(日足の場合)

単位時間内に相場がどれぐらい動くか調べるため値幅を計算し、値幅の移動平均値を計算します。値幅というとその期間の上げ幅=終値と始値の差を考えますが、この方法は単調に上下する相場の値動きの場合以外は正確ではありません。なぜなら、始値と終値の間にある値動きを全く無視しているからです。例えば、始値を1000円として終値を1010円とすると、始値と終値の間は10円となりますが、実際は最初に急に上がって高値の1500円をつけた後に下がって安値の800円を経た上で再度戻して1010円となった場合も、値動きの幅が10円になってしまうからです。

そこで3つの数字と3つの計算式を使って、本当の値動きの幅を計算します。本当の値動きの幅ということでトゥルーレンジ(TR)と呼びます。

日足の場合使用する数値は次の3つになります。

この3つの値からTR値動きの幅のパターンを考えると当日の安値<当日の高値は動かないので、前日の終値がどこにあったかで次の3パターンが決定します。2と3の場合は当日と前日のローソク足の間に窓が存在する場合です。

  1. 当日の安値<前日の終値<当日の高値 ⇒ TR=(当日の高値-当日の終値)/2
  2. 当日の安値<当日の高値<前日の終値 ⇒ TR=(前日の終値-当日の安値)/2
  3. 前日の終値<当日の安値<当日の高値 ⇒ TR=(当日の高値-前日の終値)/2

1から3のうち最も値幅が大きいものをTRとします。

ATRは読んで字のとおりTRの平均を計算したもので、ここではEMAを使用します。日足ではnの値として14を使用するのが一般的です。

$$ \rm{} ATR(n)=EMA(TR, n) $$
実装用Pythonコード

必要なライブラリを読み込みます

!pip install mpl_finance #Collaboratoryに入っていないライブラリを読み込みます
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd
import mpl_finance
import sys
import numpy as np
from datetime import datetime
from matplotlib.offsetbox import OffsetImage, AnnotationBbox
import requests
import io

疑似データを読み込みます

#ファイルの読み込み
URL = "https://neulab.co.jp/wp-content/uploads/pseudo_data.csv" #csvファイルのURL

datafile = requests.get(URL)#ファイルの読み込み

#データフレームの作成
df_temp = pd.read_csv(io.BytesIO(datafile.content), header=0, index_col=0, parse_dates=True, encoding="UTF-8")

df = df_temp.loc[:,['Open','High','Low','Close']]
df.head()

ATRを計算します

a = (df['High'] - df['Low']).abs()
b = (df['High'] - df['Close'].shift(1)).abs()
c = (df['Low'] - df['Close'].shift(1)).abs()

df_tr = pd.concat([a, b, c], axis=1).max(axis=1)
df_tr_ema = df_tr.ewm(span=14).mean()

matplotを使った表示例です

canvas_color = '#fffafa'
line_color = '#c8ced1'
font_color = '#171510'
colorup = '#bf0000'
colordown = '#006fbf'

n_data = -100
data = df[n_data:]
ohlc = np.vstack((range(len(data)), data.T)).T

fig, (ax1, ax2) = plt.subplots(2, 1, gridspec_kw={'height_ratios': [10, 6]}, sharex=True, figsize=(12,9))
fig.patch.set_facecolor(canvas_color)
ax1.patch.set_facecolor(canvas_color)
mpl_finance.candlestick_ohlc(ax1, ohlc, width=0.5, alpha=1, colorup=colorup, colordown=colordown)
ax2.patch.set_facecolor(canvas_color)
ax2.plot(range(len(data)), df_tr_ema.values[n_data:], color='red', ls='-', label='ATR')
ax1.grid()
ax2.grid()

#ロゴ読み込み
logoURL = "https://neulab.co.jp/wp-content/uploads/logo.png" #logoファイルのURL
img_c = plt.imread(logoURL)
imagebox = OffsetImage(img_c, zoom=0.020) #画像をimageboxにいれる。
imagebox.image.axes = ax1
im_sabo = AnnotationBbox(imagebox, (0, 9850), xybox=(0, 9950), xycoords="data", boxcoords="data", pad=0.3, frameon=False)

l1,l2 = ax2.get_legend_handles_labels()
ax2.legend(l1,l2, fontsize=14, edgecolor='none', facecolor=canvas_color)

ax1.add_artist(im_sabo)
ax1.set_ylabel("Price of Something", fontsize=22)
ax1.set_ylim(9000., 10000.)
ax1.yaxis.tick_right()
ax1.yaxis.set_label_coords(0, 0.5)
ax1.tick_params(labelsize=24, labelcolor=font_color, color=line_color)

ax1.spines['left'].set_linewidth(0)
ax1.spines['right'].set_linewidth(0)
ax1.spines['top'].set_linewidth(0)
ax1.spines['bottom'].set_linewidth(0)

ax2.yaxis.tick_right()
ax2.set_ylim([-00,100])
ax2.tick_params(labelsize=22, labelcolor=font_color, color=line_color)

ax2.spines['left'].set_color(line_color)
ax2.spines['right'].set_color(line_color)
ax2.spines['top'].set_color(line_color)
ax2.spines['bottom'].set_color(line_color)

xtick0 = 2
plt.xticks(range(xtick0,len(data),12), [x.strftime('%m/%d') for x in df_tr_ema.index][xtick0::12])

plt.subplots_adjust(left=0.05, right=0.89, bottom=0.1, top=0.99)
plt.grid(which='major',color=line_color,linestyle='-')
plt.grid(which='minor',color=line_color,linestyle='-')

ax2.grid(linestyle='--', lw=1)
ax1.set_axisbelow(True)

fig.savefig('ATR.png', facecolor=fig.get_facecolor(), edgecolor='none')

以上のコードをGoogle社の提供しているColaboratory上で公開しており、実際に動作させることができます。

リンク先はこちら

ATRを使った予想

前提として基準となる水準がどこにあるかを過去の値動きから判断する必要があります。例えば図1の部分だけでは低水準か高水準かを判断できません。

ATRが高水準で推移する場合:相場が天井圏か底値圏に到達しつつある場合、つまり、変動が大きいためリスクが高い状況です。

ATRが低水準で推移する場合:レンジ相場が継続する可能性、つまり動きが小さく安定的な相場です。

注意点

ATRはボラティリティ(相場の変動率)を表す指標の一つなので、これだけでは売買ポイントやトレンドを読み取ることはできません。他の指標と組み合わせて売買の判断を行う必要があります。


※このHPページで紹介しているテクニカル指標を使った取引ルールや売買シグナルの見方は一般的な考え方に基づくものであり、利益の増加や損失の減少を保証するものではありません。ご自身の判断にてお取引いただきますようお願いいたします。


現在、ニューラボでは人工知能による取引アルゴリズムを開発中です。11月にリリース予定。乞うご期待!
自動取引にご興味を持たれましたら お問い合わせページよりお気軽にお問合せください。