基于ATR和斐波那契回撤止损的趋势跟踪策略

Author: ChaoZhang, Date: 2024-02-28 17:09:12
Tags:

基于ATR和斐波那契回撤止损的趋势跟踪策略

概述

本策略结合平均真实波动范围(ATR)和斐波那契回撤线,设计一个有止损保护的趋势跟踪策略。当价格突破ATR回撤止损线时,进行趋势跟踪;同时利用斐波那契回撤线来设置价格目标,实现趋势跟踪和止损止盈的有机配合。

策略原理

  1. 计算ATR值和ATR回撤止损线。ATR回撤止损线是ATR值乘以一个因子(如3.5)得到的。
  2. 计算三条斐波那契回撤线作为止盈目标。斐波那契回撤线定位是ATR回撤止损线到新高/新低点之间的斐波那契割合(如61.8%, 78.6%, 88.6%)。
  3. 当价格突破ATR回撤止损线时,产生买入/卖出信号,进行趋势跟踪。
  4. 止盈目标为三条斐波那契回撤线。

策略优势

  1. ATR止损可以有效控制风险,防止亏损扩大。
  2. 斐波那契目标可以在趋势中获利较多,同时也避免追高杀跌。
  3. 策略操作逻辑清晰简单,容易实施。
  4. 可灵活调整ATR比例因子和斐波那契设置来适应不同市场。

策略风险

  1. 在震荡行情中,ATR止损可能被频繁触发,带来操作频繁的风险。
  2. 存在一定的错过回调或调整的风险。
  3. 需要合理参数优化,如ATR周期参数等。

优化方向

  1. 可以结合趋势判断指标,避免在震荡行情中操作。
  2. 可以添加重新入场机制,以减少错过回调的风险。
  3. 对ATR周期、ATR倍数、斐波那契参数进行测试和优化。

总结

本策略整合ATR止损和斐波那契目标两个重要的技术分析方法,既可以在趋势中进行利润优化,也可以用止损来控制风险,是一种实用性很强的趋势跟踪策略。通过进一步优化可以使策略更稳定、更适应行情。


/*backtest
start: 2023-02-21 00:00:00
end: 2024-02-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("ATR TrailStop with Fib Targets", overlay=true)

// Input parameters
atrPeriod = input(5, title="ATR Period")
ATRFactor = input(3.5, title="ATR Factor")
Fib1Level = input(61.8, title="Fib1 Level")
Fib2Level = input(78.6, title="Fib2 Level")
Fib3Level = input(88.6, title="Fib3 Level")

// ATR Calculation
atrValue = ta.atr(atrPeriod)

// ATR TrailStop Calculation
loss = ATRFactor * atrValue
trendUp = close[1] > close[2] ? (close - loss > close[1] ? close - loss : close[1]) : close - loss
trendDown = close[1] < close[2] ? (close + loss < close[1] ? close + loss : close[1]) : close + loss
trend = close > close[2] ? 1 : close < close[2] ? -1 : 0
trailStop = trend == 1 ? trendUp : trendDown

// Fibonacci Levels Calculation
ex = trend > trend[1] ? high : trend < trend[1] ? low : na
fib1 = ex + (trailStop - ex) * Fib1Level / 100
fib2 = ex + (trailStop - ex) * Fib2Level / 100
fib3 = ex + (trailStop - ex) * Fib3Level / 100

// Plotting
plot(trailStop, title="TrailStop", color=color.red)
plot(fib1, title="Fib1", color=color.white)
plot(fib2, title="Fib2", color=color.white)
plot(fib3, title="Fib3", color=color.white)

// Buy and Sell Signals
longCondition = close > trailStop and close[1] <= trailStop
shortCondition = close < trailStop and close[1] >= trailStop

if (longCondition)
    strategy.entry("Long", strategy.long)

if (shortCondition)
    strategy.entry("Short", strategy.short)


更多内容