平均真实波动指标ATR策略–量化交易实战(附Python完整代码)

平均真实波幅(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
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2024 年 7 月 30 日
下一篇 2024 年 7 月 30 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注