Chiến lược này là một hệ thống theo xu hướng dựa trên nhiều đường chéo trung bình chuyển động biểu thức (EMA), kết hợp với các cơ chế dừng lỗ và lấy lợi nhuận năng động. Chiến lược sử dụng ba EMA - 21 giai đoạn, 50 giai đoạn và 200 giai đoạn - tạo ra tín hiệu giao dịch thông qua các đường chéo EMA ngắn hạn và trung hạn trong khi sử dụng EMA dài hạn để xác nhận hướng xu hướng tổng thể. Nó bao gồm các mức dừng lỗ và lấy lợi nhuận linh hoạt để quản lý rủi ro. Chiến lược đặc biệt phù hợp với các thị trường có biến động đáng kể và giao dịch xu hướng trung và dài hạn.
Lý thuyết cốt lõi dựa trên hiệu ứng phối hợp của hệ thống EMA ba:
Chiến lược này có hiệu quả nắm bắt xu hướng thị trường thông qua sự phối hợp của nhiều hệ thống EMA. Cơ chế quản lý rủi ro toàn diện và logic giao dịch rõ ràng làm cho nó trở thành một công cụ giao dịch thực tế. Thông qua tối ưu hóa và cải tiến liên tục, chiến lược có thể thích nghi tốt hơn với các môi trường thị trường khác nhau, tăng hiệu quả và ổn định giao dịch. Các nhà giao dịch được khuyên nên tiến hành kiểm tra kỹ lưỡng và tối ưu hóa tham số trước khi thực hiện trực tiếp, thực hiện các điều chỉnh thích hợp dựa trên đặc điểm thị trường và sở thích rủi ro cá nhân.
/*backtest start: 2019-12-23 08:00:00 end: 2024-11-17 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("EMA Crossover with SL and TP Levels", overlay=true) // Input settings for stop loss and take profit slTicks = input.int(50, title="Stop Loss (ticks)", minval=1) tpTicks = input.int(100, title="Take Profit (ticks)", minval=1) // Input settings for moving averages shortMAPeriod = input.int(21, title="Short MA Period") longMAPeriod = input.int(50, title="Long MA Period") thirdMAPeriod = input.int(200, title="Third MA Period") // Calculate moving averages shortMA = ta.ema(close, shortMAPeriod) // Short EMA (21-period) longMA = ta.ema(close, longMAPeriod) // Long EMA (50-period) thirdMA = ta.ema(close, thirdMAPeriod) // Third EMA (200-period) // Detect crossovers for entry signals bullishCross = ta.crossover(shortMA, longMA) and close > thirdMA bearishCross = ta.crossunder(shortMA, longMA) and close < thirdMA // Initialize variables for SL and TP var float longSL = na var float longTP = na var float shortSL = na var float shortTP = na // Execute trades based on crossovers if (bullishCross) longSL := close - slTicks * syminfo.mintick longTP := close + tpTicks * syminfo.mintick strategy.entry("Long", strategy.long) strategy.exit("Exit Long", "Long", stop=longSL, limit=longTP) if (bearishCross) shortSL := close + slTicks * syminfo.mintick shortTP := close - tpTicks * syminfo.mintick strategy.entry("Short", strategy.short) strategy.exit("Exit Short", "Short", stop=shortSL, limit=shortTP) // Plot the MAs plot(shortMA, color=color.green, linewidth=2, title="21-period EMA") plot(longMA, color=color.red, linewidth=2, title="50-period EMA") plot(thirdMA, color=color.blue, linewidth=2, title="200-period EMA") // Plot buy/sell signals plotshape(series=bullishCross, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY", size=size.small, offset=-1) plotshape(series=bearishCross, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL", size=size.small, offset=-1) // // Draw SL and TP lines for Long positions // if (bullishCross) // line.new(x1=bar_index, y1=longSL, x2=bar_index + 1, y2=longSL, color=color.red, width=2, style=line.style_dotted) // line.new(x1=bar_index, y1=longTP, x2=bar_index + 1, y2=longTP, color=color.green, width=2, style=line.style_dotted) // label.new(bar_index, longSL, text="Long SL", style=label.style_label_down, color=color.red, textcolor=color.white, size=size.small) // label.new(bar_index, longTP, text="Long TP", style=label.style_label_up, color=color.green, textcolor=color.white, size=size.small) // // Draw SL and TP lines for Short positions // if (bearishCross) // line.new(x1=bar_index, y1=shortSL, x2=bar_index + 1, y2=shortSL, color=color.red, width=2, style=line.style_dotted) // line.new(x1=bar_index, y1=shortTP, x2=bar_index + 1, y2=shortTP, color=color.green, width=2, style=line.style_dotted) // label.new(bar_index, shortSL, text="Short SL", style=label.style_label_down, color=color.red, textcolor=color.white, size=size.small) // label.new(bar_index, shortTP, text="Short TP", style=label.style_label_up, color=color.green, textcolor=color.white, size=size.small)