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

양적 전략에 따른 볼링거 밴드 동력 추세

저자:차오장, 날짜: 2024-11-12 15:53:44
태그:BBRSIEMASMASDSL

img

전반적인 설명

이 전략은 볼링거 밴드, RSI 지표 및 이동 평균을 기반으로 한 포괄적인 거래 시스템입니다. 볼링거 밴드 가격 변동 범위, RSI 과잉 구매/ 과잉 판매 수준 및 EMA 트렌드 필터링을 통해 잠재적 인 거래 기회를 식별합니다. 이 시스템은 길고 짧은 거래를 지원하며 자본을 보호하기 위해 여러 출구 메커니즘을 제공합니다.

전략 원칙

이 전략은 다음과 같은 핵심 요소에 기반합니다.

  1. 가격 변동 범위를 결정하기 위해 표준편차 1.8의 볼링거 대역을 사용합니다.
  2. 과잉 매수/ 과잉 판매 조건에 7주기 RSI를 사용합니다.
  3. 트렌드 필터로 선택적인 500주기 EMA
  4. 입국 조건:
    • 롱: 25 이하의 RSI와 낮은 볼린저 밴드 이하의 가격 파업
    • 짧은: RSI는 75 이상이며 가격 폭은 상부 볼린거 밴드 이상입니다.
  5. 출구 방식은 RSI 임계 또는 볼린거 밴드 역부진을 지원합니다.
  6. 선택적 인 백분율 기반 스톱 로스 보호

전략적 장점

  1. 여러 가지 기술 지표가 신호 신뢰성을 향상시키기 위해 함께 작동합니다.
  2. 유연한 매개 변수 설정은 다른 시장 조건에 조정 할 수 있습니다.
  3. 시장 기회를 최대한 활용하기 위해 양자 무역을 지원합니다
  4. 다양한 거래 스타일에 맞게 여러 출구 메커니즘을 제공합니다.
  5. 트렌드 필터링은 잘못된 신호를 효과적으로 감소시킵니다.
  6. 스톱 로스 메커니즘은 좋은 리스크 통제를 제공합니다

전략 위험

  1. 다양한 시장에서 자주 잘못된 신호를 생성 할 수 있습니다.
  2. 여러 가지 지표로 인해 신호가 지연될 수 있습니다.
  3. 고정된 RSI 문턱은 다른 시장 환경에 충분히 유연하지 않을 수 있습니다.
  4. 볼링거 밴드 매개 변수는 시장 변동성에 따라 조정해야 합니다.
  5. 스톱 손실 설정은 폭력 변동 동안 쉽게 작동 할 수 있습니다.

전략 최적화 방향

  1. 시장 변동성에 기초한 적응형 볼링거 밴드 곱셈을 도입
  2. 확인을 위해 부피 표시기를 추가합니다
  3. 특정 기간 동안 거래를 피하기 위해 시간 필터를 추가하는 것을 고려하십시오.
  4. 역동적인 RSI 임계 시스템을 개발
  5. 더 많은 트렌드 확인 지표를 통합
  6. 스톱 로스 메커니즘을 최적화, 동적 스톱 로스 사용 고려

요약

이 전략은 여러 가지 기술 지표를 통해 시장 기회를 포착하는 잘 설계된 양적 거래 전략입니다. 전략은 매우 구성 가능하며 다른 거래 필요에 적응 할 수 있습니다. 일부 내재적인 위험이 있지만 매개 변수 최적화 및 추가 보조 지표로 안정성과 신뢰성을 더욱 향상시킬 수 있습니다. 체계적인 거래 방법을 찾는 투자자에게는 고려할 가치가있는 전략 프레임워크입니다.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-11 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Bollinger Bands Scalp Pro", overlay=true)

// Inputs for the strategy
length = input(20, title="Bollinger Band Length")
src = input(close, title="Source")
mult = input(1.8, title="Bollinger Band Multiplier")
rsiLength = input(7, title="RSI Length")
rsiOverbought = input(75, title="RSI Overbought Level")
rsiOversold = input(25, title="RSI Oversold Level")

// Custom RSI exit points
rsiExitLong = input(75, title="RSI Exit for Long (Overbought)")
rsiExitShort = input(25, title="RSI Exit for Short (Oversold)")

// Moving Average Inputs
emaLength = input(500, title="EMA Length")
enableEMAFilter = input.bool(true, title="Enable EMA Filter")

// Exit method: Choose between 'RSI' and 'Bollinger Bands'
exitMethod = input.string("RSI", title="Exit Method", options=["RSI", "Bollinger Bands"])

// Enable/Disable Long and Short trades
enableLong = input.bool(true, title="Enable Long Trades")
enableShort = input.bool(false, title="Enable Short Trades")

// Enable/Disable Stop Loss
enableStopLoss = input.bool(false, title="Enable Stop Loss")
stopLossPercent = input.float(1.0, title="Stop Loss Percentage (%)", minval=0.1) / 100

// Bollinger Bands calculation
basis = ta.sma(src, length)
dev = mult * ta.stdev(src, length)
upperBB = basis + dev
lowerBB = basis - dev

// RSI calculation
rsi = ta.rsi(src, rsiLength)

// 200 EMA to filter trades (calculated but only used if enabled)
ema200 = ta.ema(src, emaLength)

// Long condition: RSI below oversold, price closes below the lower Bollinger Band, and optionally price is above the 200 EMA
longCondition = enableLong and (rsi < rsiOversold) and (close < lowerBB) and (not enableEMAFilter or close > ema200)
if (longCondition)
    strategy.entry("Long", strategy.long)

// Short condition: RSI above overbought, price closes above the upper Bollinger Band, and optionally price is below the 200 EMA
shortCondition = enableShort and (rsi > rsiOverbought) and (close > upperBB) and (not enableEMAFilter or close < ema200)
if (shortCondition)
    strategy.entry("Short", strategy.short)

// Stop Loss setup
if (enableStopLoss)
    strategy.exit("Long Exit", "Long", stop = strategy.position_avg_price * (1 - stopLossPercent))
    strategy.exit("Short Exit", "Short", stop = strategy.position_avg_price * (1 + stopLossPercent))

// Exit conditions based on the user's choice of exit method
if (exitMethod == "RSI")
    // Exit based on RSI
    exitLongCondition = rsi >= rsiExitLong
    if (exitLongCondition)
        strategy.close("Long")
    
    exitShortCondition = rsi <= rsiExitShort
    if (exitShortCondition)
        strategy.close("Short")
else if (exitMethod == "Bollinger Bands")
    // Exit based on Bollinger Bands
    exitLongConditionBB = close >= upperBB
    if (exitLongConditionBB)
        strategy.close("Long")
    
    exitShortConditionBB = close <= lowerBB
    if (exitShortConditionBB)
        strategy.close("Short")







관련

더 많은