该策略是一个基于技术分析的动态趋势跟踪系统,主要利用双均线(200日简单移动平均线和21周指数移动平均线)来识别市场趋势。策略通过整合相对强弱指标(RSI)和平均趋向指标(ADX)作为动量过滤器,并结合真实波幅(ATR)进行动态风险管理,实现了对上升趋势的精确捕捉和风险的有效控制。
策略的核心逻辑建立在以下几个关键要素之上: 1. 使用200日简单移动平均线(SMA)和21周指数移动平均线(EMA)的双重确认来定义多头市场条件 2. 通过RSI>50的条件确保动量持续向上 3. 利用ADX>25的条件验证趋势强度 4. 基于ATR的动态止损设置,提供了与市场波动相适应的风险控制 5. 采用百分比止盈机制,确保在达到预期收益时及时获利了结
这是一个设计合理、逻辑清晰的趋势跟踪策略,通过多重技术指标的配合使用,较好地平衡了收益和风险。策略的可定制性强,适合在不同市场环境下通过参数优化来保持其有效性。虽然存在一定的滞后性风险,但通过完善的风险控制机制,策略整体表现出较好的稳定性和可靠性。
/*backtest
start: 2022-02-09 00:00:00
end: 2025-02-06 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=6
strategy("BTCUSDT Daily - Enhanced Bitcoin Bull Market Support [CYRANO]", shorttitle="BTCUSDT Daily BULL MARKET", overlay=true, commission_type=strategy.commission.percent, commission_value=0.1, slippage=3)
// Inputs
smaLength = input.int(200, title="SMA Length (Bull Market)")
emaLength = input.int(147, title="EMA Length (21-Week Approximation)")
atrLength = input.int(14, title="ATR Length")
riskATR = input.float(2.0, title="ATR Multiplier for Stop Loss", step=0.1)
takeProfitPercent = input.float(10.0, title="Take Profit (%)", step=0.1)
rsiFilter = input.bool(true, title="Enable RSI Filter")
rsiLength = input.int(14, title="RSI Length")
adxFilter = input.bool(true, title="Enable ADX Filter")
adxThreshold = input.float(25, title="ADX Threshold")
// Date Range Filter
startDate = input(timestamp("2018-01-01 00:00 +0000"), title="Start Date")
endDate = input(timestamp("2069-12-31 00:00 +0000"), title="End Date")
inDateRange = true
// Moving Averages
sma200 = ta.sma(close, smaLength)
ema21w = ta.ema(close, emaLength)
// ATR Calculation
atr = ta.atr(atrLength)
stopLoss = close - (riskATR * atr)
takeProfit = close * (1 + takeProfitPercent / 100)
// RSI Filter
rsi = ta.rsi(close, rsiLength)
rsiCondition = rsiFilter ? rsi > 50 : true
// ADX Filter
[diplus, diminus, adx] = ta.dmi(14, 14)
adxCondition = adxFilter ? adx > adxThreshold : true
// Entry and Exit Conditions
buyCondition = inDateRange and close > sma200 and close > ema21w and rsiCondition and adxCondition
exitCondition = inDateRange and (close < sma200 or close < ema21w)
// Strategy Execution
if buyCondition
strategy.entry("BUY", strategy.long, stop=stopLoss, limit=takeProfit)
if exitCondition
strategy.close("BUY")
// Plot MAs
plot(sma200, title="200-Day SMA", color=color.blue, linewidth=2)
plot(ema21w, title="21-Week EMA", color=color.purple, linewidth=2)
// Background Highlight
bullColor = color.new(color.green, 80)
bearColor = color.new(color.red, 80)
bgcolor(close > sma200 and close > ema21w ? bullColor : bearColor, title="Bull Market Background")