
Chiến lược này là một hệ thống giao dịch định lượng dựa trên sự giao nhau của đường trung bình động và các chỉ báo RSI, chủ yếu được sử dụng để giao dịch trên thị trường quyền chọn. Chiến lược này sử dụng các tín hiệu giao nhau của đường trung bình động nhanh và chậm, kết hợp với mức quá mua và quá bán của RSI để xác định thời điểm giao dịch, đồng thời đặt mức chốt lời và dừng lỗ để kiểm soát rủi ro. Chiến lược này phù hợp để giao dịch trong khung thời gian 5 phút.
Chiến lược này sử dụng hai chỉ báo kỹ thuật chính: Đường trung bình động (MA) và Chỉ số sức mạnh tương đối (RSI). Cụ thể:
Chiến lược này xây dựng một hệ thống giao dịch tương đối hoàn chỉnh bằng cách kết hợp đường trung bình động cắt nhau và chỉ báo RSI. Ưu điểm của chiến lược này nằm ở khả năng xác nhận nhiều tín hiệu và quản lý rủi ro hoàn hảo, nhưng cũng cần phải chú ý đến tác động của môi trường thị trường đến hiệu quả của chiến lược. Thông qua quá trình tối ưu hóa và cải tiến liên tục, chiến lược này dự kiến sẽ đạt được hiệu suất ổn định trên thị trường quyền chọn. Các nhà giao dịch được khuyến nghị nên tiến hành kiểm tra ngược và tối ưu hóa tham số đầy đủ trước khi sử dụng theo thời gian thực.
/*backtest
start: 2024-12-06 00:00:00
end: 2025-01-04 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("MA Crossover with RSI Debugging", overlay=true)
// Inputs
fastLength = input.int(7, title="Fast MA Length", minval=1)
slowLength = input.int(13, title="Slow MA Length", minval=1)
rsiLength = input.int(17, title="RSI Length", minval=1)
rsiOverbought = input.int(64, title="RSI Overbought Level", minval=50, maxval=100)
rsiOversold = input.int(43, title="RSI Oversold Level", minval=0, maxval=50)
takeProfitPerc = input.float(4, title="Take Profit (%)", minval=0.1)
stopLossPerc = input.float(0.5, title="Stop Loss (%)", minval=0.1)
// Moving Averages
fastMA = ta.sma(close, fastLength)
slowMA = ta.sma(close, slowLength)
// RSI
rsi = ta.rsi(close, rsiLength)
// Entry Conditions
longCondition = ta.crossover(fastMA, slowMA) and rsi < rsiOversold
shortCondition = ta.crossunder(fastMA, slowMA) and rsi > rsiOverbought
// Plot Debugging Shapes
plotshape(ta.crossover(fastMA, slowMA), color=color.green, style=shape.circle, location=location.belowbar, title="Fast MA Crossover")
plotshape(ta.crossunder(fastMA, slowMA), color=color.red, style=shape.circle, location=location.abovebar, title="Fast MA Crossunder")
plotshape(rsi < rsiOversold, color=color.blue, style=shape.triangleup, location=location.belowbar, title="RSI Oversold")
plotshape(rsi > rsiOverbought, color=color.orange, style=shape.triangledown, location=location.abovebar, title="RSI Overbought")
// Entry and Exit Execution
if (longCondition)
strategy.entry("Buy", strategy.long)
if (shortCondition)
strategy.entry("Sell", strategy.short)
takeProfitPrice = strategy.position_avg_price * (1 + takeProfitPerc / 100)
stopLossPrice = strategy.position_avg_price * (1 - stopLossPerc / 100)
if (strategy.position_size > 0)
strategy.exit("Exit Buy", from_entry="Buy", limit=takeProfitPrice, stop=stopLossPrice)
if (strategy.position_size < 0)
strategy.exit("Exit Sell", from_entry="Sell", limit=takeProfitPrice, stop=stopLossPrice)
// Plot Moving Averages
plot(fastMA, color=color.blue, title="Fast MA")
plot(slowMA, color=color.red, title="Slow MA")
// RSI Levels
hline(rsiOverbought, "RSI Overbought", color=color.red)
hline(rsiOversold, "RSI Oversold", color=color.green)