
Chiến lược này là một hệ thống giao dịch kết hợp theo dõi xu hướng trung bình di chuyển và dừng động. Nó sử dụng MACD để nắm bắt chuyển động giá, sử dụng EMA để xác nhận xu hướng và sử dụng ATR để thiết lập vị trí dừng động. Phương pháp phân tích đa chiều này giúp nắm bắt cơ hội thị trường kịp thời và kiểm soát rủi ro hiệu quả.
Lập luận cốt lõi của chiến lược bao gồm ba chiều:
Chiến lược này xây dựng một hệ thống giao dịch hoàn chỉnh bằng cách kết hợp theo dõi xu hướng, phân tích động lực và kiểm soát rủi ro động. Đặc điểm chính của nó là nắm bắt hiệu quả cơ hội thị trường và kiểm soát động rủi ro giao dịch trong khi duy trì sự ổn định của chiến lược. Mặc dù có một số rủi ro vốn có, chiến lược này có giá trị ứng dụng thực tế tốt thông qua thiết lập tham số hợp lý và tối ưu hóa liên tục.
/*backtest
start: 2024-09-25 00:00:00
end: 2025-02-19 08:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/
//@version=5
strategy("MACD + ATR Dynamic Stop-Loss Strategy", overlay=true)
// Input parameters
macdFastLength = input.int(12, title="MACD Fast Length")
macdSlowLength = input.int(26, title="MACD Slow Length")
macdSignalSmoothing = input.int(9, title="MACD Signal Smoothing")
atrLength = input.int(14, title="ATR Length")
stopLossMultiplier = input.float(1.0, title="Stop-Loss ATR Multiplier")
useTrailingStop = input.bool(true, title="Use Trailing Stop")
trailATRMultiplier = input.float(2.0, title="Trailing Stop ATR Multiplier")
emaLength = input.int(20, title="EMA Length")
// Calculate MACD
[macdLine, signalLine, _] = ta.macd(close, macdFastLength, macdSlowLength, macdSignalSmoothing)
// Calculate ATR
atr = ta.atr(atrLength)
// Calculate 20-period EMA
ema20 = ta.ema(close, emaLength)
// Entry Conditions
buyCondition = ta.crossover(macdLine, signalLine) and close > ema20
sellCondition = ta.crossunder(macdLine, signalLine)
// Plot Buy and Sell Signals
plotshape(series=buyCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=sellCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")
// Dynamic Stop-Loss and Trailing Stop Logic
var float stopLossLevel = na
var float trailingStopLevel = na
if (buyCondition)
stopLossLevel := close - atr * stopLossMultiplier
trailingStopLevel := close - atr * trailATRMultiplier
if (strategy.position_size > 0)
if (useTrailingStop)
trailingStopLevel := math.max(trailingStopLevel, close - atr * trailATRMultiplier)
stopLossLevel := trailingStopLevel
strategy.exit("Trailing Stop", stop=stopLossLevel)
// Execute Trades
if (buyCondition)
strategy.entry("Long", strategy.long)
if (sellCondition)
strategy.close("Long")
// Plot Stop-Loss Level
plot(stopLossLevel, title="Stop-Loss Level", color=color.red, linewidth=1, style=plot.style_linebr)