다중 레벨 볼린저 밴드 추세 추종 및 반전 거래 전략

布林带 BB SMA 趋势跟踪 反转交易 移动止盈 技术分析 量化交易
생성 날짜: 2025-04-01 10:16:29 마지막으로 수정됨: 2025-04-01 10:16:29
복사: 3 클릭수: 398
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

다중 레벨 볼린저 밴드 추세 추종 및 반전 거래 전략 다중 레벨 볼린저 밴드 추세 추종 및 반전 거래 전략

개요

다단계 브린지트 트렌드 추적 및 역전 거래 전략은 브린지트 (Bollinger Bands) 지표에 기반한 통합 거래 시스템으로, 트렌드 추적 및 역전 거래의 특성을 교묘하게 결합하여 가격과 브린지트 (Bollinger Bands) 의 하향 상호 작용을 통해 시장 기회를 포착합니다. 시스템은 지역, 평평선 통과 및 이동 스톱을 포함한 3 층의 출구 메커니즘을 설계하여 이윤을 최대화하면서 위험을 효과적으로 제어 할 수 있습니다. 이 전략은 다양한 시장 환경과 시간대에 적합하며 특히 큰 변동이있는 금융 시장에 적합합니다.

전략 원칙

이 전략의 핵심 원칙은 부린대를 가격 변동의 동적인 참조 영역으로 이용하고, 정교하게 설계된 다단계 입출장 규칙을 결합하는 것이다.

입점 논리는 두 부분으로 나다.

  1. 여러 조건: 가격이 브린을 가로질러 상향으로 하향 레일 ((Crossover Lower Band), 또는 가격이 하향 레일 아래에 닿은 후 반발 (즉, 최저 가격이 하향 레일보다 낮지만 종결 가격이 하향 레일보다 높다) 할 때 더 많이 입장하십시오.
  2. 공백 조건: 가격이 아래로 브린 띠를 가로질러 궤도에 올랐을 때 (Crossunder Upper Band), 또는 가격이 궤도 위를 건드린 후 되돌아 올 때 (즉, 최고 가격이 궤도 위보다 높지만 종결 가격이 궤도 위보다 낮다) 진입 공백.

출장 논리는 세 층의 보호 장치를 설계했습니다.

  1. 1층 ((지구 판단): 진입 후 X근 K선에서 시작하여, 상장 가격이 부린带 특정 영역으로 들어갔을 때 출전한다. 구체적으로, 더 많이 할 때, 가격이 하차선과 평균선 사이의 상위 13 영역으로 떨어지면 평점; 공백할 때, 가격이 상차선과 평균선 사이의 상위 13 영역으로 올라가면 평점이다.
  2. 2층 ((평균선 횡단): 출장 후 Y근 K선에서 시작하여, 종전 가격이 20기 평균선 ((MA20) 을 횡단하면 평점이다.
  3. 세 번째 층 ((모바일 스톱): 가격이 브린의 다른 가장자리를 돌파했을 때 모바일 스톱 메커니즘을 시작하며, 수익이 Z%를 철회하면 자동으로 출전하여 수익의 대부분을 잠금합니다.

브린 밴드 파라미터는 평균선 주기 (기본 20) 와 표준 차이의 배수 (기본 2.0) 를 포함하여 유연하게 조정할 수 있다. 출전 설정은 X (기본 3), Y (기본 10), 이동 스톱 리드백 비율 Z (기본 30%) 을 포함하여 시장 특성에 따라 조정할 수 있다.

전략적 이점

  1. 다양한 시장 기회를 잡기: 전략은 동시 트렌드 추적과 반전 거래 논리를 포함하고 있으며, 다양한 시장 환경에서 거래 기회를 찾을 수 있습니다. 시장이 불안정할 때, 가격이 부린 반도 가장자리에 도달한 후의 반발 / 회전을 활용할 수 있습니다. 시장이 트렌드 운동을 시작할 때, 가격이 부린 반도 가장자리를 돌파하는 신호를 통해 트렌드를 따라갈 수 있습니다.

  2. 다단계 위험 제어: 세 층의 다른 메커니즘의 출구 조건을 설계함으로써 전략은 다양한 상황에서 자금을 보호 할 수 있습니다. 첫 번째 층 지역 판단은 거래 방향의 오류를 신속하게 식별 할 수 있습니다. 두 번째 층은 중기 추세 변화에 적합한 평행선을 통과합니다.

  3. 매개 변수 유연성: 전략은 여러 가지 조정 가능한 매개 변수를 제공하여 거래자가 다른 시장과 시간 주기 특성에 따라 시스템을 최적화 할 수 있습니다. 브린 밴드 길기와 배수는 시장의 변동성에 맞게 조정할 수 있으며, 출구 조건의 시간 매개 변수 (X 및 Y) 와 모바일 스톱 회수 비율 (Z) 은 거래자의 위험 선호도에 따라 설정할 수 있습니다.

  4. 시각적 장점: 브린 띠와 새로운 중간 참조 라인이 차트에 직접 그려져 거래자가 가격 위치와 잠재적인 지지 / 저항 지역을 직관적으로 분석하여 의사 결정 효율성을 향상시킵니다.

  5. 코드 구조가 명확하다: 전략 코드 조직이 질서 있고, 변수 명명 규격, 해설이 상세하며, 이해하기 쉽고 유지하기 쉽다. 출전 논리 분리가 명확하며, 이후 확장 및 최적화를 용이하게 한다.

전략적 위험

  1. 명확한 스톱 메커니즘의 부재: 현재 전략에는 전통적인 의미의 스톱 조건이 포함되어 있지 않으며, 극단적인 시장 조건에서 더 큰 손실을 초래할 수 있습니다. 개인 리스크 수용 능력에 따라 거래자가 수동으로 고정된 스톱을 추가하거나 ATR 기반의 동적 스톱 논리를 추가하는 것이 좋습니다.

  2. 부린밴드 과도한 의존: 높은 변동성 또는 낮은 유동성 시장에서 부린밴드가 너무 넓거나 너무 좁아져 신호 품질이 떨어질 수 있습니다. 다른 시장 환경에서 다른 부린밴드 파라미터 설정을 테스트하는 것이 좋습니다.

  3. 파라미터 민감성: 전략 성능은 부린 밴드 길이, 표준 격차 배수 및 출전 조건의 시간 파라미터와 같은 파라미터 설정에 민감할 수 있다. 부적절한 파라미터 선택은 과도한 거래 또는 중요한 기회를 놓칠 수 있다.

  4. 모바일 스톱 트리거 조건이 고정되어 있습니다. 현재 코드는 모바일 스톱의 트리거 조건이 고정된 2배의 위험 거리로 설정되어 있습니다. 이것은 모든 시장 환경에 적용되지 않을 수 있습니다. 과도한 변동이있는 시장에서 스톱이 너무 멀리 설정되어 수익을 효과적으로 보호 할 수 없습니다.

  5. 다공간 조건 대칭 위험: 전략은 다공간 방향에 대해 대칭적인 입출장 논리를 사용하지만 실제 시장에서는 상하행동이 비대칭적일 수 있다 (예: 주식 시장은 일반적으로 상승보다 더 빨리 하락한다). 다공간 방향에 대해 다른 파라미터를 설정하는 것을 고려하는 것이 좋습니다.

전략 최적화 방향

  1. 지능형 스톱 메커니즘을 추가: ATR ((평균 실제 파장) 에 기반한 동적 스톱을 도입할 수 있거나, 브린 대역폭에 기반한 스톱 거리를 설정하여 스톱을 시장의 실제 변동 상황에 더 적합하게 만들 수 있다. 이 방법은 strategy.entry 함수에 stop 변수를 추가하거나, strategy.exit 함수의 stop_loss 변수를 사용하여 구현할 수 있다.

  2. 최적화된 입구 필터 조건: 낮은 품질의 신호를 필터링하기 위해 방향 이동 지표 ((DMI) 또는 상대적으로 강한 지수 ((RSI) 와 같은 트렌드 확인 지표를 추가하는 것이 고려 될 수 있습니다. 예를 들어, ADX>25일 때만 트렌드 추적 신호를 받거나 RSI가 과매 / 과매 지역에서만 역전 신호를 받습니다.

  3. 자기 적응 파라미터 설정: 브린 밴드 파라미터와 출전 조건 파라미터를 자기 적응 형태로 설계하고, 시장의 변동성에 따라 자동으로 조정한다. 예를 들어, 지난 N 사이클의 변동률을 계산하고, 이에 따라 브린 밴드의 표준 차이의 배수를 동적으로 조정할 수 있다.

  4. 모바일 스톱 메커니즘을 개선: 모바일 스톱의 트리거 조건과 추적 거리는 위험 거리의 2배로 고정되는 대신 조정할 수 있다. 다양한 시간 주기에서의 파동 특성에 따라 모바일 스톱의 회수 비율을 조정하는 것을 고려한다.

  5. 시간 필터 추가: 거래 시간 필터를 도입하여 시장 개시 및 종료 전의 높은 변동 시간을 피하거나 특정 시장에 대한 최적의 거래 시간 필터를 추가하십시오.

  6. 다중주기 분석: 다중주기 분석 프레임워크를 통합하여, 더 높은 주기의 트렌드 방향이 현재 거래 방향과 일치하도록 요구하여 신호 품질을 향상시킵니다. 예를 들어, 4 시간 차트에 있는 다중 신호는 일일선이 상승하는 경우에만 받아들여집니다.

  7. 자금 관리를 최적화: 변동성에 기반한 포지션 계산 논리를 추가하여 낮은 변동성 환경에서 포지션을 증가시키고 높은 변동성 환경에서 포지션을 감소시켜 위험과 수익을 균형을 잡는다.

요약하다

다단계 브린띠 트렌드 추적 및 반전 거래 전략은 브린띠 지표의 동적 특성을 통해 다단계 출구 규칙과 결합하여 시장 기회를 포착하면서 위험을 효과적으로 관리하는 포괄적 인 거래 시스템을 설계합니다. 이 전략의 가장 큰 장점은 다양한 시장 환경에서 거래 기회를 찾을 수 있는 유연성과 적응성이며, 다양한 거래 종류와 시간대에 따라 변수를 조정합니다.

전략에는 명확한 스톱 메커니즘과 변수 감수성 부족과 같은 몇 가지 위험점이 있지만, 이 문서에서 제안한 최적화 방향, 예를 들어 지능적인 스톱을 추가하고, 출전 필터 조건을 최적화하고, 적응 변수 설정을 통해 전략의 안정성과 수익성을 더욱 향상시킬 수 있습니다.

거래자는 실제 적용하기 전에 충분한 회귀를 수행하고 특정 시장 특성에 따라 매개 변수를 조정하는 것이 좋습니다. 동시에 이 전략을 전체 거래 시스템의 일부로 사용하여 다른 기술과 기본 분석과 결합하여 전체적인 거래 결정을 내립니다.

전략 소스 코드
/*backtest
start: 2024-04-01 00:00:00
end: 2025-03-31 00:00:00
period: 6d
basePeriod: 6d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Bollinger Bands Strategy", overlay=true)

// 輸入參數
length = input.int(20, "BB Length", minval=1, group="布林帶設定")
mult = input.float(2.0, "BB Multiplier", minval=0.001, maxval=50, group="布林帶設定")
X = input.int(3, "Exit Condition 1 Bars (X)", minval=1, group="出場設定")
Y = input.int(10, "Exit Condition 2 Bars (Y)", minval=1, group="出場設定")
Z = input.float(30.0, "Trail Profit Retreat Z%", minval=1.0, maxval=100.0, step=1.0, group="出場設定")

// 計算布林帶
source = close
basis = ta.sma(source, length)          // 20 期均線
dev = mult * ta.stdev(source, length)   // 標準差
upper = basis + dev                     // 上緣
lower = basis - dev                     // 下緣
mid1 = upper - (upper - basis)/3
mid2 = lower + (basis - lower)/3

// 繪製布林帶
plot(basis, "Basis", color=color.gray)
plot(upper, "Upper", color=color.blue)
plot(lower, "Lower", color=color.blue)
plot(mid1,"mid1",color = color.yellow)
plot(mid2,"mid2",color = color.yellow)
//fill(upper, lower, color=color.new(color.blue, 90), title="BB Fill")

// 進場條件
longEntry = ta.crossover(source, lower) or (low < lower and close > lower)
shortEntry = ta.crossunder(source, upper) or (high > upper and close < upper)

// 進場執行
if (longEntry)
    strategy.entry("Long", strategy.long)

if (shortEntry)
    strategy.entry("Short", strategy.short)

// 出場條件變數
var float longEntryPrice = na
var float shortEntryPrice = na
var int longBarsSinceEntry = 0
var int shortBarsSinceEntry = 0

// 更新持倉狀態
if (strategy.position_size > 0)  // 做多持倉
    if (na(longEntryPrice))      // 記錄進場價格和起始計數
        longEntryPrice := strategy.position_avg_price
        longBarsSinceEntry := 0
    longBarsSinceEntry := longBarsSinceEntry + 1

if (strategy.position_size < 0)  // 做空持倉
    if (na(shortEntryPrice))
        shortEntryPrice := strategy.position_avg_price
        shortBarsSinceEntry := 0
    shortBarsSinceEntry := shortBarsSinceEntry + 1

// 做多出場條件
if (strategy.position_size > 0)
    // 條件 1:第 X 根 K 線後,收盤價 < lower + (basis - lower) / 3
    longExitLevel1 = lower + (basis - lower) / 3
    if (longBarsSinceEntry >= X and close < longExitLevel1)
        strategy.close("Long", comment="Long Exit Condition 1")
    
    // 條件 2:第 Y 根 K 線後,收盤價 < basis
    if (longBarsSinceEntry >= Y and close < basis)
        strategy.close("Long", comment="Long Exit Condition 2")
    
    // 條件 3:移動停利(收盤價 > upper 觸發)
    distanceLong = longEntryPrice - lower
    trailPriceLong = longEntryPrice + (distanceLong * 2)  // 假設 2 倍風險距離作為觸發點,可調整
    trailOffsetLong = distanceLong * (1 - Z / 100)
    strategy.exit("Long Trail", "Long", trail_price=trailPriceLong, trail_offset=trailOffsetLong)

// 做空出場條件
if (strategy.position_size < 0)
    // 條件 1:第 X 根 K 線後,收盤價 > upper - (upper - basis) / 3
    shortExitLevel1 = upper - (upper - basis) / 3
    if (shortBarsSinceEntry >= X and close > shortExitLevel1)
        strategy.close("Short", comment="Short Exit Condition 1")
    
    // 條件 2:第 Y 根 K 線後,收盤價 > basis
    if (shortBarsSinceEntry >= Y and close > basis)
        strategy.close("Short", comment="Short Exit Condition 2")
    
    // 條件 3:移動停利(收盤價 < lower 觸發)
    distanceShort = upper - shortEntryPrice
    trailPriceShort = shortEntryPrice - (distanceShort * 2)  // 假設 2 倍風險距離作為觸發點,可調整
    trailOffsetShort = distanceShort * (1 - Z / 100)
    strategy.exit("Short Trail", "Short", trail_price=trailPriceShort, trail_offset=trailOffsetShort)

// 清除變數(當持倉結束時)
if (strategy.position_size == 0)
    longEntryPrice := na
    shortEntryPrice := na
    longBarsSinceEntry := 0
    shortBarsSinceEntry := 0