平均真实波幅(ATR,Average True Range)指标是衡量市场波动性的工具,由J. Welles Wilder Jr.在1978年提出。ATR通过计算一定周期内的真实波幅(True Range)的平均值,帮助交易者了解市场的波动程度。ATR指标在确定止损点和目标价位时特别有用。
一、指标计算公式
ATR的计算涉及以下步骤:
1.真实波幅(True Range):真实波幅是以下三个值中的最大值:
-
-
-
当日最高价与当日最低价之间的差值。
-
当日最高价与前一日收盘价之间的差值的绝对值。
-
当日最低价与前一日收盘价之间的差值的绝对值。
-
-
2.ATR的计算:ATR是真实波幅的一定周期(如14天)的移动平均值。
二、识别交易信号
ATR指标在量化交易中的应用广泛,尤其在确定止损和止盈水平时尤为重要。
-
买入条件:当ATR值处于较低水平,并伴随其他技术指标(如MACD金叉)发出买入信号时,可考虑建仓。ATR值低意味着市场波动性小,可能即将迎来新的趋势。
-
卖出条件:当ATR值突然升高,并伴随价格突破重要阻力位时,可能是市场趋势即将反转的信号,此时可考虑卖出或减仓。
三、平均真实波动指标ATR策略量化实战
# 读取股票数据
data = yf.download(ticker, start=start_date, end=end_date)
# 确保我们拥有计算ATR所需的数据列
if 'High' not in data.columns or 'Low' not in data.columns or 'Close' not in data.columns:
raise ValueError("Data does not contain necessary columns")
# 计算True Range
data['True Range'] = np.maximum(np.maximum((data['High'] - data['Low']),
abs(data['High'] - data['Close'].shift(1))),
abs(data['Low'] - data['Close'].shift(1)))
# 计算ATR(这里我们使用14天作为周期)
data['ATR'] = data['True Range'].rolling(window=14).mean()
# 初始化交易信号列
data['Signal'] = 0.0
# 生成指标策略
# 设定ATR的倍数
atr_multiplier = 2.0
# 生成交易信号
data['Entry Price'] = data['Close'] + atr_multiplier * data['ATR']
data['Exit Price'] = data['Close'] - atr_multiplier * data['ATR']
# 简化信号:这里仅当次日价格低于买入价时买入,高于卖出价时卖出
data['Signal'][1:] = np.where(data['Close'][1:] < data['Entry Price'][:-1], 1.0, 0.0)
data['Signal'][1:] = np.where(data['Close'][1:] > data['Exit Price'][:-1], -1.0, data['Signal'][1:])
# 清理初始NaN值
data['Signal'].fillna(0.0, inplace=True)
# 回测并计算收益
# 初始化持仓和资金
positions = data['Signal'].diff()
initial_capital = 100000
positions = positions.apply(lambda x: 1 if x == 1 else (-1 if x == -1 else 0))
capital = initial_capital
shares = 0
# 模拟交易
for i in range(1, len(data)):
if positions[i] == 1: # 买入
if shares == 0:
shares = initial_capital / data['Close'][i]
capital -= shares * data['Close'][i]
elif positions[i] == -1: # 卖出
if shares != 0:
capital += shares * data['Close'][i]
shares = 0
# 计算最终资金
final_capital = capital + shares * data['Close'][-1]
print(f"Initial Capital: {initial_capital}")
print(f"Final Capital: {final_capital}")
print(f"Profit/Loss: {final_capital - initial_capital}")
四、结论
ATR指标是一个非常有用的工具,它能够帮助交易者更好地理解市场的波动性,并据此做出更明智的交易决策。通过结合ATR指标和其他技术分析工具,交易者可以构建出更为稳健和有效的交易策略。然而,需要注意的是,任何技术指标都有其局限性,交易者在使用ATR指标时应结合其他分析方法和市场情况,以提高交易的成功率。在实际交易中,交易者应根据自己的交易风格和市场环境,灵活运用ATR指标,以达到最佳的交易效果。
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/105400
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!