多空动态跟踪策略是一个利用动态平均值跟踪价格趋势的策略。它通过计算一定周期内的最高价和最低价的移动平均来确定当前趋势,并结合ATR来实现动态止损止盈。该策略主要适用于具有明显趋势的市场,通过及时捕捉趋势反转来进行长期持仓。
该策略首先计算一定周期(默认200日)内的最高价和最低价的移动平均值,并求二者的中点作为基准线。然后计算价格与基准线的偏离程度,当价格高于基准线一个ATR(默认10日ATR的0.5倍)时认为处于上涨趋势,当价格低于基准线一个ATR时认为处于下跌趋势。根据趋势状态 Entry 多头或空头头寸。
当价格重新回归基准线时产生 Exit 信号。此外,ATR 的动态变化可以使止损止盈随大趋势逐步拉伸,从而减少非趋势性波动带来的过频交易。
可以通过适当调整ATR参数降低止损敏感性,或加入其他指标筛选确定性强的交易时机。也可以结合大盘走势评估风险胃纳,选择是否仅在大盘多头行情中做多。
多空动态跟踪策略总体来说是一个简单实用的趋势跟踪策略。它通过动态平均线确定趋势方向,并利用ATR实现动态止损止盈,可以有效控制风险。该策略适合趋势明显的市场环境,通过及时捕捉趋势反转可以获得长期持有的超额收益。但需要注意防止在震荡行情中被套牢。通过参数优化和辅助决策可以进一步提高策略稳定性。
/*backtest
start: 2022-10-10 00:00:00
end: 2023-10-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Trend Following Long Only Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
lookback_length = input(200, type=input.integer, minval=1, title="Lookback Length")
smoother_length = input(5, type=input.integer, minval=1, title="Smoother Length")
atr_length = input(10, type=input.integer, minval=1, title="ATR Length")
atr_multiplier = input(0.5, type=input.float, minval=0.5, title="ATR Multiplier")
vola = atr(atr_length) * atr_multiplier
price = sma(close, 3)
l = ema(lowest(low, lookback_length), smoother_length)
h = ema(highest(high, lookback_length), smoother_length)
center = (h + l) * 0.5
upper = center + vola
lower = center - vola
trend = ema(price > upper ? 1 : (price < lower ? -1 : 0), 3)
c = trend < 0 ? upper : lower
pcenter = plot(center, transp=100)
pclose = plot(close, transp=100)
pc = plot(c, transp=100)
buy_signal = crossover(trend, 0.0)
sell_signal = crossunder(trend, 0.0)
strategy.entry("Buy", strategy.long, when=buy_signal)
strategy.close("Buy", when=sell_signal)
bgcolor(trend >= 0 ? color.green : color.red, transp=95)
fill(pc, pclose, color=trend >= 0 ? color.green : color.red)