该策略是一个基于多重技术指标的现货市场多头策略。它主要利用快速和慢速移动平均线(EMA)的交叉信号,结合相对强弱指数(RSI)、平均趋向指标(ADX)和移动平均线趋同/背离指标(MACD)来确认交易信号。策略还使用平均真实波幅(ATR)来设置动态的止损和止盈水平,实现风险管理。
策略的核心逻辑基于以下几个关键组件: 1. 使用8周期和21周期的EMA交叉作为主要入场信号 2. 通过ADX>25确认趋势强度 3. 利用MACD金叉确认趋势方向 4. RSI<70用于避免在过度买入区域入场 5. 使用ATR的1.5倍作为止损,2倍作为止盈 6. 引入追踪止损机制,确保利润锁定
这是一个设计合理的趋势跟踪策略,通过多重技术指标的配合使用,在控制风险的同时追求稳定收益。策略的优势在于其完善的确认机制和风险管理系统,但仍需要根据实际市场情况进行参数优化和逻辑改进。针对现有的风险,可以通过添加市场环境过滤和优化参数来进一步提升策略的稳定性和盈利能力。
/*backtest
start: 2024-02-21 00:00:00
end: 2025-02-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("Optimized Long-Only Strategy (Spot Market) - Candle Signals Only", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.1)
// INPUTS
fastEMA_len = input.int(8, "Fast EMA Length", minval=1)
slowEMA_len = input.int(21, "Slow EMA Length", minval=1)
rsiPeriod = input.int(14, "RSI Period")
rsiOverbought = input.int(70, "RSI Overbought Level", minval=50)
adxPeriod = input.int(14, "ADX Period", minval=1)
adxThreshold = input.int(25, "ADX Trend Strength Threshold", minval=1)
fastMACD = input.int(12, "MACD Fast Length", minval=1)
slowMACD = input.int(26, "MACD Slow Length", minval=1)
signalMACD = input.int(9, "MACD Signal Length", minval=1)
atrPeriod = input.int(14, "ATR Period", minval=1)
atrStopMultiplier = input.float(1.5, "ATR Stop Loss Multiplier", step=0.1)
atrProfitMultiplier = input.float(2.0, "ATR Profit Target Multiplier", step=0.1)
// CALCULATIONS
emaFast = ta.ema(close, fastEMA_len)
emaSlow = ta.ema(close, slowEMA_len)
rsiValue = ta.rsi(close, rsiPeriod)
// --- Custom ADX Calculation ---
up = ta.change(high)
down = -ta.change(low)
plusDM = (up > down and up > 0) ? up : 0
minusDM = (down > up and down > 0) ? down : 0
trueRange = ta.tr(true) // 'handle_na' parameter set to true
atrVal = ta.rma(trueRange, adxPeriod)
plusDI = 100 * ta.rma(plusDM, adxPeriod) / atrVal
minusDI = 100 * ta.rma(minusDM, adxPeriod) / atrVal
dx = 100 * math.abs(plusDI - minusDI) / (plusDI + minusDI)
adxValue = ta.rma(dx, adxPeriod)
// MACD Calculation (MACD line, signal line, histogram)
[macdLine, signalLine, _] = ta.macd(close, fastMACD, slowMACD, signalMACD)
// ATR for stops and targets
atrValue = ta.atr(atrPeriod)
// TRADING CONDITION (Long Only, on confirmed candle)
longCondition = ta.crossover(emaFast, emaSlow) and (adxValue > adxThreshold) and (macdLine > signalLine) and (rsiValue < rsiOverbought)
// POSITION MANAGEMENT: Execute only on confirmed candles
if barstate.isconfirmed and longCondition
strategy.entry("Long", strategy.long)
longStop = close - atrStopMultiplier * atrValue
longTarget = close + atrProfitMultiplier * atrValue
strategy.exit("Long Exit", from_entry="Long", stop=longStop, limit=longTarget, trail_points=atrValue * 0.5, trail_offset=atrValue * 0.3)
// PLOTTING
plot(emaFast, color=color.green, title="Fast EMA")
plot(emaSlow, color=color.red, title="Slow EMA")
plotshape(barstate.isconfirmed and longCondition, title="Buy Signal", style=shape.labelup, location=location.belowbar, color=color.green, text="BUY", textcolor=color.white, size=size.tiny)