💡하이킨 아시 (Heikin Ashi)
하이킨 아시는 1700년대에 오사카의 쌀 무역 상인인 Munehisa Homma가 개발한 지표이다. 당시 오사카 쌀 시장은 물품 교환권을 사용해서 마치 현대의 선물 거래처럼 초기 형태의 선물 시장이 운영되었는데, 이를 통해 투자 수익을 추구할 수 있었다고 한다. Homma는 투자 심리가 거래에 미치는 영향을 분석해 탐욕이나 공포로 수익을 낼 수 있는 방법에 대해서 연구했고, 이를 시각화해서 알기 쉽게 추세를 파악할 수 있는 지표를 개발했다고 한다.
하이킨 아시 캔들의 기존의 캔들과는 달리 캔들몸통이 시가, 고가, 저가, 종가 들의 평균값을 활용해 형성이 되는데, 가격 변동성을 보다 더 평균화시켜 매끄럽게 시각화해주는 캔들 차트이다. 기존 캔들차트를 사용했을 때보다 추세 중간중간 나오는 노이즈들을 잘 처리해주기 때문에 추세의 정도를 더 명확하게 파악할 수 있을 뿐더러 추세의 변곡점 또한 효과적으로 캐치할 수 있다는 장점이 있다.
[일반 캔들 차트]
[하이킨아시 차트]
위 두 차트는 같은 종목, 같은 기간의 캔들 차트와 하이킨 아시 차트이다. 캔들차트로 보는 것보다 하이킨아시 차트로 보는 것이 추세변화를 더 시각화해주기 때문에 상승이냐 하락이냐의 추세를 더 단 번에 확인할 수 있는 것을 확인할 수 있다.
✓ 하이킨 아시 차트의 공식
시가 = 이전 하이킨 아시 캔들 시가와 종가의 평균값 [1/2(이전 막대의 시가 + 이전막대의 종가) -> 이전 막대의 중간값]
종가 = 현 캔들스틱의 시가, 고가, 저가, 그리고 종가의 평균값 [1/4(시가 + 종가 + 저가 + 종가)]
고가 = 현 캔들스틱의 가장 높은 값 [최대값[고가, 시가, 종가]]
저가 = 현 캔들 시가의 가장 낮은 값 [최저값[고가, 시가, 종가]]
✓ 파이썬으로 구현한 하이킨 아시
def GetHeikenAshi (ohlcv) :
ohlcv['ha_close'] = (ohlcv['open'] + ohlcv['high'] + ohlcv['low'] + ohlcv['close'] ) / 4
idx = ohlcv.index.name
ohlcv.reset_index(inplace=True)
for i in range(0, len(ohlcv)):
if i == 0:
ohlcv._set_value(i, 'ha_open', ((ohlcv._get_value(i, 'open') + ohlcv._get_value(i, 'close')) / 2))
else:
ohlcv._set_value(i, 'ha_open', ((ohlcv._get_value(i - 1, 'ha_open') + ohlcv._get_value(i - 1, 'ha_close')) / 2))
if idx:
ohlcv.set_index(idx, inplace=True)
ohlcv['ha_high'] = ohlcv[['ha_open','ha_close','high']].max(axis=1)
ohlcv['ha_low'] = ohlcv[['ha_open','ha_close','low']].min(axis=1)
ohlcv['ha_range'] = ohlcv['ha_close'] - ohlcv ['ha_open']
return ohlcv
고가, 저가, 종가는 어렵지 않게 구할 수 있었지만, 가장 첫번째 시가를 정확하게 구현하는 것이 이 하이킨 아시 구하기의 포인트였다.
종가 = 현 캔들스틱의 시가, 고가, 저가, 그리고 종가의 평균값 [1/4(시가 + 종가 + 저가 + 종가)]
ohlcv['ha_close'] = (ohlcv['open'] + ohlcv['high'] + ohlcv['low'] + ohlcv['close'] ) / 4
고가 = 현 캔들스틱의 가장 높은 값 [최대값[고가, 시가, 종가]]
ohlcv['ha_high'] = ohlcv[['ha_open','ha_close','high']].max(axis=1)
저가 = 현 캔들 시가의 가장 낮은 값 [최저값[고가, 시가, 종가]]
ohlcv['ha_low'] = ohlcv[['ha_open','ha_close','low']].min(axis=1)
시가 = 이전 하이킨 아시 캔들 시가와 종가의 평균값 [1/2(이전 막대의 시가 + 이전막대의 종가) -> 이전 막대의 중간값]
여기서 문제는 가장 첫 번째 캔들의 경우는 이전 막대의 시가가 없다는 것이었다. 그렇기 때문에 가장 첫번째 값을 구하는 경우와 그렇지 않은 경우를 분리해서 코드를 구현하였다. 첫 번째 캔들의 경우는 그날의 시가와 종가를 이용해서 값을 유추해낼 수 있다.
for i in range(0, len(ohlcv)):
if i == 0:
ohlcv._set_value(i, 'ha_open', ((ohlcv._get_value(i, 'open') + ohlcv._get_value(i, 'close')) / 2))
else:
ohlcv._set_value(i, 'ha_open', ((ohlcv._get_value(i - 1, 'ha_open') + ohlcv._get_value(i - 1, 'ha_close')) / 2))
✓ 실행결과
쥬피터를 이용해서 위 코드를 실행한 결과와 우리가 업비트에서 흔히 보는 차트를 비교해보면 아래와 같다. 시각화되는 색만 다를 뿐 차트의 모양은 똑같이 구현되는 것을 확인할 수 있다.
직접 작성한 코드
업비트 차트
'블록체인 > 블록체인이란?' 카테고리의 다른 글
블룸필터(Bloom Filter) 동작 방식, 특징 (0) | 2022.06.27 |
---|---|
탭 루트(Tab Root), 슈노르 서명 (0) | 2022.06.27 |
블록체인 트릴레마 해소방안 - 오프체인(라이트닝 네트워크) (0) | 2022.06.24 |
비트코인 캐시의 등장배경과 문제점 (1) | 2022.06.24 |
Safety 그리고 Liveness (0) | 2022.06.24 |
댓글