리소스 로딩... 로딩...

RSI 모멘텀 및 ADX 트렌드 강도에 기반한 자본 관리 시스템

저자:차오장, 날짜: 2024-12-20 14:24:34
태그:RSIADXATREMATP

img

전반적인 설명

이 전략은 트렌드 추적 및 스윙 트레이딩을 결합한 하이브리드 시스템으로, 여러 기술적 지표 검진 및 엄격한 자본 관리를 통해 안정적인 거래를 달성합니다. 이 전략은 수익을 잠금하기 위해 단계적 인 수익 접근 방식을 채택하고 수익을 보장하면서 위험을 관리하기 위해 최대 마감 통제를 설정합니다. 시스템은 거래 효과를 보장하기 위해 볼륨, ATR 및 EMA 여러 필터와 결합하여 주요 거래 신호 트리거로 RSI 모멘텀 지표와 ADX 트렌드 강도 지표를 사용합니다.

전략 원칙

전략의 핵심 논리는 다음의 핵심 요소들을 포함합니다.

  1. 입시 조건은 동시에 만족해야 합니다: 거래 부피 1M 이상, ADX 25 이상 명확한 추세를 나타냅니다, RSI 60 이상 강한 추진력을 나타냅니다, ATR 2 이상 충분한 변동 범위를 보장합니다. 200 일 이동 평균 이상의 가격이 상승 추세를 유지합니다.
  2. 단계적 취득 설계: 15%의 첫 번째 취득, 50%의 포지션을 종료; 30%의 두 번째 취득, 나머지 포지션을 종료.이 디자인은 부분적인 이익을 일찍 잠금하고 큰 추세를 놓치지 않습니다.
  3. 스톱 로스 제어: 15%의 스톱 로스 포지션은 자본을 보호하고, 또한 RSI가 50 이하로 떨어지거나 가격이 200 MA 이하로 떨어지면 종료됩니다.
  4. 유출 관리: 전략 자금의 실시간 추적, 시스템 리스크 통제를 활성화하고 유출이 30%를 초과할 때 모든 포지션을 클리어합니다.

전략적 장점

  1. 여러 가지 기술 지표의 교차 검증은 거래 신호의 신뢰성을 향상시킵니다.
  2. 단계적 취득 설계는 단기 수익을 균형 잡고 주요 추세를 포착
  3. 개별 주식 스톱 로스 및 시스템 리스크 통제를 포함한 완전한 리스크 제어 시스템
  4. 엄격 한 거래 조건 은 거짓 신호 를 효과적으로 필터 합니다
  5. 명확한 전략 논리, 시장 조건에 따라 매개 변수를 쉽게 조정

전략 위험

  1. 다중 지표 필터링은 일부 거래 기회를 놓칠 수 있습니다.
  2. 오시일레이션 시장에서 빈번한 스톱 로스가 발생할 수 있습니다.
  3. 일정한 비율의 스톱 로스 및 이윤 취득 설정은 모든 시장 환경에 적합하지 않을 수 있습니다.
  4. 전략은 기술적 지표에 의존하고 있습니다. 근본적인 갑작스러운 사건에 대한 반응이 충분하지 않을 수 있습니다.
  5. 거래량 요구사항을 충족시키기 위해 더 큰 자본 규모가 필요합니다.

전략 최적화 방향

  1. 시장 변동성에 따라 동적으로 조정되는 적응적 인 스톱 로스 및 수익 취득 메커니즘을 도입하십시오.
  2. 다른 시장 조건에서 다른 매개 변수 설정을 사용하여 시장 환경 판단 모듈을 추가합니다.
  3. ADX 계산 방법을 최적화, 적응 기간을 사용하는 것을 고려
  4. 거래 비용 고려 포함, 위치 관리 시스템을 최적화
  5. 기계 학습 기반 신호 필터링 메커니즘 개발

요약

이 전략은 여러 기술적 지표와 엄격한 자본 관리를 통해 안정적인 거래를 달성하는 포괄적 인 거래 시스템입니다. 전략의 핵심 장점은 완전한 리스크 제어 시스템과 단계적 인 이익 취득 메커니즘에 있습니다. 그러나 실질적인 적용에서 시장 조건에 따라 적절한 파라미터 조정에주의를 기울여야합니다. 전략의 추가 최적화 공간은 주로 파라미터 동적 적응 및 신호 필터링 메커니즘 개선에 있습니다.


/*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)


관련

더 많은