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

볼링거 밴드 및 ATR를 기반으로 한 다단계 지능형 동적 트레일링 스톱 전략

저자:차오장, 날짜: 2024-12-11 14:52:24
태그:BBATRMASMAEMASMMAWMAVWMASD

img

전반적인 설명

이 전략은 볼링거 밴드 및 ATR 지표에 기반한 지능형 거래 시스템으로, 다단계 수익 취득 및 스톱 로스 메커니즘을 통합합니다. 이 전략은 주로 낮은 볼링거 밴드 근처의 반전 신호를 식별하여 긴 포지션을 입력하고 동적 트레일링 스톱을 사용하여 위험을 관리합니다. 이 시스템은 20%의 수익 목표와 12%의 스톱 로스 레벨로 설계되었으며, 트렌드가 충분히 발전 할 수있는 공간을 허용하면서 수익을 보호하기 위해 ATR 기반의 동적 트레일링 스톱을 통합합니다.

전략 원칙

핵심 논리는 몇 가지 핵심 요소를 포함합니다.

  1. 진입 조건: 아래 볼링거 밴드 (Bollinger Band) 에 닿는 붉은 촛불을 따라 녹색 촛불이 필요하며, 일반적으로 잠재적 인 반전 신호를 나타냅니다.
  2. 이동 평균 선택: 기본 20 기간 SMA와 함께 여러 유형 (SMA, EMA, SMMA, WMA, VWMA) 을 지원합니다.
  3. 볼링거 밴드 매개 변수: 대역폭에 대해 1.5 표준편차를 사용합니다. 전통적인 2 표준편차보다 보수적입니다.
  4. 이윤 취득 메커니즘: 초기 20%의 이윤 목표를 설정합니다.
  5. 스톱 로스 메커니즘: 자본 보호를 위해 12%의 고정 스톱 로스를 구현합니다.
  6. 동적 후속 정지:
    • 이윤 목표에 도달 한 후 ATR 후속 정지 기능을 활성화합니다.
    • ATR 동적 트레일링 스톱이 시작됩니다.
    • 동적으로 후속 정지 거리를 조정하기 위해 ATR 곱셈을 사용합니다

전략적 장점

  1. 다단계 위험 관리:
    • 고정 스톱 로스는 자본을 보호합니다.
    • 이윤에 대한 동적 트레일링 스톱 잠금
    • 상부 볼린거 밴드 (upper Bollinger Band) 를 트리거한 동적 스톱 (dynamic stop) 은 추가적인 보호를 제공합니다.
  2. 유연한 이동 평균 선택은 다른 시장 조건에 적응 할 수 있습니다.
  3. ATR 기반의 동적 후속 정류는 시장 변동성에 따라 자동으로 조정되며, 조기 출퇴를 방지합니다.
  4. 엔트리 신호는 가격 패턴과 기술 지표를 결합하여 신호 신뢰성을 향상시킵니다.
  5. 실제 거래 조건에 더 가까운 위치 관리 및 거래 비용 설정을 지원합니다.

전략 위험

  1. 급속도로 변동하는 시장은 거래 비용을 증가시키는 빈번한 거래로 이어질 수 있습니다.
  2. 높은 변동성 시장에서 12% 고정 스톱 로스는 너무 좁을 수 있습니다.
  3. 볼링거 밴드 신호는 트렌딩 시장에서 잘못된 신호를 생성 할 수 있습니다.
  4. ATR 트레일링 스톱은 심각한 변동성 중 더 큰 드래운드를 초래할 수 있습니다. 완화 조치:
  • 장시간 사용 (30분~1시간)
  • 특정 기기 특성에 따라 스톱 로스 비율을 조정합니다
  • 잘못된 신호를 줄이기 위해 트렌드 필터를 추가하는 것을 고려하십시오.
  • 다른 시장 환경에 대한 ATR 곱셈을 동적으로 조정합니다.

전략 최적화 방향

  1. 입력 최적화:
  • 볼륨 확인 메커니즘 추가
  • 신호 필터링을 위한 트렌드 강도 지표를 포함
  • 확인을 위해 동력 지표를 추가하는 것을 고려하십시오.
  1. 스톱 로스 최적화:
  • 고정 스톱 로스를 ATR 기반의 동적 스톱으로 변환
  • 적응식 스톱 로스 알고리즘 개발
  • 변동성에 따라 정지 거리를 동적으로 조정합니다.
  1. 이동 평균 최적화:
  • 다른 기간 조합을 테스트
  • 연구 적응 기간 방법
  • 이동 평균 대신 가격 액션을 사용하는 것을 고려하십시오.
  1. 위치 관리 최적화:
  • 변동성 기반의 포지션 사이즈 시스템 개발
  • 확장된 입출입 메커니즘을 구현
  • 리스크 노출 제어 추가

요약

이 전략은 볼링거 밴드 및 ATR 지표를 사용하여 다단계 거래 시스템을 구축하고, 엔트리, 스톱 로스 및 수익 취득을 위한 동적 관리 방법을 사용한다. 이 전략의 강점은 포괄적인 리스크 제어 시스템과 시장 변동성에 적응하는 능력에 있다. 제안된 최적화 방향을 통해 이 전략은 상당한 개선 여지가 있다. 특히 더 큰 시간 프레임에서 사용하기에 적합하며 양질의 자산을 보유한 투자자들이 입출 시기를 최적화하는 데 도움을 줄 수 있다.


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

//@version=5
strategy("Demo GPT - Bollinger Bands Strategy with Tightened Trailing Stops", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_value=0.1, slippage=3)

// Input settings
length = input.int(20, minval=1)
maType = input.string("SMA", "Basis MA Type", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
src = input(close, title="Source")
mult = 1.5 // Standard deviation multiplier set to 1.5
offset = input.int(0, "Offset", minval=-500, maxval=500)
atrMultiplier = input.float(1.0, title="ATR Multiplier for Trailing Stop", minval=0.1) // ATR multiplier for trailing stop

// Time range filters
start_date = input(timestamp("2018-01-01 00:00"), title="Start Date")
end_date = input(timestamp("2069-12-31 23:59"), title="End Date")
in_date_range = true

// Moving average function
ma(source, length, _type) =>
    switch _type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

// Calculate Bollinger Bands
basis = ma(src, length, maType)
dev = mult * ta.stdev(src, length)
upper = basis + dev
lower = basis - dev

// ATR Calculation
atr = ta.atr(length) // Use ATR for trailing stop adjustments

// Plotting
plot(basis, "Basis", color=#2962FF, offset=offset)
p1 = plot(upper, "Upper", color=#F23645, offset=offset)
p2 = plot(lower, "Lower", color=#089981, offset=offset)
fill(p1, p2, title="Background", color=color.rgb(33, 150, 243, 95))

// Candle color detection
isGreen = close > open
isRed = close < open

// Flags for entry and exit conditions
var bool redTouchedLower = false
var float targetPrice = na
var float stopLossPrice = na
var float trailingStopPrice = na

if in_date_range
    // Entry Logic: First green candle after a red candle touches the lower band
    if close < lower and isRed
        redTouchedLower := true
    if redTouchedLower and isGreen
        strategy.entry("Long", strategy.long)
        targetPrice := close * 1.2       // Set the target price to 20% above the entry price
        stopLossPrice := close * 0.88   // Set the stop loss to 12% below the entry price
        trailingStopPrice := na         // Reset trailing stop on entry
        redTouchedLower := false

    // Exit Logic: Trailing stop after 20% price increase
    if strategy.position_size > 0 and not na(targetPrice) and close >= targetPrice
        if na(trailingStopPrice)
            trailingStopPrice := close - atr * atrMultiplier // Initialize trailing stop using ATR
        trailingStopPrice := math.max(trailingStopPrice, close - atr * atrMultiplier) // Tighten dynamically based on ATR

    // Exit if the price falls below the trailing stop after 20% increase
    if strategy.position_size > 0 and not na(trailingStopPrice) and close < trailingStopPrice
        strategy.close("Long", comment="Trailing Stop After 20% Increase")
        targetPrice := na // Reset the target price
        stopLossPrice := na // Reset the stop loss price
        trailingStopPrice := na // Reset trailing stop

    // Stop Loss: Exit if the price drops 12% below the entry price
    if strategy.position_size > 0 and not na(stopLossPrice) and close <= stopLossPrice
        strategy.close("Long", comment="Stop Loss Triggered")
        targetPrice := na // Reset the target price
        stopLossPrice := na // Reset the stop loss price
        trailingStopPrice := na // Reset trailing stop

    // Trailing Stop: Activate after touching the upper band
    if strategy.position_size > 0 and close >= upper and isGreen
        if na(trailingStopPrice)
            trailingStopPrice := close - atr * atrMultiplier // Initialize trailing stop using ATR
        trailingStopPrice := math.max(trailingStopPrice, close - atr * atrMultiplier) // Tighten dynamically based on ATR

    // Exit if the price falls below the trailing stop
    if strategy.position_size > 0 and not na(trailingStopPrice) and close < trailingStopPrice
        strategy.close("Long", comment="Trailing Stop Triggered")
        trailingStopPrice := na // Reset trailing stop
        targetPrice := na // Reset the target price
        stopLossPrice := na // Reset the stop loss price


관련

더 많은