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

ATR 변동성 전략과 함께 다중 지표 동적 적응 위치 사이징

저자:차오장, 날짜: 2024-11-12 11:41:30
태그:ATREMARSISMA

img

전반적인 설명

이 전략은 다중 기술 지표를 동적 리스크 관리와 결합 한 양적 거래 시스템입니다. EMA 트렌드 다음, ATR 변동성, RSI 과잉 구매 / 과잉 판매 조건 및 촛불 패턴 인식을 통합하여 적응형 위치 사이즈 및 동적 스톱 로스 메커니즘을 통해 균형 잡힌 수익을 달성합니다.

전략 원칙

이 전략은 다음을 통해 거래를 실행합니다.

  1. 트렌드 방향에 대해 5주기 및 10주기 EMA 크로스오버를 사용하는 것
  2. 과잉 구매/ 과잉 판매 구역의 RSI 지표
  3. 동적 스톱 로스 및 포지션 사이즈링을 위한 ATR 표시기
  4. 출입 신호로서 촛불 패턴 (물망, 망치, 내리는 별)
  5. ATR 기반의 동적 미끄러짐 보상
  6. 신호 필터링 용량 확인

전략적 장점

  1. 복수 신호의 교차 검증으로 신뢰성이 향상됩니다.
  2. 역동적 리스크 관리 시장 변동성에 적응
  3. 부분적인 수익 전략은 이윤에 고정됩니다.
  4. 트래일링 스톱 로스는 축적된 이익을 보호합니다.
  5. 일일 손실 제한 위험 노출 통제
  6. 동적 미끄러짐 보상

전략 위험

  1. 여러 표시기가 신호 지연을 일으킬 수 있습니다.
  2. 빈번 한 거래 는 높은 비용 을 초래 할 수 있다
  3. 스톱 손실은 다양한 시장에서 자주 발생 할 수 있습니다.
  4. 촛불 패턴 인식의 주관적 요인
  5. 매개 변수 최적화 위험 과잉 조정

최적화 방향

  1. 동적 매개 변수 조정을 위한 시장주기 탐지 도입
  2. 잘못된 신호를 줄이기 위해 트렌드 강도 필터를 추가
  3. 더 나은 자본 효율성을 위해 위치 사이징 알고리즘을 최적화
  4. 추가 시장 감정 지표를 포함
  5. 적응적 매개 변수 최적화 시스템을 개발

요약

이것은 여러 기술적 지표를 결합한 정교한 전략 시스템으로, 동적 리스크 관리 및 여러 신호 검증을 통해 거래 안정성을 향상시킵니다. 핵심 강점은 적응력과 포괄적 인 리스크 제어 시스템, 그러나 라이브 거래에서 철저한 검증과 지속적인 최적화를 필요로합니다.


/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-31 23:59:59
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Optimized Scalping with High Risk-Reward", overlay=true)

// Input for EMA periods
shortEMA_length = input(5, title="Short EMA Length")
longEMA_length = input(10, title="Long EMA Length")

// ATR for dynamic stop-loss
atrPeriod = input(14, title="ATR Period")
atrMultiplier = input(1.5, title="ATR Multiplier for Stop Loss")

// Calculate EMAs
shortEMA = ta.ema(close, shortEMA_length)
longEMA = ta.ema(close, longEMA_length)

// ATR calculation for dynamic stop loss
atr = ta.atr(atrPeriod)

// RSI for overbought/oversold conditions
rsi = ta.rsi(close, 14)

// Plot EMAs
plot(shortEMA, color=color.blue, title="Short EMA")
plot(longEMA, color=color.red, title="Long EMA")

// Dynamic Slippage based on ATR
dynamic_slippage = math.max(5, atr * 0.5)

// Candlestick pattern recognition
bullish_engulfing = close[1] < open[1] and close > open and close > open[1] and close > close[1]
hammer = close > open and (high - close) / (high - low) > 0.6 and (open - low) / (high - low) < 0.2
bearish_engulfing = open[1] > close[1] and open > close and open > open[1] and close < close[1]
shooting_star = close < open and (high - open) / (high - low) > 0.6 and (close - low) / (high - low) < 0.2

// Enhanced conditions with volume and RSI check
buy_condition = (bullish_engulfing or hammer) and close > shortEMA and shortEMA > longEMA and volume > ta.sma(volume, 20) and rsi < 70
sell_condition = (bearish_engulfing or shooting_star) and close < shortEMA and shortEMA < longEMA and volume > ta.sma(volume, 20) and rsi > 30

// Dynamic ATR multiplier based on recent volatility
volatility = atr
adaptiveMultiplier = atrMultiplier + (volatility - ta.sma(volatility, 50)) / ta.sma(volatility, 50) * 0.5

// Execute buy trades with slippage consideration
if (buy_condition)
    strategy.entry("Buy", strategy.long)
    stop_loss_buy = strategy.position_avg_price - atr * adaptiveMultiplier - dynamic_slippage
    take_profit_buy = strategy.position_avg_price + atr * adaptiveMultiplier * 3 + dynamic_slippage
    strategy.exit("Exit Buy", "Buy", stop=stop_loss_buy, limit=take_profit_buy)

// Execute sell trades with slippage consideration
if (sell_condition)
    strategy.entry("Sell", strategy.short)
    stop_loss_sell = strategy.position_avg_price + atr * adaptiveMultiplier + dynamic_slippage
    take_profit_sell = strategy.position_avg_price - atr * adaptiveMultiplier * 3 - dynamic_slippage
    strategy.exit("Exit Sell", "Sell", stop=stop_loss_sell, limit=take_profit_sell)

// Risk Management
maxLossPerTrade = input.float(0.01, title="Max Loss Per Trade (%)", minval=0.01, maxval=1, step=0.01)  // 1% max loss per trade
dailyLossLimit = input.float(0.03, title="Daily Loss Limit (%)", minval=0.01, maxval=1, step=0.01) // 3% daily loss limit

maxLossAmount_buy = strategy.position_avg_price * maxLossPerTrade
maxLossAmount_sell = strategy.position_avg_price * maxLossPerTrade

if (strategy.position_size > 0)
    strategy.exit("Max Loss Buy", "Buy", stop=strategy.position_avg_price - maxLossAmount_buy - dynamic_slippage)

if (strategy.position_size < 0)
    strategy.exit("Max Loss Sell", "Sell", stop=strategy.position_avg_price + maxLossAmount_sell + dynamic_slippage)

// Daily loss limit logic
var float dailyLoss = 0.0
if (dayofweek != dayofweek[1])
    dailyLoss := 0.0  // Reset daily loss tracker at the start of a new day

if (strategy.closedtrades > 0)
    dailyLoss := dailyLoss + strategy.closedtrades.profit(strategy.closedtrades - 1)

if (dailyLoss < -strategy.initial_capital * dailyLossLimit)
    strategy.close_all("Daily Loss Limit Hit")

// Breakeven stop after a certain profit with a delay
if (strategy.position_size > 0 and close > strategy.position_avg_price + atr * 1.5 and bar_index > strategy.opentrades.entry_bar_index(0) + 5)
    strategy.exit("Breakeven Buy", from_entry="Buy", stop=strategy.position_avg_price)

if (strategy.position_size < 0 and close < strategy.position_avg_price - atr * 1.5 and bar_index > strategy.opentrades.entry_bar_index(0) + 5)
    strategy.exit("Breakeven Sell", from_entry="Sell", stop=strategy.position_avg_price)

// Partial Profit Taking
if (strategy.position_size > 0 and close > strategy.position_avg_price + atr * 1.5)
    strategy.close("Partial Close Buy", qty_percent=50)  // Use strategy.close for partial closure at market price

if (strategy.position_size < 0 and close < strategy.position_avg_price - atr * 1.5)
    strategy.close("Partial Close Sell", qty_percent=50) // Use strategy.close for partial closure at market price

// Trailing Stop with ATR type
if (strategy.position_size > 0)
    strategy.exit("Trailing Stop Buy", from_entry="Buy", trail_offset=atr * 1.5, trail_price=strategy.position_avg_price)

if (strategy.position_size < 0)
    strategy.exit("Trailing Stop Sell", from_entry="Sell", trail_offset=atr * 1.5, trail_price=strategy.position_avg_price)


관련

더 많은