Impulse MACD는 수정된 MACD로, 고가와 저가의 이동 평균(MA) 범위(이동 평균 사이의 영역) 내 값을 필터링하여 형성됩니다. 이를 통해 횡보장세에서 흔히 발생하는 ‘휩소(whipsaw)’를 줄이는 효과가 있습니다. 일반적으로 히스토그램 형태로 표시됩니다. 또한, 전통적인 히스토그램(MACD – Signal)도 함께 표시하여 진입 및 청산 시점을 찾는 데 도움을 줍니다.
트레이딩뷰: https://kr.tradingview.com/script/qt6xLfLi-Impulse-MACD-LazyBear/
Impulse MACD 구현
pip install pandas ccxt numpy
import pandas as pd
import ccxt
import numpy as np
# 예시) 바이낸스 선물 BTCUSDT, 1시간 봉
bnb = ccxt.binance({'options': { 'defaultType': 'future' }})
def IMACD_LB(lengthMA=34, lengthSignal=9):
ohlcv = bnb.fetch_ohlcv(symbol="BTC/USDT", timeframe="1h", limit=500)
df = pd.DataFrame(ohlcv, columns=['time', 'open', 'high', 'low', 'close', 'volume'])
close = df['close']
high = df['high']
low = df['low']
tmp = df.copy()
tmp['hlc3'] = (high + low + close) / 3
tmp['hlc3'] = tmp['hlc3'].round(1)
tmp['hi'] = high.ewm(alpha=1/lengthMA, adjust=False).mean()
tmp['lo'] = low.ewm(alpha=1/lengthMA, adjust=False).mean()
ema1 = tmp['hlc3'].ewm(span=lengthMA, adjust=False).mean()
ema2 = ema1.ewm(span=lengthMA, adjust=False).mean()
d = ema1 - ema2
tmp['mi'] = ema1 + d
# Impulse MACD Value
tmp['ImpulseMACD'] = np.where(tmp['mi'] > tmp['hi'], tmp['mi'] - tmp['hi'],
np.where(tmp['mi'] < tmp['lo'], tmp['mi'] - tmp['lo'], 0))
# Signal Line
tmp['ImpulseMACDSignal'] = tmp['ImpulseMACD'].rolling(window=lengthSignal).mean()
# Histogram
tmp['Histo'] = tmp['ImpulseMACD'] - tmp['ImpulseMACDSignal']
df['ImpulseMACD'] = tmp['ImpulseMACD'].fillna(0).round(1)
df['ImpulseMACDSignal'] = tmp['ImpulseMACDSignal'].fillna(0).round(1)
df['Histo'] = tmp['Histo'].fillna(0).round(1)
return df
print(IMACD_LB(lengthMA=34, lengthSignal=9)) # 트레이딩뷰 디폴트 값
Check
트레이딩뷰 차트와 비교


Pine Script와 Python 간의 약간의 오차는 숫자 처리 방식, 소수점 자릿수, 데이터 정렬, 초기값 설정, 반올림 차이 등에서 발생할 수 있습니다.