지난 포스팅에서는 업비트 API를 통해 가져온 캔들 데이터를 바탕으로 TA-Lib를 이용해 스토캐스틱, RSI 등의 보조 지표를 활용하는 방법을 설명했습니다.
이전에 언급했다시피, TA-Lib는 보조 지표 외에도 캔들 패턴 인식에도 사용할 수 있는데 이번 포스팅에서는 이를 다뤄보려고 합니다. 먼저, 캔들 패턴에 대해서 간단히 설명하자면 캔들 차트에 표현되는 각각의 캔들에 의미를 부여, 패턴을 인식하고 이를 통해 시장 움직임을 파악하고자 하는 분석 방법입니다.
예를 들면, 도지(Doji) 패턴이 나타나면 매수/매도세가 중립으로 나타나며 향후 흐름이 바뀔 것이라고 예측하는 것입니다. 아래는 상승 흐름에서의 약세 전환을 나타내는 도지 패턴의 예시입니다.
이러한 캔들 패턴 분석을 프로그램에 이용할 수 있도록 TA-Lib는 다음과 같은 다양한 캔들 패턴에 대한 함수를 제공하고 있습니다.
CDL2CROWS Two Crows
CDL3BLACKCROWS Three Black Crows
CDL3INSIDE Three Inside Up/Down
CDL3LINESTRIKE Three-Line Strike
CDL3OUTSIDE Three Outside Up/Down
CDL3STARSINSOUTH Three Stars In The South
CDL3WHITESOLDIERS Three Advancing White Soldiers
CDLABANDONEDBABY Abandoned Baby
CDLADVANCEBLOCK Advance Block
CDLBELTHOLD Belt-hold
CDLBREAKAWAY Breakaway
CDLCLOSINGMARUBOZU Closing Marubozu
CDLCONCEALBABYSWALL Concealing Baby Swallow
CDLCOUNTERATTACK Counterattack
CDLDARKCLOUDCOVER Dark Cloud Cover
CDLDOJI Doji
CDLDOJISTAR Doji Star
CDLDRAGONFLYDOJI Dragonfly Doji
CDLENGULFING Engulfing Pattern
CDLEVENINGDOJISTAR Evening Doji Star
CDLEVENINGSTAR Evening Star
CDLGAPSIDESIDEWHITE Up/Down-gap side-by-side white lines
CDLGRAVESTONEDOJI Gravestone Doji
CDLHAMMER Hammer
CDLHANGINGMAN Hanging Man
CDLHARAMI Harami Pattern
CDLHARAMICROSS Harami Cross Pattern
CDLHIGHWAVE High-Wave Candle
CDLHIKKAKE Hikkake Pattern
CDLHIKKAKEMOD Modified Hikkake Pattern
CDLHOMINGPIGEON Homing Pigeon
CDLIDENTICAL3CROWS Identical Three Crows
CDLINNECK In-Neck Pattern
CDLINVERTEDHAMMER Inverted Hammer
CDLKICKING Kicking
CDLKICKINGBYLENGTH Kicking - bull/bear determined by the longer marubozu
CDLLADDERBOTTOM Ladder Bottom
CDLLONGLEGGEDDOJI Long Legged Doji
CDLLONGLINE Long Line Candle
CDLMARUBOZU Marubozu
CDLMATCHINGLOW Matching Low
CDLMATHOLD Mat Hold
CDLMORNINGDOJISTAR Morning Doji Star
CDLMORNINGSTAR Morning Star
CDLONNECK On-Neck Pattern
CDLPIERCING Piercing Pattern
CDLRICKSHAWMAN Rickshaw Man
CDLRISEFALL3METHODS Rising/Falling Three Methods
CDLSEPARATINGLINES Separating Lines
CDLSHOOTINGSTAR Shooting Star
CDLSHORTLINE Short Line Candle
CDLSPINNINGTOP Spinning Top
CDLSTALLEDPATTERN Stalled Pattern
CDLSTICKSANDWICH Stick Sandwich
CDLTAKURI Takuri (Dragonfly Doji with very long lower shadow)
CDLTASUKIGAP Tasuki Gap
CDLTHRUSTING Thrusting Pattern
CDLTRISTAR Tristar Pattern
CDLUNIQUE3RIVER Unique 3 River
CDLUPSIDEGAP2CROWS Upside Gap Two Crows
CDLXSIDEGAP3METHODS Upside/Downside Gap Three Methods
이전 포스팅에서 사용했던 업비트 API를 통해 가져온 데이터를 pandas.DataFrame으로 변환한 `df` 변수를 사용해 위 캔들 패턴 인식을 위한 함수를 사용해보도록 하겠습니다. 다음은 도지(Doji) 패턴을 인식하기 위한 함수 호출 예시입니다.
import pandas as pd
upbit = Upbit(access_key, secret_key)
unit = 240 # 4 hours
candles = upbit.candles('KRW-BTC')
min_candles = candles.minute(unit=unit, count=200)
df = pd.DataFrame(data={
'open': [x.opening_price() for x in min_candles],
'close': [x.trade_price() for x in min_candles],
'high': [x.high_price() for x in min_candles],
'low': [x.low_price() for x in min_candles],
})
ta.CDLDOJI(high=df['high'], low=df['low'], open=df['open'], close=df['close'])
결과는 다음과 같이 나타납니다.
0 0
1 0
2 0
3 0
4 0
...
195 0
196 0
197 0
198 0
199 100
이제 위에 설명한 모든 함수를 한 번에 호출해 개별 캔들이 어떤 패턴으로 인식되는지 다음과 같은 코드로 확인해보도록 하겠습니다.
import numpy as np
pattern_funcs = [
'CDL2CROWS',
'CDL3BLACKCROWS',
'CDL3INSIDE',
'CDL3LINESTRIKE',
'CDL3OUTSIDE',
'CDL3STARSINSOUTH',
'CDL3WHITESOLDIERS',
'CDLABANDONEDBABY',
'CDLADVANCEBLOCK',
'CDLBELTHOLD',
'CDLBREAKAWAY',
'CDLCLOSINGMARUBOZU',
'CDLCONCEALBABYSWALL',
'CDLCOUNTERATTACK',
'CDLDARKCLOUDCOVER',
'CDLDOJI',
'CDLDOJISTAR',
'CDLDRAGONFLYDOJI',
'CDLENGULFING',
'CDLEVENINGDOJISTAR',
'CDLEVENINGSTAR',
'CDLGAPSIDESIDEWHITE',
'CDLGRAVESTONEDOJI',
'CDLHAMMER',
'CDLHANGINGMAN',
'CDLHARAMI',
'CDLHARAMICROSS',
'CDLHIGHWAVE',
'CDLHIKKAKE',
'CDLHIKKAKEMOD',
'CDLHOMINGPIGEON',
'CDLIDENTICAL3CROWS',
'CDLINNECK',
'CDLINVERTEDHAMMER',
'CDLKICKING',
'CDLKICKINGBYLENGTH',
'CDLLADDERBOTTOM',
'CDLLONGLEGGEDDOJI',
'CDLLONGLINE',
'CDLMARUBOZU',
'CDLMATCHINGLOW',
'CDLMATHOLD',
'CDLMORNINGDOJISTAR',
'CDLMORNINGSTAR',
'CDLONNECK',
'CDLPIERCING',
'CDLRICKSHAWMAN',
'CDLRISEFALL3METHODS',
'CDLSEPARATINGLINES',
'CDLSHOOTINGSTAR',
'CDLSHORTLINE',
'CDLSPINNINGTOP',
'CDLSTALLEDPATTERN',
'CDLSTICKSANDWICH',
'CDLTAKURI',
'CDLTASUKIGAP',
'CDLTHRUSTING',
'CDLTRISTAR',
'CDLUNIQUE3RIVER',
'CDLUPSIDEGAP2CROWS',
'CDLXSIDEGAP3METHODS'
]
res = pd.DataFrame(
data={x: getattr(ta, x)(high=df['high'], low=df['low'],
open=df['open'], close=df['close']).replace(0, np.nan)
for x in pattern_funcs})
res.idxmax(axis=1) # columns
DataFrame에서 '0'을 NaN으로 변환해 idxmax 사용 시 모든 함수에 대해 적용되는 결과가 없는 경우 NaN으로 표현되도록 합니다. 다음은 호출 결과와 실제 캔들 차트의 예시입니다.
...
186 CDLBELTHOLD
187 CDLENGULFING
188 CDLDOJI
189 NaN
190 CDLSPINNINGTOP
191 CDLSPINNINGTOP
192 CDLHIKKAKE
193 CDLINVERTEDHAMMER
194 CDLSHORTLINE
195 CDLBELTHOLD
196 NaN
197 CDLHAMMER
198 CDLSHORTLINE
199 CDLDOJI
이러한 캔들 패턴을 프로그램에 이용하고 싶은 분들에게 도움이 되길 바랍니다.
'코인 > 코인 개발' 카테고리의 다른 글
바이낸스 API와 Python TA-lib를 이용한 스토캐스틱, RSI 등 보조 지표 활용 (2) | 2021.07.24 |
---|---|
바이낸스 (Binance) API 키 발급 받기 (0) | 2021.07.23 |
업비트 API와 Python TA-lib를 이용한 스토캐스틱, RSI 등 보조 지표 활용 (0) | 2021.07.15 |
업비트 API를 이용한 코인 RSI 알리미 프로그램 (0) | 2021.07.14 |
파이썬으로 캔들차트 그리기 (0) | 2021.07.10 |