채널 브레이크에 기반한 트렌드 추적 전략

저자:차오장, 날짜: 2023-11-23 14:04:59
태그:

img

전반적인 설명

이 전략은 채널 브레이크아웃 이론을 기반으로 설계된 트렌드 추적 전략이다. 특정 기간 동안 가장 높은 가격과 가장 낮은 가격을 사용하여 채널을 구성하고 가격이 채널을 벗어날 때 거래 신호를 생성합니다. 이 전략은 트렌딩 시장에 적합하며 트렌드 추적을 위해 가격의 트렌드 방향을 파악 할 수 있습니다.

전략 논리

이 전략은 먼저 채널의 상위 대역과 하위 대역을 구성하기 위해 긴 기간 동안 가장 높은 가격과 가장 낮은 가격을 계산합니다. 닫기 가격이 상위 대역을 넘어서면 긴 포지션이 열립니다. 닫기 가격이 하위 대역을 넘어서면 짧은 포지션이 열립니다. 가격이 채널로 다시 떨어지면 포지션은 닫을 것입니다.

이 전략은 또한 트렌드 방향을 결정하기 위해 길이 *2의 EMA 지표를 그래프화합니다. 가격이 상단 범위를 넘으면 EMA가 상승 추세라면 긴 결정이 강화됩니다.

이점 분석

  • 이 전략은 가격 동향을 파악할 수 있고 높은 수익 잠재력을 가진 트렌딩 시장에 적합합니다.
  • 채널 브레이크를 사용하여 신호를 생성하면 잘못된 브레이크를 줄이고 신호 품질을 향상시킬 수 있습니다.
  • EMA와 결합하여 트렌드에 반대되는 거래를 피하고 주요 트렌드를 추적하는 것을 보장합니다.

위험 분석

  • 브레이크아웃 전략은 가격 연대 과정에서 빈번한 거래를 생성하는 경향이 있으며, 높은 거래 비용을 발생시킬 수 있습니다.
  • 이 전략은 트렌드가 역전될 때 즉각적으로 포지션을 탈퇴할 수 없습니다. 이는 큰 손실로 이어질 수 있습니다.
  • 전략은 매개 변수 설정에 민감하며 다른 매개 변수들은 완전히 다른 결과를 가져올 수 있습니다.

최적화 방향

  • MACD, RSI와 같은 다른 지표를 포함하여 잘못된 파장을 피하십시오.
  • 기계 학습 알고리즘을 사용하여 자동으로 매개 변수를 최적화하고 안정성을 향상시킵니다.
  • 최대 마감량을 조절하기 위해 스톱 손실을 설정합니다.

요약

요약하자면, 이것은 트렌드를 포착하기 위해 채널 브레이크아웃을 기반으로 한 간단한 트렌드 추적 전략입니다. 강력한 트렌드 추적 기능을 가지고 있으며 트렌딩 시장에서 좋은 수익을 얻을 수 있습니다. 그러나 또한 몇 가지 위험이 있으며 안정성을 향상시키기 위해 추가 최적화가 필요합니다. 매개 변수 조정, 스톱 로스 설정 및 다른 지표와 결합하여이 전략을 라이브 거래에 적용 할 수 있습니다.


/*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 )

더 많은