볼불린 오실레이터 브레이크아웃 전략


생성 날짜: 2023-11-07 15:08:36 마지막으로 수정됨: 2023-11-07 15:08:36
복사: 0 클릭수: 736
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

볼불린 오실레이터 브레이크아웃 전략

개요

이 전략은 볼브린 밴드 지표를 사용하여 트렌드를 판단하고, 폭이 넓은 신호와 결합하여 거래 기회를 찾고, 포트폴리오의 지속적인 안정적인 성장을 목표로합니다. 작년의 데이터에 따르면 이 전략의 수익률은 78.95%이며, 최대 회수율은 4.02%입니다.

참고로, 현재 결과를 만족하면 학습으로 전환하고 경고를 추가하여 전략을 자동화 할 수 있습니다. 이것은 코드에 경고 메커니즘을 추가하는 것을 필요로합니다.

전략 원칙

이 전략은 볼프린 띠와 대역폭을 사용하여 출전과 출전 시간을 판단한다.

볼브린 띠는 상선, 중선, 하선 ᄂ을 포함한다. 중선은 n일 간소 이동 평균이며, 변수 n은 16을 기본으로 한다. 상한은 중선 + k이다.*표준 편차, 하위 경계는 중선-k*표준 편차, 변수 k는默认为3。 가격이 상한에 가까울 때, 주가가 너무 높거나 과매입을 나타낸다。 가격이 하한에 가까울 때, 주가가 너무 낮거나 과매매를 나타낸다。

대역폭 지표는 가격의 상대적인 중간선에서의 변동을 나타냅니다. 그것은 ((상선-하선) / 중간선으로 구성됩니다.*1000을 계산해보면 △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △

이 전략은 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. Test multi-timeframe combinations to profit from multiple cycles 다중 시간 프레임 조합을 테스트하여 다중 사이클에서 이익을 얻습니다.

  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 )