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 import mplfinance as mpf st=pd.Timestamp(2024,9, 1) et=pd.Timestamp(2025, 5,3) trgnme="000660" trg=fdr.DataReader(trgnme, st, et)[["Open", "High", "Low", "Close", "Volume"]] fisher=trg.ta.fisher() fisher.tail(3)
FISHERT_9_1 | FISHERTs_9_1 | |
---|---|---|
Date | ||
2025-04-29 | 1.078902 | 0.955444 |
2025-04-30 | 0.878755 | 1.078902 |
2025-05-02 | 0.939178 | 0.878755 |
adf=[mpf.make_addplot(fisher.iloc[:,0], panel=0, color="brown", label="fisher"), mpf.make_addplot(ta.ema(fisher.iloc[:,1], 5), panel=0, color="navy", label="signal")] f, axs=mpf.plot(trg, type="candle", style="yahoo", volume=False, addplot=adf, returnfig=True, figsize=(12, 4)) axs[1].legend(loc="upper left") plt.show()
댓글
댓글 쓰기