Breakout Channel 추세 추종 전략


생성 날짜: 2023-11-23 14:04:59 마지막으로 수정됨: 2023-11-23 14:04:59
복사: 0 클릭수: 603
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

Breakout Channel 추세 추종 전략

개요

이 전략은 채널 브레이크 이론을 기반으로 설계된 트렌드 추적 전략이다. 일정 주기 동안의 최고 가격과 최저 가격을 계산하여 채널을 구축하고, 가격이 채널을 뚫을 때 거래 신호를 발생시킨다. 이 전략은 트렌드 동작에 적용되며, 가격의 트렌드 방향을 포착하여 트렌드 추적을 한다.

전략 원칙

이 전략은 먼저 길이의 주기 내의 최고 가격과 최저 가격을 계산하여 통로 상궤와 하궤를 구성한다. 상궤를 돌파할 때, 더 많이 한다. 상궤를 돌파할 때, 공백을 한다. 평점 조건으로 상궤가 다시 통로 내로 떨어진다.

이 전략은 length를*2의 EMA 지표는 트렌드 방향을 판단한다. 가격이 통로를 돌파할 때, EMA가 상승 추세에 있다면, 다중 의사 결정의 효과를 강화한다.

우위 분석

  • 이 전략은 가격 추세를 포착할 수 있고, 유행적인 상황에 적합하며, 수익 잠재력이 높다.
  • 통로를 통해 돌파를 판단하여 가짜 돌파의 확률을 줄이고 신호 품질을 향상시킬 수 있다.
  • EMA의 판단과 함께 역동적인 거래는 피할 수 있으며, 주류를 추적할 수 있습니다.

위험 분석

  • 브레이크채널 전략은 가격 변동에 따라 거래가 자주 발생하기 쉽기 때문에 거래비용이 높을 수 있습니다.
  • 이 전략은 트렌드가 역전될 때 적시에 포지션을 청산하지 못해 큰 손실을 초래할 수 있다.
  • 이 전략은 변수 설정에 민감하며, 다른 변수는 완전히 다른 결과를 가져옵니다.

최적화 방향

  • 다른 지표와 결합하여 트렌드를 판단하여 가짜 브레이크를 피할 수 있습니다. 예를 들어 MACD, RSI 등.
  • 기계학습 알고리즘을 통해 자동으로 최적화하여 파라미터의 융통성을 높일 수 있다.
  • 최대 회수량을 제어하기 위해 스톱로스를 설정할 수 있다.

요약하다

이 전략은 전체적으로 channel breakouts to capture trends에 기반한 간단한 트렌드 추적 전략이다. 그것은 강한 트렌드 추적 능력을 가지고 있으며, 트렌드 상황에서 좋은 수익을 얻을 수 있다. 그러나 또한 특정 위험이 있으며, 안정성을 높이기 위해 추가 최적화가 필요합니다.

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

//@version=3


initial_capital = 1000,
default_qty_value = 90,
default_qty_type = strategy.percent_of_equity,
pyramiding = 0,
commission_value = 0.002,
commission_type = strategy.commission.percent,
calc_on_every_tick = true
length_val = 2
max_bars_back = 1440
risk_max_drawdown = 9


strategy("Channel Break",max_bars_back=max_bars_back,initial_capital = initial_capital,default_qty_value = default_qty_value,default_qty_type = default_qty_type,pyramiding = pyramiding,commission_value = commission_value,commission_type = commission_type,calc_on_every_tick = calc_on_every_tick)
// strategy.risk.max_drawdown(risk_max_drawdown, strategy.percent_of_equity) 

length = input(title="Length",  minval=1, maxval=1000, defval=length_val)

upBound = highest(high, length)
downBound = lowest(low, length)

//plot (upBound)
//plot (downBound)
//plot (close, color=red)
//plot (ema(close,length * 2), color=green)
//
if (not na(close[length]) and time>timestamp(2018, 02, 24, 0, 00) )
    strategy.entry("Buy", strategy.long, stop=upBound + syminfo.mintick, comment="Buy")
    strategy.entry("Short", strategy.short, stop=downBound - syminfo.mintick, comment="Short")
    
position = strategy.position_size
    
    
//plot(position , title="equity", color=red,style=cross,linewidth=4)
plot(variance(position,2)>0?1:0,style=circles,linewidth=4)

message = ""

if (position > 0) 
    message = "BTCUSD L: " + tostring(strategy.position_size)
    na(position)
    
if (position < 0) 
    message = "BTCUSD S: " + tostring(strategy.position_size)
    na(position)

alertcondition(variance(strategy.position_size,2) > 0, "test", message )