볼린저 밴드 돌파 추세 추종 전략


생성 날짜: 2023-09-22 14:31:17 마지막으로 수정됨: 2023-09-22 14:31:17
복사: 1 클릭수: 681
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

개요

이 전략은 부린 띠 지표에 기반한 트렌드 추적 전략이다. 부린 띠의 하향 경로를 돌파하는 것을 사용하여 트렌드 방향을 판단하고, 해당 방향의 입지를 열는다. 가격이 다시 떨어지기 시작하면, 동적 간격의 추적 스톱을 사용하여 입지를 탈퇴하여 이익을 얻는다.

전략 원칙

이 전략은 부린띠 지표를 사용하여 트렌드 방향을 판단한다. 부린띠는 가격의 표준 차이를 계산하여 상하를 구성한다. 가격이 상하를 돌파하면 트렌드가 시작되었다고 생각하며, 가격이 하하를 돌파하면 트렌드가 시작되었다고 생각한다.

거래 논리는 다음과 같습니다.

  1. 브린 띠의 중간, 상단, 하단 레일을 계산한다.

  2. 가격이 궤도를 돌파했을 때, 더 많은 상표를 열고, 가격이 궤도를 돌파했을 때, 빈 상표를 열습니다.

  3. 리스크를 통제하기 위해 스톱로스를 추적하고, 가격이 하락하기 시작하면 스톱로스를 내립니다.

  4. 다시 브린 궤도를 돌파하면서 다시 트렌드에 들어갑니다.

브린 띠를 사용하여 트렌드 방향을 판단하고 동적 추적 중지와 함께 위험을 효과적으로 제어 할 수 있습니다.

우위 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 트렌드를 판단하는 브린 띠 지표는 간단하고 효과적입니다.

  2. 브레이크 엔트리와 동적 트레일링 스톱 로스의 조합으로 트렌드 캡처와 리스크 관리를 고려합니다.

  3. 코드 구조는 명확하고 간결하며 이해하기 쉽고 수정하기 쉽습니다.

  4. 더 적은 매개 변수로 최적화하기 쉽다.

  5. 다양한 품종에 적합하며, 유연성이 강하다.

  6. “이런 일이 벌어진다면, 우리는 더 많은 돈을 벌 수 있을 것이다.

위험 분석

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

  1. 브린 띠는 통계적 특성에만 기초하여 곡선 적합성에 대한 위험이 있다.

  2. “이런 일이 일어나면, 우리는 더 이상 ‘대화’를 ‘대화’라고 부르지 않을 것입니다.

  3. 스톱포인트는 너무 밀도가 높아서 가격의 정상적인 변동에 의해 스톱포인트가 될 수 있다.

  4. 거래 비용의 영향을 고려하지 않습니다.

  5. 이 자료는 한정된 시간 범위로, 너무 잘 맞을 수 있습니다.

대응방법:

  1. 최적화 매개 변수 또는 다른 지표 검증 신호를 도입하십시오.

  2. 엑스포는 엑스포의 엑스포와 엑스포의 엑스포의 엑스포를 연결합니다.

  3. ATR 등 지표에 따라 동적으로 스톱포인트를 조정한다.

  4. 추가 수수료, 슬라이드 포인트 계산

  5. 재검토 기간을 늘리고, 다중 시장 검증.

최적화 방향

이 전략은 다음과 같은 측면에서 최적화될 수 있습니다.

  1. 다양한 지표의 조합 효과를 테스트한다.

  2. 트렌드 변동에 대한 인식이 증가한다.

  3. 기계 학습 방법의 동적 최적화 파라미터를 도입한다.

  4. 재검토에 따라 최적화된 스톱로스 전략.

  5. 거래 비용의 영향을 평가하고 추가합니다.

  6. 매개 변수 공간 최적화를 수행하여 최적의 매개 변수 Settings。를 찾습니다.

  7. 포지션 위험을 통제하기 위해 돈 관리를 늘립니다.

요약하다

이 전략은 브린 띠 지표를 통해 트렌드 방향을 판단하고, 트래킹 스톱로스를 사용하여 위험을 제어합니다. 전체적인 거래 논리는 간단하고 명확합니다. 전략은 좋은 트렌드 캡처 효과를 가지고 있지만, 더 많은 기술 지표, 최적화 매개 변수 및 추가 비용 계산 등을 도입하여 전략을 더 안정적으로 신뢰할 수 있습니다.

전략 소스 코드
/*backtest
start: 2022-09-15 00:00:00
end: 2023-09-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Bollinger Band Breakout", shorttitle = "BB Strategy",initial_capital=1000, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, commission_type = strategy.commission.percent, commission_value = 0.3, max_bars_back = 1000, overlay=true)

// Inputs //

sma = input(20,  minval=1)
mult   = input(1.2, minval=0.001, maxval=50)
src = input(close)

// alert msg  //

message_long_entry  = input("long entry")
message_short_entry = input("short entry")

// Calculations //

basis = sma(close, sma)
dev   = mult * stdev(close, sma)

upper = basis + dev
lower = basis - dev

// Backtest //
fromyear = input(2019, defval = 2019, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(1, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

leverage = input(1, "Leverage")

term = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))

// PLOT //

plot(basis, color = color.gray,  linewidth = 2)
lu = plot(upper, color = color.green, linewidth = 2)
ll = plot(lower, color = color.red,   linewidth = 2)

fill(lu, ll, color = color.gray)

// Signals //

long  = crossover(close, upper)
short = crossunder(close, lower)

// Strategy entry //
strategy.initial_capital = 50000
if (long and term)
    strategy.entry("long",  strategy.long, qty=strategy.initial_capital/close*leverage, when = long and barstate.isconfirmed, alert_message = message_long_entry)
    
if (short and term)
    strategy.entry("short",  strategy.short, qty=strategy.initial_capital/close*leverage, when = short and barstate.isconfirmed, alert_message = message_short_entry)

// strategy exit //

strategy.exit("long tsl", "long", loss = close*0.075 / syminfo.mintick, trail_points = close*0.05 / syminfo.mintick, trail_offset = close*0.005 / syminfo.mintick)
strategy.exit("short tsl", "short", loss = close*0.075 / syminfo.mintick, trail_points = close*0.05 / syminfo.mintick, trail_offset = close*0.005 / syminfo.mintick)