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

RSI ADX ATR EMA TP
Ngày tạo: 2024-12-20 14:24:34 sửa đổi lần cuối: 2024-12-20 14:24:34
sao chép: 0 Số nhấp chuột: 397
1
tập trung vào
1617
Người theo dõi

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

Tổng quan

Chiến lược này là một hệ thống chiến lược hỗn hợp kết hợp theo dõi xu hướng và giao dịch chấn động, để thực hiện giao dịch ổn định thông qua việc lọc nhiều chỉ số kỹ thuật và quản lý tiền nghiêm ngặt. Chiến lược sử dụng phương pháp dừng chân từng bước để khóa lợi nhuận, đồng thời thiết lập kiểm soát rút lui tối đa và kiểm soát 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ố cường độ xu hướng ADX làm điều kiện kích hoạt tín hiệu giao dịch chính và kết hợp với khối lượng giao dịch, bộ lọc đa dạng như 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 được đáp ứng đồng thời: khối lượng giao dịch lớn hơn 1 triệu, 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, ATR lớn hơn 2 đảm bảo đủ không gian dao động, giá giữ xu hướng tăng trên đường trung bình 200 ngày.
  2. Thiết kế dừng từng bước: dừng lần đầu tiên ở mức 15%, thanh toán 50% vị trí; dừng lần thứ hai ở mức 30%, thanh toán số vị trí còn lại. Thiết kế này có thể khóa một phần lợi nhuận sớm và không bỏ lỡ xu hướng lớn.
  3. Kiểm soát lỗ hổng: Thiết lập mức bảo vệ lỗ hổng 15%, đồng thời phá sản khi RSI thấp hơn 50 hoặc giá giảm xuống 200
  4. Quản lý rút tiền: theo dõi giá trị ròng của chiến lược trong thời gian thực, kích hoạt kiểm soát gió có hệ thống khi rút tiền vượt quá 30% và làm sạch tất cả các cổ phần.

Lợi thế chiến lược

  1. Nhiều chỉ báo kỹ thuật xác thực chéo để cải thiện độ tin cậy của tín hiệu giao dịch
  2. Thiết kế của step stops đáp ứng nhu cầu kiếm lợi nhuận ngắn hạn và nắm bắt xu hướng lớn
  3. Hệ thống kiểm soát rủi ro tốt, bao gồm dừng lỗ cá nhân và kiểm soát rủi ro có hệ thống
  4. Điều kiện giao dịch nghiêm ngặt, có thể lọc các tín hiệu giả
  5. Chiến lược logic rõ ràng, điều chỉnh các tham số theo tình hình thị trường

Rủi ro chiến lược

  1. Việc lọc nhiều chỉ số có thể khiến bạn bỏ lỡ một số cơ hội giao dịch
  2. Lệnh dừng lỗ có thể được kích hoạt thường xuyên trên thị trường biến động
  3. Cài đặt Stop Loss và Stop Stop 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 phụ thuộc vào các chỉ số kỹ thuật, có thể không phản ứng khi xảy ra sự bất ngờ cơ bản
  5. Cần một quy mô vốn lớn hơn để đáp ứng yêu cầu về khối lượng giao dịch

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

  1. Tiến hành các cơ chế dừng lỗ tự điều chỉnh theo biến động của thị trường
  2. Thêm mô-đun đánh giá 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 chu kỳ thích ứng
  4. Thêm tính toán 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 học máy

Tóm tắt

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

Mã nguồn chiến lược
/*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)