기본 콘텐츠로 건너뛰기

pandas_ta를 적용한 통계적 인덱스 지표

[time series]ARIMA(Autoregressive Integrated Moving Average)

ARIMA(Autoregressive Integrated Moving Average) 비정상 시계열 데이터를 분석하여 미래 값을 예측하는데 효과적이며 추세 및 계절성 패턴을 내재적으로 처리할 수 있다는 장점이 있습니다. 3가지 구성 AR 모형: 과거 p시점까지 자신의 값에 의존한다고 가정, 차수 p를 결정 I(Integrated): 비정상을 정상으로 만들기 위해 차분을 하는 횟수(d)를 결정 MA 모형: 현재 시점의 예측오차가 과거 q 시점 까지의 예측오차에 의존한다고 가정 , 차수 q를 결정 각 모형에서의 차수를 인수로 ARIMA(p, d, q) 모형을 생성 ARIMA 모형은 차분을 통해 비정상을 정상시계열로 변환하고 AR 및 MA 성분으로 시계열 데이터의 고유한 패턴(자기상관성, 과거오차의 영향)을 모델링합니다. 모형 구축단계 정상성확인 : 비정상인 경우 차분을 통해 정상화합니다. 차수 p,d,q를 결정 (auto_arima와 같은 자동 차수 결정함수를 활용할 수 있음) ARIMA 모형 추정 잔차분석 등을 통해 모형의 적합성을 평가, 잔차 백색잡음(평균이 0, 일정한 분산으로 자시 상관이 없음)의 성질을 가지는지를 확인 ACF, PACF, 히스토그램, QQ 플롯 등을 통해 확인할 수 있음 Ljung-Box test과 같은 통계적 검정을 사용하여 잔차에 자기 상관 검정 예측 이상치 및 예측치 못한 이벤트에 의해 예측성능이 저하될 수 있음 과거패턴을 기반으로 함으로서 장기예측의 정확도는 떨어질 수 있음 명시적인 계절성을 다루는데 한계가 있음. 계절성 ARIMA(SARIMA) 모형 사용 정상성 검정 데이터의 추세가 없음 ACF 플롯은 빠르게 0으로 수렴하는 형태 단위근 검정(통계적 검정) ADF (Augmented Dickey-Fuller) 검정, KPSS (Kwiatkowski-Phillips-Schmidt-Shin) 검정 등 p, d, q의 특성 데이터의 정상화를 위해 차분하는 횟수...

[stock]CMF(Chaikin Money Flow)

CMF(Chaikin Money Flow) 특정기간 동안 자금의 흐름을 측정하는 지표로 잠재적인 추세 파악과 그 강도를 확인하는데 도움이 됩니다. Money Flow Mutiplier(MFM) 계산 $\text{MFM} = \frac{\text{(Close - Low)-(High - Close)}}{\text{High - Low}}$ 상승추세(변동 증가)에서 종가는 고가 근처이므로 Close-Low 증가 즉, +영역에서 상승 기울기 증가 하락추세(변동 증가)에서 종가는 저가 근처이므로 High-Close 증가 즉, -영역에서 하락기울기 증가 MFV(Money Flow Volume) = MFM × Volume CFM 계산 $\text{CFM} = \frac{\sum^n_{i=1}\text{MFV}}{\sum^n_{i=1}\text{Volume}}$ CFM의 기본개념 종가가 해당일의 고가에 가까울수록 매수가 발생한 것으로 간주 종가가 해당일의 저가에 가까울수록 매도가 발생한 것으로 간주 각각에 거래량을 가중하여 자금의 흐름을 수치화 pandas_ta.cmf(high, low, close, volume, open_=None, length=None, offset=None, **kwargs) 로 계산합니다. length는 MFV를 합하는 기간으로 기본값은 20입니다. import numpy as np import pandas as pd import matplotlib.pyplot as plt import pandas_ta as ta import FinanceDataReader as fdr import matplotlib.pyplot as plt import mplfinance as mpf st=pd.Timestamp(2024,9, 1) et=pd.Timestamp(2025, 5,7) trgnme="000660" trg=fdr...

CKSP(Chande Kroll Stop)

CKSP(Chande Kroll Stop) ATR을 활용하여 롱포지션과 숏포지션에 대한 최적의 손절매 수준 파악하기 위한 지표입니다. ATR 계산 초기 stop 수준 계산 초기 고가 스톱: 최근 p 기간동안 최고가 -(c × ATR) 초기 저가 스톱: 최근 p 기간동안 최저가 +(c × ATR) 최종 stop 수준 계산 숏 스톱:최근 q 기간 동안 초기 고가 stop 수준 중 가장 높은 값 롱 스톱:최근 q 기간 동안 초기 저가 stop 수준 중 가장 낮은 값 pandas_ta.cksp(high, low, close, p=None, x=None, q=None, tvmode=None, offset=None, **kwargs) 로 계산하며 p, x, q의 기본값은 각각 10, 1, 9입니다. import numpy as np import pandas as pd import yfinance as yf import pandas_ta as ta import matplotlib.pyplot as plt import mplfinance as mpf st=pd.Timestamp(2024,1, 1) et=pd.Timestamp(2025, 5, 3) trgnme="000660" trg=fdr.DataReader(trgnme, st, et)[["Open", "High", "Low", "Close", "Volume"]] cksp=trg.ta.cksp() cksp.tail(3) CKSPl_10_3_20 CKSPs_10_3_20 Date 2025-04-30 196785.742040 184249.957734 2025-05-02 ...

[stock] Chop 지표

Chop 시장의 추세 또는 횡보 상태를 판단하는데 도움을 주는 지표로서 수치화한 결과를 나타냄 True Range (TR) 계산: TR=max(High−Low,High−Close prev ,Low−Close prev |) 여기서 High는 당일 고가, Low는 당일 저가, Close prev 는 전일 종가입니다. 설정된 기간 (n) 동안의 True Range 값을 합산합니다. $\text{ATR Sum}_n = \sum^n_{i=1}\text{TR}_i$ 설정된 기간 (n) 동안의 최고가(HH)와 최저가(LL)를 찾습니다. 차프 지수 (CHOP) 계산: $\text{CHOP}=100×\frac{ \log\left(\frac{\text{ATR Sum}_n}{\text{HH}_n - \text{LL}_n} \right) }{\log(n)}$ n은 차프 지수를 계산하는 기간입니다. 추세는 큰 변동성을 기반으로 합니다. 그러므로 고가와 저가의 차이가 크기 때문에 Chop값이 작아집니다. 반대로 횡보구간은 그 차이가 작기 때문에 큰 Chop를 보입니다. 이러한 경우는 추세추종 전략의 효율성이 저하될 수 있습니다. Chop의 절대값보다는 과거값과의 비교 또는 특정기준선을 통해 시장상황을 판단합니다. pandas_ta.chop(high, low, close, length=None, atr_length=None, ln=None, scalar=None, drift=None, offset=None, **kwargs) 로 계산할 수 있습니다. ATR sum을 계산하는 기간 length로 기본값은 14 ATR 은 TR의 이동평균값으로 이 기간은 atr_length로 조정하며 기본값은 1입니다. 기본값의 경우 ATR 대신 TR을 사용하는 것입니다. 위 식의 tr을 계산하는 과정에서 이전이 종가를 사용합니다. 이전의 기간을 drift로 조정하며 기본값은 1입니다. ln= True일 경우 자연로그, False일 경우 대수로...

[stock] Fisher Transform

fiser 변환 가격데이터를 가우스 정규분포 형태로 변환하여 최근 가격 움직임을 기준으로 가격 변동이 클때 신호를 포작하는데 사용되는 기술적 지표 가격을 [-1, +1] 사이의 값으로 변화하여 (정규분포로 변환)추세 반전 과매도/과매수 상태 파악 가격변화에 민감한 반응으로 추세 전환시점 포착에 도움 피셔변환값의 이동평균선을 신호선으로 작용, 신호선과의 교차로 매수 또는 매도 신호로 해석 피셔변환의 계산은 다음과 같습니다. 이 식에서 X는 정규환된 값입니다. $$\text{Fisher Transform} = \frac{1}{2} \ln\left(\frac{1+X}{1-X}\right)$$ 위 식의 X는 정규화된 가격으로 주가에서는 고가와 저가를 이용합니다. pandas_ta.fisher(high, low, length=None, signal=None, offset=None, **kwargs) 함수로 계산할 수 있습니다. 고가와 저가의 중간 가격 계산 (hl) 일정기간(기본값, 9)의 중간가의 최대, 최소값을 계산(hhl, lhl) 각 중간값의 위치 설정: 가격을 [-1, +1] 사이의 값으로 정규화 $\text{Normalized Price} = \frac{\text{hl - lhl}}{\text{hhl - lhl}}$ 피셔변환 $\text{Fisher Transform} =\frac{1}{2}\ln \left( \frac{1+\text{Normalized Price}}{1-\text{Normalized Price}}\right)$ signal(신호) 값으로 이동평균 대신 변환값의 이동을 사용합니다. value.shift(signal). 기본값은 1입니다. import numpy as np import pandas as pd import yfinance as yf import FinanceDataReader as fdr import pandas_ta as ta import matplotlib.pyplot as plt i...