볼린저 밴드 돌파와 평균 회귀 4시간 수준 양적 거래 전략 결합

BBANDS SMA SD TP SL
생성 날짜: 2024-12-12 11:24:28 마지막으로 수정됨: 2024-12-12 11:24:28
복사: 0 클릭수: 568
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

볼린저 밴드 돌파와 평균 회귀 4시간 수준 양적 거래 전략 결합

개요

이 전략은 부린 띠 지표에 기반한 4시간 레벨의 정량 거래 시스템으로, 트렌드 브레이크와 평균값 회귀를 결합한 거래 철학이다. 이 전략은 부린 띠의 하향 돌파를 통해 시장 동력을 포착하며, 가격 회귀 평균값의 특성을 활용하여 수익을 창출하고, 스톱 로즈로 위험을 제어한다. 이 전략은 3배의 레버리지를 사용하며, 수익을 보장하면서도 충분히 위험을 통제한다.

전략 원칙

전략의 핵심 논리는 다음과 같은 핵심 요소에 기초합니다.

  1. 20주기의 이동 평균을 브린의 중간 궤도로 사용하며, 2배의 표준 차이는 변동 영역으로 사용한다
  2. 포지션 개시 신호: K선 엔터티 (개시 가격과 폐쇄 가격의 평균값) 가 상회할 때 더 많이 열리고, 하회할 때 더 많이 열립니다.
  3. 평형 포지션 신호: 다중 헤드 포지션을 보유할 때, 연속적인 K 선의 종료 가격과 개시 가격이 모두 상반기보다 낮고 종료 가격이 개시 가격보다 낮으면 평형 포지션; 빈 헤드 포지션을 보유할 때 반대 논리를 사용합니다.
  4. 리스크 제어: 포지션을 설정할 때 현재 K선 최고/최저점으로 스톱로스를 설정하여 단일 손실을 제어할 수 있도록 한다.

전략적 이점

  1. 거래 논리 명확성: 트렌드와 회귀를 결합하여 다양한 시장 환경에서 잘 수행 할 수 있습니다.
  2. 리스크 제어: K선 변동에 기반한 동적 스톱로드를 설정하여 회수량을 효과적으로 제어할 수 있다
  3. 가짜 신호를 필터링: K선 엔티티의 위치를 판단하여 단지 종식 가격에 의해서가 아니라 브레이크를 확인하고, 가짜 브레이크로 인한 손실을 줄인다.
  4. 합리적인 자금 관리: 계좌의 이익과 권리의 동적에 따라 지분 규모를 조정하여 수익을 보장하고 위험을 통제합니다.

전략적 위험

  1. 흔들림 시장 위험: 수평 상반의 흔들림 상태에서 가짜 브레이크 신호를 자주 유발하여 연속적인 스톱 손실을 초래할 수 있습니다.
  2. 레버리지 리스크: 3배 레버리지를 사용하면 급격한 변동이 있을 때 큰 손실이 발생할 수 있습니다.
  3. 스톱로스 설정 위험: K선 최고/최저 지점으로 스톱로스를 설정하면 너무 느슨해져서 단독 손실이 증가할 수 있습니다.
  4. 시간 주기의 의존성: 4시간 레벨은 특정 시장 환경에서 너무 느리게 반응하여 상황을 놓칠 수 있습니다.

전략 최적화 방향

  1. 트렌드 필터 도입: 더 긴 주기 트렌드 판단 지표를 추가하여 주 트렌드 방향에서 거래 할 수 있습니다.
  2. 절감 최적화: ATR 또는 브린 대역폭을 사용하여 절감 거리를 동적으로 조정하는 것을 고려하십시오.
  3. 포지션 관리를 늘려: 변동률이나 트렌드 강도에 따라 레버리지 배수를 동적으로 조정합니다
  4. 시장 환경 판단을 추가: 현재 시장 상태를 식별하기 위해 거래량 또는 변동률 지표를 도입하고 선택적으로 입장을 개설합니다.

요약하다

이것은 부린띠 지표의 트렌드 따라와 평균 회귀 특성을 결합한 전략으로, 엄격한 포지션 개시 조건과 위험 제어 조치를 통해, 트렌드 시장과 흔들림 시장에서 안정적인 수익을 얻을 수 있는 목표를 달성한다. 전략의 핵심 장점은 명확한 거래 논리와 완벽한 위험 제어 시스템이지만, 전략의 안정성과 수익 능력을 더욱 향상시키기 위해 레버리지 사용과 시장 환경 판단 등의 측면에서 최적화에 주의를 기울여야 한다.

전략 소스 코드
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-10 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Bollinger 4H Follow", overlay=true, initial_capital=300, commission_type=strategy.commission.percent, commission_value=0.04)
// StartYear = input(2022,"Backtest Start Year") 
// StartMonth = input(1,"Backtest Start Month") 
// StartDay = input(1,"Backtest Start Day")

// testStart = timestamp(StartYear,StartMonth,StartDay,0,0)

// EndYear = input(2023,"Backtest End Year")
// EndMonth = input(12,"Backtest End Month")
// EndDay = input(31,"Backtest End Day")

// testEnd = timestamp(EndYear,EndMonth,EndDay,0,0)

lev = 3

// Input parameters
length = input.int(20, title="Bollinger Band Length")
mult = input.float(2.0, title="Bollinger Band Multiplier")

// Bollinger Bands calculation
basis = ta.sma(close, length)
upperBand = basis + mult * ta.stdev(close, length)
lowerBand = basis - mult * ta.stdev(close, length)

// Conditions for Open Long
openLongCondition = strategy.position_size == 0 and close > open and (close + open) / 2 > upperBand

// Conditions for Open Short
openShortCondition = strategy.position_size == 0 and close < open and (close + open) / 2 < lowerBand

// Conditions for Close Long
closeLongCondition = strategy.position_size > 0 and strategy.position_size > 0 and (close < upperBand and open < upperBand and close < open)

// Conditions for Close Short
closeShortCondition = strategy.position_size < 0 and strategy.position_size < 0 and (close > lowerBand and open > lowerBand and close > open)


// Long entry
if openLongCondition
    strategy.entry("Long", strategy.long, qty=strategy.equity * lev / close)
    strategy.exit("Long SL", from_entry="Long", stop=low)  // Set Stop-Loss

// Short entry
if openShortCondition
    strategy.entry("Short", strategy.short, qty=strategy.equity * lev / close)
    strategy.exit("Short SL", from_entry="Short", stop=high)  // Set Stop-Loss

// Long exit
if closeLongCondition
    strategy.close("Long", comment = "TP")

// Short exit
if closeShortCondition
    strategy.close("Short", comment = "TP")

// Plot Bollinger Bands
plot(upperBand, color=color.yellow, title="Upper Band")
plot(lowerBand, color=color.yellow, title="Lower Band")