볼링거 밴드 브레이크업 전략

저자:차오장, 날짜: 2023-11-07 15:08:36
태그:

img

전반적인 설명

이 전략은 시장 트렌드를 측정하기 위해 볼링거 밴드를 사용하며 투자 포트폴리오의 지속적인 성장을 목표로 거래 기회를 식별하기 위해 대역폭 신호를 결합합니다. 전년 데이터와 뒷받침하여 최대 마감액 -4.02%로 78.95%의 수익성을 달성했습니다. 이것은 내 포트폴리오를 꾸준히 성장시키는 데 도움이되는 일련의 자동화 전략 중 하나입니다.

매개 변수를 조정하고 이 전략을 테스트해 보세요.

만약 여러분이 기존의 결과에 만족하고, 경고를 통해 수행할 수 있는 이 전략을 자동화하고 싶다면, 이 전략을 연구로 변환하고 코드에 경고를 추가해야 합니다.

전략 논리

이 전략은 볼린저 밴드와 대역폭을 사용하여 입출구를 결정합니다.

볼링거 밴드는 상단, 중단, 하단 등이 있다. 중단은 n기간 간단한 이동평균이며, 기본값은 n = 16. 상단은 중단 + k * 표준편차, 하단은 중단 - k * 표준편차, 기본값은 k = 3. 가격이 상단에 접근하면 과평가 또는 과매를 나타낸다. 가격이 하단에 접근하면 과평가 또는 과판을 나타낸다.

대역폭 지표는 중간 대역에 대한 가격의 변동성을 보여줍니다. 그것은 (올라기 대역 - 하위 대역) / 중간 대역 * 1000으로 계산됩니다. 대역폭이 20 미만되면 낮은 변동성 또는 통합을 나타냅니다. 대역폭이 50을 초과하면 변동성이 증가합니다.

이 전략은 대역폭이 20-50 사이이며 가격이 하위 범위를 넘을 때 긴 기회를 찾습니다. 긴 후에, 수익을 취하면 입시 가격의 108%로 설정되거나 가격이 상위 범위를 넘을 때 손실을 멈추는 출입입니다.

이점 분석

이 전략의 장점은 다음과 같습니다.

  1. 볼링거 밴드는 트렌드 방향을 측정하여 가짜 브레이크의 위험을 줄입니다.

  2. 대역폭 신호는 큰 변동으로 인한 큰 손실을 피하여 범위 제한 동작을 정확하게 위치합니다.

  3. 백테스트에서 1년 동안 80%의 수익성이 나타났습니다. 매우 높은 위험/이익 비율입니다.

  4. 최대 유치율 5% 이하로 위험도를 효과적으로 조절하고 안정적인 포트폴리오 성장을 유지합니다.

  5. 단순하고 명확한 논리, 이해하기 쉽고 구현하기 쉽고 다양한 자산에 널리 적용됩니다.

위험 분석

이 전략의 위험은 다음과 같습니다.

  1. 잘못된 볼링거 매개 변수 설정은 좋은 거래 기회를 놓칠 수 있습니다.

  2. 지속적 인 황금 시장 또는 곰 시장에서 거래 빈도가 낮고 수익성이 제한됩니다.

  3. 백테스트 데이터가 충분하지 않습니다. 실제 성능은 백테스트와 다를 수 있습니다.

  4. 극심한 움직임 중에 손실을 중지 할 수 있으며 큰 손실로 이어질 수 있습니다

  5. 높은 거래 비용 또한 실제 이윤을 감소

해결책:

  1. 매개 변수를 최적화하고 시장에 따라 볼링거 기간을 조정

  2. 비정상적인 시장 조건에 대처하기 위해 추가 지표를 도입

  3. 안정성을 확인하기 위해 다양한 시장에서 충분한 데이터와 백테스트를 수집합니다.

  4. 극단적 인 움직임으로 인한 큰 손실을 방지하기 위해 적절한 중지 손실을 조정하십시오.

  5. 거래 비용을 줄이기 위해 낮은 수수료를 받는 거래 플랫폼을 선택

최적화 방향

이 전략은 다음과 같은 측면에서 개선될 수 있습니다.

  1. 가짜 브레이크를 피하기 위해 볼륨 확인을 추가합니다

  2. 트렌드 지표와 결합하여 트렌드 방향을 파악합니다.

  3. 기계 학습을 사용하여 매개 변수를 자동 조정하고 시장에 적응합니다.

  4. 상관관계가 없는 자산 거래를 피하기 위해 상관관계 필터를 추가합니다

  5. 상승 추세 동안 더 많은 이윤을 위해 수익/손실을 중지 최적화

  6. 승률을 높이기 위해 더 많은 조건 필터를 도입

  7. 여러 시간 프레임 조합을 테스트하여 여러 주기로 이익을 얻으십시오.

  8. 지표화 포트폴리오를 구축하여 노출을 확장하십시오.

  9. 기계 학습을 사용하여 새로운 전략을 자동으로 생성하고 검증합니다.

결론

전체적으로 볼링거 밴드 브레이크아웃 전략은 잘 검증되었으며 범위 제한 시장에서 안정적인 수익을 창출 할 수 있습니다. 핵심 논리는 간단하고 명확하며 이해하기 쉽고 적용 할 수 있습니다. 그러나 복잡한 시장에서 안정적인 수익을 위해 매개 변수 최적화, 위험 통제 및 포트폴리오 관리에 대한 추가 개선이 필요합니다. 이것은 기본 트렌드 추적 전략이며 더 많은 기술적 지표와 위험 관리 메커니즘을 도입하거나 자동화를 위해 기계 학습과 결합하여 향상시킬 수 있습니다. 요약하면이 전략은 초보자에게 알고리즘 거래의 문을 열고 또한 경험이 많은 거래자에게 전략을 최적화하는 가능성을 제공합니다.


/*backtest
start: 2023-10-30 00:00:00
end: 2023-11-06 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Bollinger Bands BAT/USDT 30min", overlay=true )

/// Indicators
///Bollinger Bands
source = close
length = input(16, minval=1)
mult = input(3, step=0.1, minval=0.001, maxval=50)
basis = sma(source, length)
dev = mult * stdev(source, length)

upper = basis + dev
lower = basis - dev

plot(basis, color=color.red)
p1 = plot(upper, color=color.blue)
p2 = plot(lower, color=color.blue)
fill(p1, p2)

//Bollinger bands width
bbw = (upper-lower)/basis*1000
//plot(bbw, color=color.blue)

upper_bbw_input = input(title="BBW Upper Threshold", step=1, minval=0, defval=50)
lower_bbw_input = input(title="BBW Lower Threshold", step=1, minval=0, defval=20)


// Backtesting Period
testStartYear = input(2019, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2020, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => true

// Take Profit
tp_inp = input(8, title='Take Profit %', step=0.1)/100
take_level = strategy.position_avg_price * (1 + tp_inp)

//Entry Strategy
entry_long = crossover(source, lower) and (bbw < upper_bbw_input) and (bbw > lower_bbw_input)
exit_long = cross(high,upper) or close < lower

if testPeriod()

    strategy.entry(id="LongBB", long=true, comment="LongBB", when=entry_long)
    strategy.exit("Take Profit Long","LongBB",limit=take_level)
    strategy.close(id="LongBB", when=exit_long )



더 많은