지난 포스팅에서 가져온 일봉/주봉 데이터를 이용하여 이동평균선을 계산해볼 수 있다.
[퀀트투자] 네이버 증권에서 일봉, 주봉 데이터 가져오기
이전 포스팅에서 pandas_datareader 를 이용하여 일봉 데이터를 조회하는 방법을 알아보았다. 이번에는 naver 의 url 을 이용하여 일봉과 주봉 데이터를 가져와서 parsing 하는 방법을 알아보려고 한다. xm
dkgkim.tistory.com
import requests
import pandas
from ast import literal_eval
code = "035720"
response = requests.get(f"https://api.finance.naver.com/siseJson.naver?symbol={code}&requestType=0&count=50&timeframe=day")
response_data = literal_eval(response.text.strip())
price_data = pandas.DataFrame(response_data[1:], columns=response_data[0])
price_data.index = price_data["날짜"]
price_data = price_data[["시가", "고가", "저가", "종가", "거래량"]]
결과
시가 고가 저가 종가 거래량
날짜
20211201 121500 123500 121000 122500 1482581
20211202 121500 123000 120000 122500 2028101
20211203 122000 124000 121500 123500 1488902
20211206 122500 122500 120500 121000 1477396
20211207 121500 122000 120000 120500 1218740
20211208 121500 123500 120500 121000 2288195
20211209 120500 122500 120000 122500 2338843
20211210 122000 122500 121000 122500 974383
20211213 123000 123000 120000 120000 1405089
...
20220127 87000 87500 82600 82600 3793749
20220128 82800 85600 82200 85000 2958280
20220203 87100 88300 85100 85100 3118696
20220204 85100 87500 84500 87100 1870626
20220207 87300 88000 85000 88000 2224116
20220208 88000 89200 86000 86500 2030457
20220209 86900 87300 85700 86100 1640629
20220210 86900 89400 86000 87300 3401352
20220211 87300 93600 85300 91700 7012496
20220214 90300 90800 87500 88800 3977340
이렇게 데이터를 조회해 왔다면, 한줄만 추가해주면 이동평균선을 구할 수 있다.
price_data["ma20"] = price_data["종가"].rolling(window=20).mean()
결과
시가 고가 저가 종가 거래량 ma20
날짜
20211201 121500 123500 121000 122500 1482581 NaN
20211202 121500 123000 120000 122500 2028101 NaN
20211203 122000 124000 121500 123500 1488902 NaN
20211206 122500 122500 120500 121000 1477396 NaN
20211207 121500 122000 120000 120500 1218740 NaN
20211208 121500 123500 120500 121000 2288195 NaN
20211209 120500 122500 120000 122500 2338843 NaN
20211210 122000 122500 121000 122500 974383 NaN
20211213 123000 123000 120000 120000 1405089 NaN
20211214 118500 119000 117000 118500 1718411 NaN
...
20220127 87000 87500 82600 82600 3793749 96495.0
20220128 82800 85600 82200 85000 2958280 95120.0
20220203 87100 88300 85100 85100 3118696 93650.0
20220204 85100 87500 84500 87100 1870626 92430.0
20220207 87300 88000 85000 88000 2224116 91555.0
20220208 88000 89200 86000 86500 2030457 90880.0
20220209 86900 87300 85700 86100 1640629 90185.0
20220210 86900 89400 86000 87300 3401352 89720.0
20220211 87300 93600 85300 91700 7012496 89555.0
20220214 90300 90800 87500 88800 3977340 89135.0
pandas 에서 제공하는 rolling() mean() 함수를 이용하는 방법이다. rolling 함수의 window 파라미터는 데이터를 몇개의 데이터에 대한 계산을 수행할지에 대한 파라미터 이다. window=20 으로 설정하였고 mean() 함수를 호출하였으니, 20일 이동평균값을 구하는 것이다. 이렇게 해서 구해진 평균은 단순 이동평균값이다.
만약 지수 이동평균을 구하고싶다면, 다른 함수를 사용하면 쉽게 구할 수 있다.
price_data["ma20"] = price_data["종가"].ewm(span=20).mean()
결과
시가 고가 저가 종가 거래량 ma20
날짜
20211201 121500 123500 121000 122500 1482581 122500.000000
20211202 121500 123000 120000 122500 2028101 122500.000000
20211203 122000 124000 121500 123500 1488902 122867.194005
20211206 122500 122500 120500 121000 1477396 122328.163965
20211207 121500 122000 120000 120500 1218740 121885.946659
20211208 121500 123500 120500 121000 2288195 121699.052382
20211209 120500 122500 120000 122500 2338843 121850.491752
20211210 122000 122500 121000 122500 974383 121962.762516
20211213 123000 123000 120000 120000 1405089 121647.925811
20211214 118500 119000 117000 118500 1718411 121173.875460
...
20220127 87000 87500 82600 82600 3793749 95267.324499
20220128 82800 85600 82200 85000 2958280 94274.650438
20220203 87100 88300 85100 85100 3118696 93388.898887
20220204 85100 87500 84500 87100 1870626 92782.538936
20220207 87300 88000 85000 88000 2224116 92321.961665
20220208 88000 89200 86000 86500 2030457 91761.880858
20220209 86900 87300 85700 86100 1640629 91217.724230
20220210 86900 89400 86000 87300 3401352 90841.523981
20220211 87300 93600 85300 91700 7012496 90923.894478
20220214 90300 90800 87500 88800 3977340 90720.252398
단순 이동평균을 구하는 것과 크게 다르지 않다. rolling() 을 호출 했던 것을 ewm() 으로 변경하였고, 기간을 window 로 주던 것을 span 으로 파라미터 이름을 변경해주어야 한다. span=20 으로 설정하였기 때문에 결과는 20일 지수 이동평균값이 된다.
pandas 에 정의된 함수들을 잘 활용하면, 주식 차트에서 활용하는 다른 지표들도 어렵지 않게 계산할 수 있다. 계산방법은 검색해보면 많지만 다 필요한 것은 아니다. 어떤 지표와 기준으로 종목을 찾을지에 대한 것이 더 중요하다고 생각된다.
주식은 어차피 예측가능한 부분이 아니기 때문에 어떤 공식을 사용하더라고 100% 정답을 맞출수는 없을 것이다. 하지만 투자를 하는데 있어서 퀀트투자를 활용하는 것은 성공확률을 높일 수 있는 방법이 되지 않을까 생각된다.
'주식투자' 카테고리의 다른 글
python 으로 키움증권 Open API 호출 - 기본코드 (0) | 2022.03.02 |
---|---|
자동매매를 위한 키움증권 Open API+ 시작하기 (0) | 2022.02.23 |
네이버 증권에서 일봉, 주봉 데이터 가져오기 (0) | 2022.02.12 |
pandas_datareader 로 주식 일봉 데이터 가져오기 (0) | 2022.02.10 |
python 으로 엑셀파일 처리 (2) | 2022.02.08 |