Chiến lược theo xu hướng và động lực của Bybit EMA RSI là một chiến lược giao dịch định lượng kết hợp giữa Mức trung bình chuyển động biểu số (EMA) và Chỉ số sức mạnh tương đối (RSI). Chiến lược sử dụng hai EMA với các giai đoạn khác nhau để xác định xu hướng thị trường và chỉ số RSI để xác nhận tính hợp lệ của xu hướng. Khi EMA nhanh vượt qua EMA chậm và RSI dưới ngưỡng thấp nhất định, chiến lược tạo ra tín hiệu dài. Ngược lại, khi EMA nhanh vượt qua EMA chậm và RSI vượt qua ngưỡng trên nhất định, chiến lược tạo ra tín hiệu ngắn. Chiến lược cũng bao gồm các tỷ lệ phần trăm hoa hồng khác nhau dựa trên mức tài khoản Bybit và các chức năng dừng lỗ và lợi nhuận tích hợp để quản lý rủi ro hiệu quả.
Chiến lược theo dõi xu hướng và đà tăng của Bybit EMA RSI là một chiến lược giao dịch định lượng kết hợp các chỉ số theo xu hướng và đà tăng. Bằng cách sử dụng EMA và RSI cùng nhau, nó có thể nắm bắt hiệu quả xu hướng thị trường. Chiến lược bao gồm các chức năng lấy lợi nhuận và dừng lỗ tích hợp và thiết lập tỷ lệ phần trăm hoa hồng dựa trên mức tài khoản Bybit, quản lý rủi ro hiệu quả và thích nghi với các điều kiện giao dịch khác nhau của người dùng. Tuy nhiên, vẫn còn chỗ cho tối ưu hóa trong chiến lược, chẳng hạn như tối ưu hóa tham số, giới thiệu các chỉ số kỹ thuật khác và tối ưu hóa cài đặt lấy lợi nhuận và dừng lỗ. Với tối ưu hóa và cải thiện liên tục, chiến lược dự kiến sẽ đạt được kết quả tốt hơn trong giao dịch thực tế.
/*backtest start: 2024-03-21 00:00:00 end: 2024-03-28 00:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // @BryanAaron //@version=5 strategy("Bybit EMA RSI Strategy", overlay=true) // Input parameters fastLength = input(90, title="Fast EMA Length") slowLength = input(300, title="Slow EMA Length") rsiLength = input(5, title="RSI Length") rsiUpperThreshold = input(85, title="RSI Upper Threshold") rsiLowerThreshold = input(45, title="RSI Lower Threshold") takeProfitPerc = input(5, title="Take Profit %") stopLossPerc = input(3, title="Stop Loss %") bybitAccountLevel = input.string("VIP 0", title="Bybit Account Level", options=["VIP 0", "VIP 1", "VIP 2", "VIP 3", "VIP 4"]) // Calculate moving averages fastMA = ta.ema(close, fastLength) slowMA = ta.ema(close, slowLength) // Calculate RSI rsi = ta.rsi(close, rsiLength) // Trading conditions longCondition = (fastMA > slowMA) and (rsi < rsiLowerThreshold) shortCondition = (fastMA < slowMA) and (rsi > rsiUpperThreshold) // Set commission based on Bybit account level commissionPerc = switch bybitAccountLevel "VIP 0" => 0.075 "VIP 1" => 0.065 "VIP 2" => 0.055 "VIP 3" => 0.045 "VIP 4" => 0.035 => 0.075 // Calculate entry prices with commission var float longEntryPrice = na var float shortEntryPrice = na longEntryPriceWithCommission = close * (1 + commissionPerc / 100) shortEntryPriceWithCommission = close * (1 - commissionPerc / 100) // Calculate take profit and stop loss prices takeProfitPrice(entryPrice) => entryPrice * (1 + takeProfitPerc / 100) stopLossPrice(entryPrice) => entryPrice * (1 - stopLossPerc / 100) // Plot entry prices plotchar(longCondition, title="Long Entry Price", char="LE", location=location.belowbar, color=color.green) plotchar(shortCondition, title="Short Entry Price", char="SE", location=location.abovebar, color=color.red) // Draw position on the chart longColor = color.green shortColor = color.red profitColor = color.new(color.green, 80) lossColor = color.new(color.red, 80) plotshape(longCondition and strategy.position_size > 0, title="Long Position", text="Long", location=location.belowbar, style=shape.labelup, size=size.small, color=longColor, textcolor=color.white) plotshape(shortCondition and strategy.position_size < 0, title="Short Position", text="Short", location=location.abovebar, style=shape.labeldown, size=size.small, color=shortColor, textcolor=color.white) if (strategy.position_size > 0) line.new(bar_index, longEntryPrice, bar_index + 1, longEntryPrice, color=longColor, width=2) longProfitLine = line.new(bar_index, takeProfitPrice(longEntryPrice), bar_index + 1, takeProfitPrice(longEntryPrice), color=profitColor, width=1) longLossLine = line.new(bar_index, stopLossPrice(longEntryPrice), bar_index + 1, stopLossPrice(longEntryPrice), color=lossColor, width=1) else if (strategy.position_size < 0) line.new(bar_index, shortEntryPrice, bar_index + 1, shortEntryPrice, color=shortColor, width=2) shortProfitLine = line.new(bar_index, stopLossPrice(shortEntryPrice), bar_index + 1, stopLossPrice(shortEntryPrice), color=profitColor, width=1) shortLossLine = line.new(bar_index, takeProfitPrice(shortEntryPrice), bar_index + 1, takeProfitPrice(shortEntryPrice), color=lossColor, width=1) // Entry if (longCondition) strategy.entry("Long", strategy.long) longEntryPrice := longEntryPriceWithCommission else if (shortCondition) strategy.entry("Short", strategy.short) shortEntryPrice := shortEntryPriceWithCommission