[기술적 분석] 지표/전략 : 돈치안 채널 (Donchian Channels)

반응형
반응형

  돈치안 채널은 리처드 돈치안이 만든 변동성? 추세? 지표이다. 이 지표는 다른 밴드나 채널류의 지표들과는 많이 다르고 보거나 사용하는 법도 다르다. 돈치안 채널은 밴드 상하단을 관찰기간 내 최고가격과 최저가격으로 설정한다. 기준라인은 최고가격과 최저가격의 평균. 그렇다 보니 다른 밴드나 채널류 지표들처럼 상하로 움직일만한 허용 범위를 정해 놓고 상단을 치면 매도, 하단을 치면 매수를 하는 전략을 취하지 않는다. 오히려 반대로 하단을 치면 하락 추세로 보고 숏 포지션을 취하고 기준선에 다다르면 하락추세가 끝난 것으로 보고 숏포지션을 청산한다. 마찬가지로 상단을 치면 상승 추세로 보고 롱 포지션을 취하고 상단을 계속 넓히지 못하고 하단이나 기준선에 다다르면 롱 포지션을 청산한다.

 

돈치안 채널 (Donchian Channels) 차트

  

  돈치안 채널은 볼린저 밴드와 마찬가지로 밴드 폭이 넓어지면 변동성이 심한 상태로 인식할 수 있다. 단, 볼린저 밴드와 다른 점은 볼린저 밴드는 상하단으로 도달할 (관찰 기간 표준편차를 기반으로 계산한) 가능성이 95%인 바운더리를 정해놓는 것이고, 돈치안 채널은 관찰 기간 내 실제로 도달한 적이 있는 상단이고 하단이다.

 

  이 지표를 이용한 전략은 (다른 지표들과 전략들도 마찬가지이지만) 기본적으로 선물 시장에서 쓰기 용이하나, 주식 현물에 적용한다면 매수/매도 포지션 ETF가 상장되어 있는 지수에 적용하여 사용하던가, 롱 포지션 신호에만 사용하던가, 아니면 종목 옵션이나 ELW가 있는 (상장만 되어 있는 게 아니라 거래량도 있는..) 종목을 골라 적용하는 게 좋다.

 

  이 지표는 다른 변동성 지표와 다르게 박스권이나 횡보장에서는 손실을 내기 딱 좋다. 매수 매도 타이밍이 다른 지표들과 반대이다 보니.. 하지만 추세가 확실하고 이 추세의 폭이나 기간이 길면 수익을 보기 좋은 종목이다. 이 때문에 다른 지표들과 결합하여 사용한다면 추세추종 매매에는 굉장히 충실한 지표이다. 일단 이 지표를 만든 리처드 돈치안은 상품 시장이랑 선물 시장에서 거래하던 양반이고 추세추종 매매를 하던 사람이라..

 

  마지막으로 트레이딩 뷰 파인 스크립트 소스와 pandas-ta 소스를 공유하며 마친다.

 

 

  • 돈치안 채널 (Donchian Channels) 트레이딩 뷰 파인 스크립트 지표 소스
//@version=5
indicator(title="Donchian Channels", shorttitle="DC", overlay=true, timeframe="", timeframe_gaps=true)
length = input.int(20, minval = 1)
offset = input.int(0)
lower =  ta.lowest(length)
upper =  ta.highest(length)
basis =  math.avg(upper, lower)
plot(basis,     "Basis", color = #FF6D00, offset = offset)
u = plot(upper, "Upper", color = #2962FF, offset = offset)
l = plot(lower, "Lower", color = #2962FF, offset = offset)
fill(u, l, color = color.rgb(33, 150, 243, 95), title = "Background")

 

  • 돈치안 채널 (Donchian Channels) 트레이딩 뷰 파인 스크립트 전략 소스
//@version=5
strategy(title="Donchian Channels", shorttitle="DC", overlay=true, margin_long=100, margin_short=100, default_qty_type=strategy.percent_of_equity, default_qty_value=50, commission_type=strategy.commission.percent, commission_value=0.2, pyramiding=0)
 
length = input.int(20, minval = 1)
offset = input.int(0)
lower =  ta.lowest(length)
upper =  ta.highest(length)
basis =  math.avg(upper, lower)
plot(basis,     "Basis", color = #FF6D00, offset = offset)
u = plot(upper, "Upper", color = #2962FF, offset = offset)
l = plot(lower, "Lower", color = #2962FF, offset = offset)
fill(u, l, color = color.rgb(33, 150, 243, 95), title = "Background")

startDate = input.time(defval=timestamp("01 Jan 1970 00:00 +0000"), group = "Test Range")
finishDate = input.time(defval=timestamp("31 Dec 2025 24:00 +0000"), group = "Test Range")
time_condition = time >= startDate and time <= finishDate
 
if(time_condition)
	if (close == upper)
		strategy.entry("Long", strategy.long, stop=lower, oca_type=strategy.oca.cancel)
	if ta.crossunder(close, basis) 
		strategy.close("Long")
    if (close == lower)
		strategy.entry("Short", strategy.short, stop=lower, oca_type=strategy.oca.cancel)
	if ta.crossover(close, basis) 
		strategy.close("Short")
 
bgcolor(strategy.position_size > 0 ? color.new(color.yellow,90) : na)
bgcolor(strategy.position_size < 0 ? color.new(color.green,90) : na)

 

 

  • 돈치안 채널 (Donchian Channels) pandas-ta 소스
import pandas as pd
import pandas_ta as ta
import FinanceDataReader as fdr

data = fdr.DataReader('005930')
donchian = ta.donchian(high=data['High'], low=data['Low'], lower_length=20, upper_length=20)
data = pd.concat([data, donchian], axis=1)
data.dropna(inplace=True)
반응형