'파이썬(Python)' 카테고리의 글 목록 (6 Page)
본문 바로가기

파이썬(Python)192

퀀트투자 백테스트 - PER X PBR 콤보 전략 본 포스트는 퀀트투자를 위한 개인적인 백테스트 기록이며, 테스트 과정이 올바르게 진행되었다는 어떠한 증명도 할 수 없음을 알려드립니다. 본 포스트를 참고하셔서 투자를 하는 행위는 삼가하여 주시기 바랍니다. 지난번 포스트에서 저 PER 백테스트를 진행했다. 결과는 생각보다 실망스러웠다. 그래서 이번에는 PER과 함께 저 PBR을 접목해서 콤보전략으로 백테스트를 진행한 결과를 기록해 보겠다. 블로그에 수차례 언급하지만, 퀀트투자는 백테스트를 직접 해 보아야 한다. 변수가 너무나 많다. 그리고 변수 하나에 따라 결과가 천차만별로 나온다. 이번 테스트는 PER 0 이상, PBR 0이상인 종목을 기준으로 낮은 PER, PBR 순으로 정렬 후 20개를 뽑았다. 방법은 간단하다. 0이상인 PER을 오름차순으로 정렬한.. 2021. 11. 15.
퀀트투자 백테스트 - 파이썬 코드로 특정기간 영업일만 가져오기 본 포스트는 퀀트투자를 위한 개인적인 백테스트 기록이며, 테스트 과정이 올바르게 진행되었다는 어떠한 증명도 할 수 없음을 알려드립니다. 본 포스트를 참고하셔서 투자를 하는 행위는 삼가하여 주시기 바랍니다. 백테스트를 하기 위해서는 테스트 기간동안의 영업일만 가져와야 한다. 구글에서 검색해 보면 다양한 방법이 많이 나온다. 하지만, 잘 안된다. 나는 pykrx를 이용해서 영업일을 가져왔다. 아주 잘 된다. 영업일을 가져오기 위해 2가지 방법을 찾았다. 첫번째는 datetime 라이브러리를 이용하는 방법이고, 다른 방법은 pandas의 date_range를 이용하는 방법이다. 우선 datetime 라이브러를 이용하는 방법부터 살펴보겠다. 1 2 3 4 5 6 7 8 9 from datetime import .. 2021. 11. 13.
퀀트투자 백테스트 - 저 PER 20종목 (All Market, 거래량 0이상) 본 포스트는 퀀트투자를 위한 개인적인 백테스트 기록이며, 테스트 과정이 올바르게 진행되었다는 어떠한 증명도 할 수 없음을 알려드립니다. 본 포스트를 참고하셔서 투자를 하는 행위는 삼가하여 주시기 바랍니다. 퀀트투자 백테스트를 진행하면 할 수록 오류를 찾게된다. 저 PER 조건으로 백테스트를 여러차례 진행하면서 개선된 사항을 기록으로 남기려고 한다. PBR이 낮은 순으로 정렬을 한 다음 순위를 매겨서 20 종목만 투자를 하는 테스트이다. 17년 동안 투자를 하며, 매월 4일에 리밸런싱하는 조건이다. 퀀트책을 읽다보면 저 PER 로 투자를 하는 방법에 대한 내용이 나온다. 그 책에서는 어떻게 투자를 했는지 모르겠지만, 내가 직접 테스트 한 결과만 봐서는 좋은 투자법이 아닌 것 같다. 5월이 가장 수익률이 높.. 2021. 11. 11.
퀀트투자 백테스트 - 매수종목 20 (21.11.05~21.11.08) 본 포스트는 퀀트투자를 위한 개인적인 백테스트 기록이며, 테스트 과정이 올바르게 진행되었다는 어떠한 증명도 할 수 없음을 알려드립니다. 본 포스트를 참고하셔서 투자를 하는 행위는 삼가하여 주시기 바랍니다. 퀀트투자 백테스트를 하다보니 수익률이 높은 조합을 찾았다. 당연히 백테스트 과정에서 내가 찾지못한 오류가 있다고 생각한다. 하지만 그 오류를 아직 찾지 못했다. 백테스트만 하며, 소중한 인생을 다 흘려 보내겠는가? 아니면, 어느정도 테스트를 한 결과로 실제 투자를 하겠는가?를 나 스스로 많이 고민했다. 결론적으로 일단 투자를 해보기로 했다. 백테스트가 완벽하지 않다는 것을 알기에 실전 투자도 분명히 필요하리라 생각한다. 투자를 하기로 결정을 하고 난 후의 고민은 "얼마를 투자해야 하는가?" 이다. 예전.. 2021. 11. 9.
퀀트투자 백테스트 - 현실적인 백테스트 방법 - 2 본 포스트는 퀀트투자를 위한 개인적인 백테스트 기록이며, 테스트 과정이 올바르게 진행되었다는 어떠한 증명도 할 수 없음을 알려드립니다. 본 포스트를 참고하셔서 투자를 하는 행위는 삼가하여 주시기 바랍니다. 퀀트투자 프로그램을 사용하지 않고, 보통사람이 할 수 있는 가장 현실적인 퀀트투자 방법 2번째 포스트다. 첫 번째 포스트는 누구나 할 수 있지만, 아주 시간이 오래 걸리는 방법이다. 아래 링크를 참고하길 바란다. 퀀트투자 백테스트 - 현실적인 백테스트 방법 - 1 두 번째 방법은 진입장벽이 약간 있는 방법이다. 파이썬이라는 언어를 공부하고 사용해야 한다. 하지만, 결코 어렵지 않다. 시간만 조금 투자하면 누구나 쉽게 배우고, 활용도가 높은 프로그램이 '파이썬'이다. 혹시나 관심이 있는 사람이 지금 포스.. 2021. 11. 5.
퀀트투자 백테스트 - 현실적인 백테스트 방법 - 1 본 포스트는 퀀트투자를 위한 개인적인 백테스트 기록이며, 테스트 과정이 올바르게 진행되었다는 어떠한 증명도 할 수 없음을 알려드립니다. 본 포스트를 참고하셔서 투자를 하는 행위는 삼가하여 주시기 바랍니다. 퀀트투자 프로그램을 사용하지 않고, 보통 사람이 할 수 있는 가장 현실적인 퀀트투자 방법을 소개하려고 한다. 이런 내용은 퀀트책 몇 권만 보면 나온다. 내 경험까지 추가해서 누구나 할 수 있는 방법을 기록해 보겠다. 1. Python 프로그램을 못하고, 앞으로 할 계획이 없는 경우 IT 강국인 우리나라에는 'KRX' 사이트가 있다. 참으로 고마운 사이트이다. 여기에서는 날짜 별, 종목별로 종가, PBR, PER, PSR, DIV 등의 데이터를 무료로 제공받을 수 있다. 1) KRX에서 위의 그림에서 보.. 2021. 11. 3.
퀀트투자 백테스트 - 저 PBR 20종목 (All Market) 본 포스트는 퀀트투자를 위한 개인적인 백테스트 기록이며, 테스트 과정이 올바르게 진행되었다는 어떠한 증명도 할 수 없음을 알려드립니다. 본 포스트를 참고하셔서 투자를 하는 행위는 삼가하여 주시기 바랍니다. 지난번 포스트까지 백테스트 파이썬 코드에서 약간의 실수가 있었다. 데이터를 스크래핑 할때 'KOSPI'만 가져온 것이다. 왠지 종목수가 적게 나와서 좀 의아하게 생각했다. 그래서 전체 시장, 즉 코스피와 코스닥의 데이터를 모두 불러와서 저 PBR로 20종목을 골라낸 후 백테스트를 해 보았다. 파이썬 코드는 길지 않은데, 17년치를 백테스트 하다보니 프로그램을 돌리는 시간이 약 30분 정도 걸린다. 이 시간이 너무나 길게 느껴진다. 비효율적이다. 그래서 multiprocessing을 구현하려고 하는데, .. 2021. 11. 1.
Python - openpyxl 을 사용 중 값이 아닌 수식을 가져올때 해결방법 openpyxl 라이브러리를 사용하여 특정셀의 값을 가져올 수가 있습니다. 값을 가져오려고 했는데, 예기치 않게 수식을 가져오는 경우가 발생하더라구요. 예제를 통해 보겠습니다. 이렇게 임의로 10, 20 그리고 "=A1 + B1" 수식을 차례로 입력하였습니다. 코드를 위와 같이 입력하고 결과값을 출력해 보도록 하겠습니다. C1 셀은 '30'이 아닌 수식("=A1+B1")이 출력 되었습니다. openpyxl 라이브러리가 익숙하지 않은 탓에 다소 당황했습니다. 이럴때는 load_workbook 클래스에서 파일을 가져오는 옵션을 추가해주면 수식이 아닌 값을 가져올 수 있습니다. wb = load_workbook(file, data_only=True) 이런식으로 'data_only=True' 옵션을 추가로 넣어.. 2021. 10. 30.
퀀트투자 백테스트 - 저 PBR 20종목 VS 30종목 승자는? 본 포스트는 퀀트투자를 위한 개인적인 백테스트 기록이며, 테스트 과정이 올바르게 진행되었다는 어떠한 증명도 할 수 없음을 알려드립니다. 본 포스트를 참고하셔서 투자를 하는 행위는 삼가하여 주시기 바랍니다. 퀀트투자 책을 보면 20개 또는 30개를 사서 매매하라고 한다. 저 PBR 같은 경우에는 20개 사는 것이 유리할까? 30개 사는 것이 유리할까? "17년치 X 월별 X 2가지 조건" 이런 경우의 수를 다 해 보면 알지 않을까? 하루에 하나씩 분석 한다면 약 1년 3개월이면 다 계산하고 분석할 수 있겠다. ...죄송하다. 헛소리 했다. 다행히 파이썬으로 코드를 다 만들었다. 20분이면 결과가 예쁘게 엑셀파일에 출력이 된다. 저 PBR 순으로 오름차순 정렬을 한 뒤 월 별 20개 종목만 선정을 했다. 월.. 2021. 10. 28.
퀀트투자 백테스트 - 저 PBR 투자 수익률 본 포스트는 퀀트투자를 위한 개인적인 백테스트 기록이며, 테스트 과정이 올바르게 진행되었다는 어떠한 증명도 할 수 없음을 알려드립니다. 본 포스트를 참고하셔서 투자를 하는 행위는 삼가하여 주시기 바랍니다. 재무데이터 구하기 너무 어렵다. 공짜로 얻으려고 하니 더욱 구하기가 어려운 것 같다. 네이버금융에서 크롤링을 해봤자 5년치 정도 밖에 안되고, DART는 그나마 2012년부터 제공이 되는것 같지만, 전 종목을 구하는데 시간도 오래걸리고 데이터 전처리도 필요할 것 같다. 시간이 날때 fnguide에 돈을 주고 다운로드 받을까 하는데, 예전에 가입해 논 비번을 까먹었다. 이메일도 어떤걸로 등록했는지 기억이 나질 않는다. 퀀트킹과 젠포트가 유명하던데 돈 주고 이용할까 생각도 했지만, 백테스는 작은 조건에 의.. 2021. 10. 26.
퀀트투자 백테스트 - 워런버핏이 사용하던 NCAV 투자법 파이썬 코드 본 포스트는 퀀트투자를 위한 개인적인 백테스트 기록이며, 테스트 과정이 올바르게 진행되었다는 어떠한 증명도 할 수 없음을 알려드립니다. 본 포스트를 참고하셔서 투자를 하는 행위는 삼가하여 주시기 바랍니다. 지난 포스트에 이어서 NCAV를 이용해서 백테스트 한 파이썬 코드 기록이다. 개념은 간단하다. NCAV가 "유동자산 - 총부채 > 시가총액" 조건이기 때문에 3가지 수치만 가져오면 된다. 어떻게... 나는 IT 업계에서 일하는 사람이 아니다. 당연히 파이썬도 독학으로 배운지 1년 정도 되었다. 그리고 금융관련 지식이라곤 재테크 책 몇 권 읽은것이 전부다. 이렇게 간단한 조건을 어렵게 생각하는 내가 과연 파이썬 코드로 구현할 수 있을지 너무나 내 자신에 대해 의구심이 가득했지만, 결과적으로는 만들었다. .. 2021. 10. 24.
퀀트투자 백테스트 - 워런버핏이 큰 돈을 번 NCAV 투자법 본 포스트는 퀀트투자를 위한 개인적인 백테스트 기록이며, 테스트 과정이 올바르게 진행되었다는 어떠한 증명도 할 수 없음을 알려드립니다. 본 포스트를 참고하셔서 투자를 하는 행위는 삼가하여 주시기 바랍니다. 퀀트투자 서적을 2권 읽었다. 예전에 읽었던 조엘그린블란트의 '주식시장을 이기는 작은 책'이나 그레이엄의 '현명한 투자자' 같은 뜬구름 잡는 책이 아니라 실용서에 가까운 책을 읽었다. 책을 읽을때는 금방 부자가 될 것 같이 행복했지만 막상 백테스트를 시작하려니 많은 어려움과 마주쳤다. 가장 큰 문제는 주가 정보나, 재무정보에 대한 데이터를 구할 수 없다는 점이다. 네이버 금융에서 크롤링해서 가져올 수 있는 데이터는 최대 5년 정도 되고, DART API를 통해서 가지고 올 수 있는 데이터는 9년정도 된.. 2021. 10. 22.
퀀트투자 백테스트를 한 번 해보기로 했다. 본 포스트는 퀀트투자를 위한 개인적인 백테스트 기록이며, 테스트 과정이 올바르게 진행되었다는 어떠한 증명도 할 수 없음을 알려드립니다. 본 포스트를 참고하셔서 투자를 하는 행위는 삼가하여 주시기 바랍니다. 책을 읽었다. 퀀트 투자 책이다. 2021.10.18 - [리뷰/책] - 할수있다 퀀트투자 - 독서후기 할수있다 퀀트투자 - 독서후기 이 책을 읽고나서 소크라테스의 "너 자신을 알라!!" 라는 문장이 떠올랐습니다. '투자'를 하든, 본인의 꿈을 이루든 성공확률을 높이는 방법은 본인의 재능과 장, 단점을 빠르게 파악하는게 아닐 dotsnlines.tistory.com 강환국이라는 분이 쓰신 책이다. 나보다 나이는 어리지만 이 책은 2016년도에 쓰셨고, 지금은 FIRE 족으로 경제적 자유를 누리고 있다고.. 2021. 10. 20.
파이썬으로 쉽고 빠르게 빈 폴더 찾아서 폴더명 바꾸기 컴퓨터를 사용해서 일을 하다보면, 많은 폴더를 사용할 때가 있습니다. 좀 더 복잡하고, 정신없이 일을 하다보면 빈 폴더도 여러개 만들어질 때도 있습니다. 이럴때 빈폴더인지 여부를 파이썬을 이용해서 쉽고, 빠르게 찾아낼 수 있습니다. 더욱이 빈폴더의 폴더명을 바꿔서 표시하는 것도 가능합니다. 파이선을 잘 활용하면, 여유있게 일을 할 수도 있겠네요. from tkinter import * import os 가져올 모듈은 'tkinter'와 'os' 모듈입니다. 사실 'os' 모듈만 있어도, 원하는 기능을 작동하기에 충분하지만, 나중에 exe 파일로 만들어서 보다 편리하게 사용하기 위해서 'tkinter'도 함께 사용했습니다. win = Tk() lbl = Label(win, text='현재 폴더에서 빈폴더를.. 2021. 10. 16.
파이썬으로 여러 폴더 빠르고 쉽게 만들기 컴퓨터로 작업을 하다 보면 수많은 폴더를 만들어야 할 때가 있습니다. 이런일이 반복된다면 파이썬으로 프로그래밍을 해서 업무를 좀 더 효율화 시킬 수 있습니다. 우선 만들 폴더의 명을 엑셀파일에 입력하도록 하겠습니다. C:D 열에 순서를 나타내는 번호와 폴더 이름을 입력했습니다. 주의할 점은 C열에 숫자는 문자입니다. 만약 숫자를 적으면 파이썬 코드에서 문자로 변경해 주어야 합니다. 수십개나 수백개를 하더라도 속도차이는 거의 없습니다. 일단 예시로 5개 폴더만 만들어 보겠습니다. from openpyxl import load_workbook from tkinter import * from tkinter import filedialog import os 모듈은 엑셀을 열어야 하니 openpyxl에서 기존 만.. 2021. 10. 14.
tkinter - 섭씨 온도를 화씨온도로 변환하는 프로그램 만들기 tkinter를 응용해서 섭씨온도(℃)를 입력하면, 화씨온도(℉)로 변환해주는 프로그램을 만들어 보도록 하겠습니다. from tkinter import * win = Tk() win.title('섭씨 온도를 화씨 온도로 변환') win.geometry('400x100') lbl_c = Label(win, text="섭씨온도", width=10) lbl_f = Label(win, text="화씨온도") lbl_c.grid(row=0, column=0) lbl_f.grid(row=1, column=0) ent_c = Entry(win, width=20) ent_f = Entry(win) ent_c.grid(row=0, column=1) ent_f.grid(row=1, column=1) btn_tr = But.. 2021. 10. 12.
tkinter - 이벤트 설정하기 지난번 포스트는 Window(창)를 만들고, Label, Button, Entry를 만들어서 배치를 해 보았습니다. 지난 포스튼 아래 링크를 참고하시기 바랍니다. tkinter - 그리드를 이용해서 레이블, 엔트리, 버튼 배치하기 이번 포스트는 이벤트를 설정하는 방법에 대해서 적어 보도록 하겠습니다. win = Tk() win.mainloop() 우선 창을 만들어 보겠습니다. 여기에 레이블과 버튼을 넣어 보도록 하겠습니다. str = ['더하기', '빼기'] win = Tk() count = StringVar(value = '0') lbl_data = Label(win, width=20, textvariable = count) lbl_data.grid(row=0, column=0, columnspan=2.. 2021. 10. 10.
tkinter - 그리드를 이용해서 레이블, 엔트리, 버튼 배치하기 지난 포스트에서 레이블, 엔트리, 버튼을 만드는 방법을 설명하였습니다. 지난 포스트는 아래 링크를 참고하시기 바랍니다. tkinter - 레이블, 엔트리, 버튼 만들기 이번 포스트는 Label, Entry, Button을 배치하는 방법을 다뤄 보도록 하겠습니다. from tkinter import * win = Tk() win.title('password') win.geometry('250x100') win.mainloop() 위와 같이 코드를 입력하여 창을 만들어 줍니다. 이렇게 창이 만들어 집니다. 보시면 아시겠지만, 비밀번호를 입력하는 창을 tkinter를 사용하여 만들려고 합니다. 우선 레이블 부터 배치 하도록 하겠습니다. lbl_name = Label(win, text='User Name') l.. 2021. 10. 8.
tkinter - 레이블, 엔트리, 버튼 만들기 지난 포스트에 이어서 tkinter 사용법에 대해서 적어 보도록 하겠습니다. 지난 포스트는 아래 링크를 참고하시기 바랍니다. tkinter 첫번째 - 윈도우 창 만들기 from tkinter import * win.mainloop() 우선 창을 만들고, from tkinter import * win = Tk() win.title('Multi Widget') win.geometry('300x200') win.mainloop() 창의 크기와 이름을 지정합니다. 이렇게 만든 창에, 'Lable'과 'Button' 그리고 텍스트를 입력할 수 있는 'Entry'를 넣어 보도록 하겠습니다. lbl = Label(win, text='label') lbl.pack() #레이블을 윈도에 적정하게 배치 레이블은 lbl이라.. 2021. 10. 6.
tkinter - 윈도우 창 만들기 파이썬으로 유용한 프로그램을 만들더라도 사용할때마다 파이참을 열어야 한다면 여간 번거러운 일이 아닐 수 있습니다. 파이썬으로 만든 코드를 실행파일로 만들더라도 최소한의 UI라도 있으면 훨씬 편하게 활용할 수 있습니다. PyQt나 Qtdesigner를 사용해도 되지만, tkinter 모듈을 사용하면 훨씬 빠르고 편리하게 원하는 프로그램을 만들 수 있습니다. 'tkinter'는 내장 모듈이기 때문에 별도로 설치할 필요는 없습니다. from tkinter import * tkinter 모듈을 불러와 보겠습니다. win = Tk() ~~ 중간에 내용 ~~~~~ win.mainloop() 이런 구조로 활용하시면 됩니다. win = Tk() win.mainloop() 이렇게만 코드를 입력하고 실행시켜 보겠습니다. .. 2021. 10. 2.