본문 바로가기
Python Code

돈치안 채널(Donchian Channel) 소스 코드를 공개합니다.

by 인천고래 quant

안녕하세요. 주식 투자관련 지식을 공유하는 인천고래입니다.

오늘은 수 많은 사람들의 관심이 집중되고 있는 돈치안 채널에 대해 소스를 제공해 드리려고 합니다.

 

1. 돈치안 채널(Donchian Channel)이란?

돈치안 채널(Donchian Channel)은 **거래 범위(Trading Range)**를 기반으로 하는 기술적 분석 보조지표로,

일정 기간 동안의 최고가와 최저가를 기반으로 생성됩니다.

위의 계산식에서 알 수 있듯이 돈치안 채널은 시장의 변동성(최고가와 최저가)을 반영하여 가격이 이전의 채널선을 벗어나는 시점을 분석함으로서 추세의 변화나 돌파 시점을 감지하도록 되어 있습니다.

 

그래서 채널지표이지만 추세 기반 보조 지표로 분류가 되고 있습니다. (변동성 지표의 성격도 일부 포함)

이 지표는 추세를 파악하고 돌파 전략에 활용되며, 주로 추세 추종 전략에서 매수 및 매도 신호로 사용됩니다.

돈치안 채널 지표는 세계적으로 유명한 지표 중 하나이니 관심을 가지고 매매법에 대해 만들어 나가시는 것을 추천드립니다.

 

 

2. 돈치안 채널(Donchian Channel) 구성 요소

돈치안 채널은 세 개의 라인으로 구성됩니다:

  • 상단선(Upper Band): 주어진 기간 동안의 최고가(High)의 최대값
  • 하단선(Lower Band): 주어진 기간 동안의 최저가(Low)의 최소값
  • 중심선(Center Line): 상단선과 하단선의 평균값

각각의 선 수식은 아래와 같습니다.

  • Upper Band: 최고가(기간 N일 동안의 최고 값)
  • Lower Band: 최저가(기간 N일 동안의 최저 값)
  • Center Line: (Upper Band + Lower Band) / 2

돈치안 채널 적용 차트

 

3. 돈치안 채널(Donchian Channel) 파이썬 소스

코드는 아래와 같습니다.

import FinanceDataReader as fdr
import pandas as pd
import mplfinance as mpf
import matplotlib.pyplot as plt


# 1. 주가 데이터를 가져오는 함수
def get_stock_data(symbol, start_date):
    df = fdr.DataReader(symbol, start=start_date)
    return df


# 2. 돈치안 채널 계산 함수
def calculate_donchian_channel(df, period=20):
    df['Upper Band'] = df['High'].rolling(window=period).max()  # 상단선
    df['Lower Band'] = df['Low'].rolling(window=period).min()  # 하단선
    df['Center Line'] = (df['Upper Band'] + df['Lower Band']) / 2  # 중심선
    return df


# 3. 돈치안 채널을 시각화하는 함수
def plot_donchian_channel(df, symbol, period=20):
    apds = [
        mpf.make_addplot(df['Upper Band'], color='red', linestyle='dashed', width=1.5),
        mpf.make_addplot(df['Center Line'], color='blue', linestyle='solid', width=1.2),
        mpf.make_addplot(df['Lower Band'], color='green', linestyle='dashed', width=1.5),
    ]

    fig, axlist = mpf.plot(df, type='candle', style='charles', addplot=apds, volume=True,
                           title=f"{symbol} Donchian_Channel({period}days)", ylabel='Price', ylabel_lower='Volume',
                           figsize=(12, 8), tight_layout=True, returnfig=True)

    # 범례 추가
    axlist[0].legend(['Upper Band', 'Center Line', 'Lower Band'], loc='upper left')

    plt.show()


# 4. 메인 함수
def main():
    symbol = '347700'  # 종목 코드
    start_date = '2024-01-01'
    period = 20

    df = get_stock_data(symbol, start_date)
    df = calculate_donchian_channel(df, period)
    plot_donchian_channel(df, symbol, period)


# 프로그램 실행
if __name__ == '__main__':
    main()

 

-

댓글