
Chiến lược này là một hệ thống theo dõi xu hướng dựa trên các đường trung bình di chuyển của chỉ số ((EMA), kết hợp với quản lý vị trí động và kiểm soát rủi ro. Chiến lược sử dụng các tín hiệu chéo của EMA nhanh và chậm để xác định xu hướng thị trường, đồng thời điều chỉnh kích thước giao dịch động thông qua tính toán rủi ro phần trăm và sử dụng dừng di chuyển để bảo vệ lợi nhuận.
Lý luận cốt lõi của chiến lược dựa trên trung bình di chuyển chỉ số của hai chu kỳ khác nhau (chính định 9 và 21). Khi EMA nhanh lên vượt qua EMA chậm, hệ thống tạo ra nhiều tín hiệu; Khi EMA nhanh xuống vượt qua EMA chậm, hệ thống bằng phẳng. Kích thước của mỗi giao dịch được tính toán động dựa trên tỷ lệ rủi ro cố định của tổng tài khoản (chính định 1%), đồng thời đặt mức dừng và tỷ lệ dừng di chuyển dựa trên tỷ lệ lợi nhuận rủi ro.
Đây là một hệ thống giao dịch hoàn chỉnh kết hợp các phương pháp phân tích kỹ thuật cổ điển với các tư tưởng quản lý rủi ro hiện đại. Chiến lược kiểm soát rủi ro bằng cách quản lý vị trí và dừng chân di động, đồng thời sử dụng EMA để bắt các cơ hội xu hướng. Mặc dù có một số hạn chế vốn có, nhưng có thể nâng cao hơn nữa sự ổn định và thích ứng của chiến lược thông qua hướng tối ưu hóa được đề xuất.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Bitcoin Exponential Profit Strategy", overlay=true)
// User settings
fastLength = input.int(9, title="Fast EMA Length", minval=1)
slowLength = input.int(21, title="Slow EMA Length", minval=1)
riskPercent = input.float(1, title="Risk % Per Trade", step=0.1) / 100
rewardMultiplier = input.float(2, title="Reward Multiplier (R:R)", step=0.1)
trailOffsetPercent = input.float(0.5, title="Trailing Stop Offset %", step=0.1) / 100
// Calculate EMAs
fastEMA = ta.ema(close, fastLength)
slowEMA = ta.ema(close, slowLength)
// Plot EMAs
plot(fastEMA, color=color.blue, title="Fast EMA")
plot(slowEMA, color=color.red, title="Slow EMA")
// Account balance and dynamic position sizing
capital = strategy.equity
riskAmount = capital * riskPercent
// Define Stop Loss and Take Profit Levels
stopLossLevel = close * (1 - riskPercent)
takeProfitLevel = close * (1 + rewardMultiplier * riskPercent)
// Trailing stop offset
trailOffset = close * trailOffsetPercent
// Entry Condition: Bullish Crossover
if ta.crossover(fastEMA, slowEMA)
positionSize = riskAmount / math.max(close - stopLossLevel, 0.01) // Prevent division by zero
strategy.entry("Long", strategy.long, qty=positionSize)
strategy.exit("TakeProfit", from_entry="Long", stop=stopLossLevel, limit=takeProfitLevel, trail_offset=trailOffset)
// Exit Condition: Bearish Crossunder
if ta.crossunder(fastEMA, slowEMA)
strategy.close("Long")
// Labels for Signals
if ta.crossover(fastEMA, slowEMA)
label.new(bar_index, low, "BUY", color=color.green, textcolor=color.white, style=label.style_label_up)
if ta.crossunder(fastEMA, slowEMA)
label.new(bar_index, high, "SELL", color=color.red, textcolor=color.white, style=label.style_label_down)