真实波幅(ATR average true range)主要应用于了解股价的震荡幅度和节奏,在窄幅整理行情中用于寻找突破时机。通常情况下股价的波动幅度会保持在一定常态下,但是如果有主力资金进出时,股价波幅往往会加剧。另外,在股价横盘整理、波幅减少到极点时,也往往会产生变盘行情。真实波幅(ATR)正是基于这种原理而设计的指标。使用Talib中的ATR函数进行回测。
计算方法:
1.TR=∣最高价-最低价∣和∣最高价-昨收∣和∣昨收-最低价∣的最大值
2.真实波幅(ATR)=TR的N日简单移动平均
3.参数N设置为14日
使用方法:
如果当前价格比之前的价格高一个ATR的涨幅,买入股票
如果之前的价格比当前价格高一个ATR的涨幅,卖出股票
import pandas as pd
import numpy as np
import talib as ta
import tushare as ts
import matplotlib.pyplot as plt
from matplotlib import rc
rc('mathtext', default='regular')
import seaborn as sns
sns.set_style('white')
from matplotlib import dates
import matplotlib as mpl
%matplotlib inline
myfont =mpl.font_manager.FontProperties(fname=r"c:\windows\fonts\simsun.ttc",size=14)
plt.rcParams["figure.figsize"] = (20,10)
dw = ts.get_k_data("000001")
dw = dw[300:]
dw.index = range(len(dw))
dw['atr'] = ta.ATR(dw.high.values,dw.low.values,dw.close.values, timeperiod=14)
dw['di'] = dw.close.diff(-1)
dw = dw[14:]
dw.index = range(len(dw))
fig = plt.figure(figsize=(20,10))
fig.set_tight_layout(True)
ax1 = fig.add_subplot(111)
#fig.bar(dw.index, dw.volume, align='center', width=1.0)
ax1.plot(dw.index, dw.close, '-', color='g')
ax2 =ax1.twinx()
ax2.plot(dw.index, dw.atr, '-', color='r')
ax2.plot(dw.index, dw.di, '-.', color='b')
ax1.set_ylabel(u"股票价格(绿色)",fontproperties=myfont, fontsize=16)
ax2.set_ylabel(u"ATR参数",fontproperties=myfont, fontsize=16)
ax1.set_title(u"绿色是股票价格,红色(右轴)为ATR参数",fontproperties=myfont, fontsize=16)
# plt.xticks(bar_data.index.values, bar_data.barNo.values)
ax1.set_xlabel(u"ATR参数图",fontproperties=myfont,fontsize=16)
ax1.set_xlim(left=-1,right=len(dw))
ax1.grid()