Ini adalah strategi mengikuti trend yang menggabungkan analisis pelbagai jangka masa dan pengurusan turun naik. Inti strategi menggunakan silang EMA berganda untuk arah trend, penunjuk RSI untuk penapisan overbought / oversold, menggabungkan EMA jangka masa yang lebih tinggi untuk pengesahan trend keseluruhan, dan menggunakan penunjuk ATR untuk pengurusan stop-loss dan sasaran keuntungan yang dinamik. Melalui penggunaan pelbagai penunjuk teknikal yang diselaraskan, strategi memastikan kebolehpercayaan isyarat dan kawalan risiko yang berkesan.
Logik perdagangan teras terdiri daripada komponen utama berikut:
Ini adalah trend yang direka dengan baik mengikuti strategi yang mencapai ciri-ciri ganjaran risiko yang baik melalui analisis pelbagai jangka masa dan pengurusan turun naik. Kelebihan teras terletak pada gabungan organik beberapa penunjuk teknikal, memastikan kebolehpercayaan perdagangan dan kawalan risiko yang berkesan. Walaupun terdapat beberapa risiko berpotensi, prestasi keseluruhan strategi masih mempunyai ruang untuk peningkatan melalui pengoptimuman dan penyempurnaan berterusan. Adalah penting untuk memberi tumpuan kepada pengoptimuman parameter dan pengesahan balik sambil melaksanakan langkah-langkah kawalan risiko secara ketat dalam perdagangan langsung.
/*backtest start: 2019-12-23 08:00:00 end: 2024-11-26 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Trend Following with ATR and MTF Confirmation", overlay=true) // Parameters emaShortPeriod = input.int(9, title="Short EMA Period", minval=1) emaLongPeriod = input.int(21, title="Long EMA Period", minval=1) rsiPeriod = input.int(14, title="RSI Period", minval=1) rsiOverbought = input.int(70, title="RSI Overbought", minval=50) rsiOversold = input.int(30, title="RSI Oversold", minval=1) atrPeriod = input.int(14, title="ATR Period", minval=1) atrMultiplier = input.float(1.5, title="ATR Multiplier", minval=0.1) takeProfitATRMultiplier = input.float(2.0, title="Take Profit ATR Multiplier", minval=0.1) // Multi-timeframe settings htfEMAEnabled = input.bool(true, title="Use Higher Timeframe EMA Confirmation?", inline="htf") htfEMATimeframe = input.timeframe("D", title="Higher Timeframe", inline="htf") // Select trade direction tradeDirection = input.string("Both", title="Trade Direction", options=["Both", "Long", "Short"]) // Calculating indicators emaShort = ta.ema(close, emaShortPeriod) emaLong = ta.ema(close, emaLongPeriod) rsiValue = ta.rsi(close, rsiPeriod) atrValue = ta.atr(atrPeriod) // Higher timeframe EMA confirmation htfEMALong = request.security(syminfo.tickerid, htfEMATimeframe, ta.ema(close, emaLongPeriod)) // Trading conditions longCondition = ta.crossover(emaShort, emaLong) and rsiValue < rsiOverbought and (not htfEMAEnabled or close > htfEMALong) shortCondition = ta.crossunder(emaShort, emaLong) and rsiValue > rsiOversold and (not htfEMAEnabled or close < htfEMALong) // Plotting EMAs plot(emaShort, title="EMA Short", color=color.green) plot(emaLong, title="EMA Long", color=color.red) // Trailing Stop-Loss and Take-Profit levels var float trailStopLoss = na var float trailTakeProfit = na // Exit conditions var bool exitLongCondition = na var bool exitShortCondition = na if (strategy.position_size != 0) if (strategy.position_size > 0) // Long Position trailStopLoss := na(trailStopLoss) ? close - atrValue * atrMultiplier : math.max(trailStopLoss, close - atrValue * atrMultiplier) trailTakeProfit := close + atrValue * takeProfitATRMultiplier exitLongCondition := close <= trailStopLoss or close >= trailTakeProfit strategy.exit("Exit Long", "Long", stop=trailStopLoss, limit=trailTakeProfit, when=exitLongCondition) else // Short Position trailStopLoss := na(trailStopLoss) ? close + atrValue * atrMultiplier : math.min(trailStopLoss, close + atrValue * atrMultiplier) trailTakeProfit := close - atrValue * takeProfitATRMultiplier exitShortCondition := close >= trailStopLoss or close <= trailTakeProfit strategy.exit("Exit Short", "Short", stop=trailStopLoss, limit=trailTakeProfit, when=exitShortCondition) // Strategy Entry if (longCondition and (tradeDirection == "Both" or tradeDirection == "Long")) strategy.entry("Long", strategy.long) if (shortCondition and (tradeDirection == "Both" or tradeDirection == "Short")) strategy.entry("Short", strategy.short) // Plotting Buy/Sell signals plotshape(series=longCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY") plotshape(series=shortCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL") // Plotting Trailing Stop-Loss and Take-Profit levels plot(strategy.position_size > 0 ? trailStopLoss : na, title="Long Trailing Stop Loss", color=color.red, linewidth=2, style=plot.style_line) plot(strategy.position_size < 0 ? trailStopLoss : na, title="Short Trailing Stop Loss", color=color.green, linewidth=2, style=plot.style_line) plot(strategy.position_size > 0 ? trailTakeProfit : na, title="Long Take Profit", color=color.blue, linewidth=2, style=plot.style_line) plot(strategy.position_size < 0 ? trailTakeProfit : na, title="Short Take Profit", color=color.orange, linewidth=2, style=plot.style_line) // Alerts alertcondition(longCondition, title="Buy Alert", message="Buy Signal Triggered") alertcondition(shortCondition, title="Sell Alert", message="Sell Signal Triggered") alertcondition(exitLongCondition, title="Long Exit Alert", message="Long Position Closed") alertcondition(exitShortCondition, title="Short Exit Alert", message="Short Position Closed")