Tài nguyên đang được tải lên... tải...

Hệ thống quản lý vốn dựa trên sức mạnh xu hướng RSI và ADX

Tác giả:ChaoZhang, Ngày: 2024-12-20 14:24:34
Tags:RSIADXATREMATP

img

Tổng quan

Chiến lược này là một hệ thống lai kết hợp theo xu hướng và giao dịch dao động, đạt được giao dịch ổn định thông qua sàng lọc nhiều chỉ số kỹ thuật và quản lý vốn nghiêm ngặt. Chiến lược này áp dụng cách tiếp cận lấy lợi nhuận theo từng bước để khóa lợi nhuận trong khi thiết lập kiểm soát rút tối đa để quản lý rủi ro trong khi đảm bảo lợi nhuận. Hệ thống sử dụng chỉ số động lực RSI và chỉ số sức mạnh xu hướng ADX như là các kích hoạt tín hiệu giao dịch chính, kết hợp với các bộ lọc khối lượng, ATR và EMA để đảm bảo hiệu quả giao dịch.

Nguyên tắc chiến lược

Logic cốt lõi của chiến lược bao gồm các yếu tố chính sau:

  1. Các điều kiện nhập cảnh đòi hỏi sự hài lòng đồng thời: khối lượng giao dịch lớn hơn 1M, ADX lớn hơn 25 cho thấy xu hướng rõ ràng, RSI lớn hơn 60 cho thấy động lực mạnh mẽ, ATR lớn hơn 2 đảm bảo phạm vi biến động đủ, giá trên trung bình động 200 ngày duy trì xu hướng tăng.
  2. Thiết kế lấy lợi nhuận theo từng bước: đầu tiên lấy lợi nhuận ở mức 15%, đóng 50% vị trí; lấy lợi nhuận thứ hai ở mức 30%, đóng lại vị trí còn lại.
  3. Kiểm soát dừng lỗ: Vị trí dừng lỗ 15% bảo vệ vốn, đồng thời thoát khi RSI giảm xuống dưới 50 hoặc giá phá vỡ dưới 200 MA.
  4. Quản lý rút vốn: theo dõi theo thời gian thực về vốn chiến lược, kích hoạt kiểm soát rủi ro hệ thống và thanh toán hết các vị trí khi rút vốn vượt quá 30%.

Ưu điểm chiến lược

  1. Xác nhận chéo nhiều chỉ số kỹ thuật cải thiện độ tin cậy của tín hiệu giao dịch
  2. Thiết kế lấy lợi nhuận theo từng bước cân bằng lợi nhuận ngắn hạn và nắm bắt các xu hướng chính
  3. Hệ thống kiểm soát rủi ro hoàn chỉnh, bao gồm việc ngăn chặn lỗ cổ phiếu cá nhân và kiểm soát rủi ro hệ thống
  4. Điều kiện giao dịch nghiêm ngặt lọc hiệu quả các tín hiệu sai
  5. Logic chiến lược rõ ràng, dễ dàng điều chỉnh các tham số dựa trên điều kiện thị trường

Rủi ro chiến lược

  1. Việc lọc nhiều chỉ số có thể bỏ lỡ một số cơ hội giao dịch
  2. Các lệnh dừng lỗ thường xuyên có thể được kích hoạt trong các thị trường dao động
  3. Các thiết lập stop-loss và take-profit theo tỷ lệ cố định có thể không phù hợp với tất cả các môi trường thị trường
  4. Chiến lược dựa trên các chỉ số kỹ thuật, có thể không đủ phản ứng với các sự kiện đột ngột cơ bản
  5. Cần quy mô vốn lớn hơn để đáp ứng yêu cầu khối lượng giao dịch

Hướng dẫn tối ưu hóa chiến lược

  1. Thiết lập các cơ chế dừng lỗ và lấy lợi nhuận thích nghi, điều chỉnh năng động dựa trên biến động thị trường
  2. Thêm mô-đun đánh giá môi trường thị trường, sử dụng các thiết lập tham số khác nhau trong các điều kiện thị trường khác nhau
  3. Tối ưu hóa phương pháp tính toán ADX, xem xét sử dụng thời gian thích nghi
  4. Bao gồm xem xét chi phí giao dịch, tối ưu hóa hệ thống quản lý vị trí
  5. Phát triển cơ chế lọc tín hiệu dựa trên máy học

Tóm lại

Chiến lược này là một hệ thống giao dịch toàn diện đạt được giao dịch ổn định thông qua nhiều chỉ số kỹ thuật và quản lý vốn nghiêm ngặt. Những lợi thế cốt lõi của chiến lược nằm trong hệ thống kiểm soát rủi ro hoàn chỉnh và cơ chế lấy lợi nhuận theo từng bước, nhưng cần phải chú ý đến việc điều chỉnh các tham số kịp thời dựa trên điều kiện thị trường trong ứng dụng thực tế. Không gian tối ưu hóa hơn nữa của chiến lược chủ yếu nằm trong việc thích nghi năng động tham số và cải thiện cơ chế lọc tín hiệu.


/*backtest
start: 2023-12-20 00:00:00
end: 2024-12-18 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="Swing Strategy (<30% DD)", shorttitle="SwingStratDD", overlay=true)

//-----------------------------------------------------
// Example Indicators and Logic
//-----------------------------------------------------
emaLen   = input.int(200, "EMA Length", minval=1)
emaValue = ta.ema(close, emaLen)

plot(emaValue, color=color.yellow, linewidth=2, title="EMA 200")


//-----------------------------------------------------
// User Inputs
//-----------------------------------------------------
adxLen           = input.int(14,  "ADX Length",      minval=1)
rsiLen           = input.int(14,  "RSI Length",      minval=1)
atrLen           = input.int(14,  "ATR Length",      minval=1)

rsiBuyThresh     = input.float(60, "RSI Buy Threshold",     minval=1, maxval=100)
adxThresh        = input.float(25, "ADX Threshold (Trend)", minval=1, maxval=100)
minVolume        = input.float(1e6,"Minimum Volume",         minval=1)
minATR           = input.float(2,  "Minimum ATR(14)",        minval=0.1, step=0.1)

stopLossPerc     = input.float(15, "Stop-Loss %",            minval=0.1, step=0.1)
// We’ll do two partial take-profit levels to aim for consistent cashflow:
takeProfit1Perc  = input.float(15, "Take-Profit1 %",         minval=0.1, step=0.1)
takeProfit2Perc  = input.float(30, "Take-Profit2 %",         minval=0.1, step=0.1)

ddLimit          = input.float(30, "Max Drawdown %",         minval=0.1, step=0.1)

//-----------------------------------------------------
// Indicators
//-----------------------------------------------------

rsiValue = ta.rsi(close, rsiLen)
atrValue = ta.atr(atrLen)

//--- Fully Manual ADX Calculation ---
upMove      = high - high[1]
downMove    = low[1] - low
plusDM      = (upMove > downMove and upMove > 0) ? upMove : 0.0
minusDM     = (downMove > upMove and downMove > 0) ? downMove : 0.0
smPlusDM    = ta.rma(plusDM, adxLen)
smMinusDM   = ta.rma(minusDM, adxLen)
smTR        = ta.rma(ta.tr, adxLen)
plusDI      = (smPlusDM / smTR) * 100
minusDI     = (smMinusDM / smTR) * 100
dx          = math.abs(plusDI - minusDI) / (plusDI + minusDI) * 100
adxValue    = ta.rma(dx, adxLen)

//-----------------------------------------------------
// Screener-Like Conditions (Technical Only)
//-----------------------------------------------------
volumeCondition   = volume > minVolume
adxCondition      = adxValue > adxThresh
rsiCondition      = rsiValue > rsiBuyThresh
atrCondition      = atrValue > minATR
aboveEmaCondition = close > emaValue

longCondition = volumeCondition and adxCondition and rsiCondition and atrCondition and aboveEmaCondition

//-----------------------------------------------------
// Strategy Entry / Exit Logic
//-----------------------------------------------------
var bool inTrade = false

// Entry
if longCondition and not inTrade
    strategy.entry("Long", strategy.long)

// Basic Exit Condition: RSI < 50 or Price < EMA
exitCondition = (rsiValue < 50) or (close < emaValue)
if inTrade and exitCondition
    strategy.close("Long")

// Update inTrade status
inTrade := strategy.position_size > 0

//-----------------------------------------------------
// Multi-Level Stop-Loss & Partial Profits
//-----------------------------------------------------
if inTrade
    float entryPrice = strategy.position_avg_price

    // Stop-Loss
    float stopPrice     = entryPrice * (1 - stopLossPerc / 100)

    // Two partial take-profit levels
    float tp1Price      = entryPrice * (1 + takeProfit1Perc / 100)
    float tp2Price      = entryPrice * (1 + takeProfit2Perc / 100)

    // Example approach: exit half at TP1, half at TP2
    strategy.exit("TP1/SL",     from_entry="Long", stop=stopPrice,    limit=tp1Price, qty_percent=50)
    strategy.exit("TP2",        from_entry="Long", limit=tp2Price,    qty_percent=50)

//-----------------------------------------------------
// Dynamic Drawdown Handling
//-----------------------------------------------------
var float peakEquity = strategy.equity
peakEquity := math.max(peakEquity, strategy.equity)

currentDrawdownPerc = (peakEquity - strategy.equity) / peakEquity * 100
if currentDrawdownPerc > ddLimit
    strategy.close_all("Max Drawdown Exceeded")

//-----------------------------------------------------
// Plotting
//-----------------------------------------------------
plot(emaValue, title="EMA 200", color=color.yellow, linewidth=2)
plotchar(rsiValue, title="RSI", char='●', location=location.bottom, color=color.new(color.teal, 50))
plot(adxValue, title="Manual ADX", color=color.orange)


Có liên quan

Thêm nữa