
Chiến lược này là hệ thống giao dịch chồng chỉ báo đa cấp dựa trên Chỉ số sức mạnh tương đối (RSI). Chiến lược này hoạt động trong một khung thời gian giao dịch cụ thể, xác định các cơ hội giao dịch thông qua các tín hiệu mua quá mức và bán quá mức của chỉ báo RSI và kết hợp với cơ chế điều chỉnh vị thế động để tối ưu hóa lợi nhuận tổng thể bằng cách xây dựng các vị thế theo từng đợt khi thị trường di chuyển theo hướng ngược lại. Chiến lược này sử dụng phương pháp mục tiêu lợi nhuận dựa trên giá vào lệnh trung bình để quản lý mức dừng lỗ.
Chiến lược này chủ yếu dựa trên các thành phần cốt lõi sau:
Chiến lược này tạo nên một hệ thống giao dịch tương đối hoàn chỉnh bằng cách kết hợp chỉ báo RSI với cơ chế mở lệnh theo lô. Ưu điểm cốt lõi của chiến lược này nằm ở cơ chế lọc tín hiệu đa cấp và phương pháp quản lý vị thế linh hoạt, nhưng đồng thời cũng cần lưu ý đến các vấn đề như rủi ro thị trường theo xu hướng và tối ưu hóa tham số. Hiệu suất chung của chiến lược vẫn có thể được cải thiện bằng cách thêm bộ lọc xu hướng, tối ưu hóa cơ chế dừng lỗ và các cải tiến khác.
/*backtest
start: 2024-12-10 00:00:00
end: 2025-01-08 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/
//@version=6
strategy("TonyM RSI", overlay=true)
// Input Settings
rsiLengthInput = input.int(14, minval=1, title="RSI Length", group="RSI Settings")
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
startHour = input.int(2, "Start Hour", minval=0, maxval=23, group="Trading Window")
endHour = input.int(4, "End Hour", minval=0, maxval=23, group="Trading Window")
// RSI Calculation
change = ta.change(rsiSourceInput)
up = ta.rma(math.max(change, 0), rsiLengthInput)
down = ta.rma(-math.min(change, 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
// Time Filter
inTradingWindow = (hour >= startHour and hour < endHour)
// Strategy Settings
buyLevel = 30
sellLevel = 70
scaleDistance = 1.0 // Distance in points to add to the position
takeProfitPoints = 1.5 // Profit target from average price
initialQty = 1 // Initial trade size
scalingQty = 1 // Additional trade size for scaling
// Trade Logic
if inTradingWindow
// Entry Logic
if rsi <= buyLevel and strategy.position_size == 0
strategy.entry("Buy", strategy.long, qty=initialQty)
if rsi >= sellLevel and strategy.position_size == 0
strategy.entry("Sell", strategy.short, qty=initialQty)
// Scaling Logic
if strategy.position_size > 0 and close <= strategy.position_avg_price - scaleDistance
strategy.entry("Scale Buy", strategy.long, qty=scalingQty)
if strategy.position_size < 0 and close >= strategy.position_avg_price + scaleDistance
strategy.entry("Scale Sell", strategy.short, qty=scalingQty)
// Exit Logic (based on average price)
if strategy.position_size > 0
strategy.exit("Take Profit Long", "Buy", limit=strategy.position_avg_price + takeProfitPoints)
if strategy.position_size < 0
strategy.exit("Take Profit Short", "Sell", limit=strategy.position_avg_price - takeProfitPoints)
// Plot RSI
plot(rsi, "RSI", color=color.blue, linewidth=1)
rsiUpperBand = hline(70, "RSI Upper Band", color=color.red)
rsiLowerBand = hline(30, "RSI Lower Band", color=color.green)
fill(rsiUpperBand, rsiLowerBand, color=color.new(color.gray, 90))