[python] 스토케스틱 만들기
파이썬을 이용한 스토케스틱 만들기
주가나 환율의 마감 가격이 일정기간동안 어느 곳에 있었는지를 관찰하기 위해 백분율로 나타낸 단기 기술적 지표를 말한다. 스토캐스틱은 크게 슬로 스토캐스틱(slow Stochastic)과 패스트 스토캐스틱(fast Stochastic)로 나뉜다. 패스트스토캐스틱은 주가나 환율의 변동이 자주 발생해서 단기매매, 빠른 매매에 유리한 지표다. 패스트 스토캐스틱의 잦은 변동으로 투자판단에 어려움이 발생하여 느리게 만든 것이 슬로 스토캐스틱이라 보면 된다.
소스코드
import pandas as pd
class Stochastic():
def __init__(self):
super().__init__()
def cal_stochastic(self, n=15, m=5, t=3):
data = [
['2023-12-18',208500,212000,207000],
['2023-12-19',209000,212500,207500],
['2023-12-20',209000,213500,209000],
..........
['2024-01-16',195000,204000,195000],
['2024-01-17',186000,197000,186000],
['2024-01-18',186700,188700,184400],
]
df = pd.DataFrame(data)
df.columns = ['Date', 'Close', 'High', 'Low']
# Fast %K = ((현재가 - n기간 중 최저가) / (n기간 중 최고가 - n기간 중 최저가)) * 100
df['fast_k'] = ((df['Close'] - df['Low'].rolling(n).min()) / (
df['High'].rolling(n).max() - df['Low'].rolling(n).min())) * 100
# Slow %K = Fast %K의 m기간 이동평균(SMA)
df['slow_k'] = df['fast_k'].rolling(m).mean()
# Slow %D = Slow %K의 t기간 이동평균(SMA)
df['slow_d'] = df['slow_k'].rolling(t).mean()
print(df)
if __name__ == "__main__":
cal = Stochastic()
# 대부분 증권사에서는 n(5)-m(3)-t(3)를 사용하고 네이버금융은 n(15)-m(5)-t(3)을 사용한다
cal.cal_stochastic(15, 5, 3)
결과
Date Close High Low fast_k slow_k slow_d
0 2023-12-18 208500 212000 207000 NaN NaN NaN
1 2023-12-19 209000 212500 207500 NaN NaN NaN
2 2023-12-20 209000 213500 209000 NaN NaN NaN
3 2023-12-21 207000 210000 205000 NaN NaN NaN
4 2023-12-22 178500 208500 177000 NaN NaN NaN
5 2023-12-26 181200 185800 180700 NaN NaN NaN
6 2023-12-27 189400 190500 182100 NaN NaN NaN
7 2023-12-28 193600 194800 187200 NaN NaN NaN
8 2024-01-02 195800 197900 191400 NaN NaN NaN
9 2024-01-03 194800 199200 194100 NaN NaN NaN
10 2024-01-04 200500 202500 192300 NaN NaN NaN
11 2024-01-05 201500 211000 199100 NaN NaN NaN
12 2024-01-08 201000 202000 196800 NaN NaN NaN
13 2024-01-09 206500 208500 202000 NaN NaN NaN
14 2024-01-10 203000 208000 199400 71.232877 NaN NaN
15 2024-01-11 201000 205500 201000 65.753425 NaN NaN
16 2024-01-12 201500 202500 199100 67.123288 NaN NaN
17 2024-01-15 204000 206000 200500 79.411765 NaN NaN
18 2024-01-16 195000 204000 195000 52.941176 67.292506 NaN
19 2024-01-17 186000 197000 186000 17.491749 56.544281 NaN
20 2024-01-18 186700 188700 184400 15.916955 46.576987 56.804591