平均真实波幅(Average True Range, ATR)是一种技术分析指标, 用于衡量金融市场中价格波动的幅度。它是由J. Welles Wilder Jr. 在1978年提出的, 主要用于识别市场的波动性和趋势强度。
ATR的计算基于以下三个步骤:
计算每个周期的真实波幅(True Range, TR)。TR是以下三个值中的最大值:
当前周期的最高价减去最低价。
当前周期的最高价减去前一周期的收盘价。
当前周期的最低价减去前一周期的收盘价。
计算TR的移动平均值。通常使用简单移动平均(SMA), 周期长度可以根据需要选择, 例如14天。
将移动平均值除以一个调整因子, 通常是2, 以得到平均真实波幅。
ATR的计算公式如下:
TR = max(high - low, abs(high - prev_close), abs(low - prev_close))
ATR = SMA(TR, n) / 2
其中, high是当前周期的最高价, low是当前周期的最低价, prev_close是前一周期的收盘价, SMA是简单移动平均, n是移动平均的周期长度。
ATR的主要用途包括:
衡量市场波动性:ATR值越高, 市场波动性越大; ATR值越低, 市场波动性越小。
设置止损和止盈水平:ATR可以帮助交易者确定合理的止损和止盈点位,以适应市场的波动性。
识别趋势强度:ATR可以与其他趋势指标结合使用, 以评估趋势的强度和可能的反转点。
在实际应用中, ATR通常与其他技术分析工具和指标一起使用, 以提高交易决策的准确性。
def stock_atr(stock_data, window=14):
stock_data['H-L'] = stock_data['high'] - stock_data['low']
stock_data['H-PC'] = stock_data['high'] - stock_data['close'].shift(1)
stock_data['L-PC'] = stock_data['low'] - stock_data['close'].shift(1)
stock_data['TR'] = stock_data[['H-L', 'H-PC', 'L-PC']].max(axis=1)
stock_data['ATR'] = stock_data['TR'].rolling(window=window).mean()
return stock_data['ATR']
def plot_stock_atr(stock_data):
atr = stock_atr(stock_data)
stock_data['trade_date'] = pd.to_datetime(stock_data['trade_date'], format='%Y%m%d')
plt.subplot(2, 1, 1)
plt.plot(stock_data['trade_date'], stock_data['close'], label='Close Price')
plt.legend()
plt.title('Close Price')
plt.subplot(2, 1, 2)
plt.plot(stock_data['trade_date'], atr, label='ATR')
plt.legend()
plt.title('ATR')
plt.xlabel('Date')
plt.ylabel('ATR')
plt.show()