[python] 스토케스틱 만들기 updated_at: 2024-12-15 03:17

파이썬을 이용한 스토케스틱 만들기

주가나 환율의 마감 가격이 일정기간동안 어느 곳에 있었는지를 관찰하기 위해 백분율로 나타낸 단기 기술적 지표를 말한다. 스토캐스틱은 크게 슬로 스토캐스틱(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
평점을 남겨주세요
평점 : 5.0
총 투표수 : 1

질문 및 답글