글에 실린 표와 차트는 아래 파이썬 스크립트로 만들었습니다. 파일 이름을 누르면 내려받을 수 있습니다. 결과를 직접 다시 돌려 보거나, 기간과 가정을 바꿔 보는 데 쓰시면 됩니다.

실행하기 전에

  • 파이썬 3와 pandas, numpy, matplotlib이 필요합니다. 한국 데이터를 쓰는 스크립트는 finance-datareader나 pykrx도 필요합니다.
  • 한 스크립트가 다른 스크립트의 함수를 가져다 쓰는 경우가 있습니다. 표의 “함께 받을 파일”을 같은 폴더에 두고 실행하세요.
  • 결과는 스크립트가 있는 폴더 아래 output/에 저장됩니다.
  • 대부분 --synthetic 옵션을 주면 실제 데이터 대신 난수 데이터로 동작만 확인할 수 있습니다.
  • 한국거래소(KRX) 종목 데이터를 받는 스크립트는 KRX 정보데이터시스템 계정이 필요합니다. 계정 정보는 코드에 적지 말고 환경 변수 KRX_ID, KRX_PW로 넘깁니다. 받은 KRX 데이터 파일은 이 사이트에서 다시 배포하지 않습니다.

퀀트 투자 입문

글 스크립트 함께 받을 파일
첫 백테스트 ~ 위험 지표 run_series_backtests.py  
자산 배분 기초 asset_allocation_basics.py  
리밸런싱 rebalancing_test.py asset_allocation_basics.py
상관관계와 분산투자 correlation_math.py asset_allocation_basics.py
밸류 팩터 value_factor.py  
퀄리티 팩터 quality_factor.py  
저변동성 팩터 low_volatility_factor.py quality_factor.py
사이즈 팩터 size_factor.py value_factor.py, quality_factor.py
멀티팩터 multifactor.py quality_factor.py
듀얼 모멘텀 dual_momentum.py asset_allocation_basics.py, value_factor.py
올웨더 포트폴리오 all_weather.py asset_allocation_basics.py, value_factor.py

퀀트 실전

글 스크립트 함께 받을 파일
pykrx로 재무 데이터 받기 krx_snapshot.py, krx_fetch_monthly.py, krx_fetch_returns.py  
종목 스크리닝 screener.py krx_snapshot.py
워크포워드 검증 walkforward.py krx_snapshot.py, screener.py
몬테카를로 montecarlo.py walkforward.py, krx_snapshot.py, screener.py
평균-분산 최적화 mean_variance.py all_weather.py, asset_allocation_basics.py, value_factor.py
리스크 패리티 risk_parity.py all_weather.py, asset_allocation_basics.py, value_factor.py
켈리 공식 kelly.py all_weather.py, asset_allocation_basics.py, value_factor.py
추세추종과 손절 stop_loss.py  
세금과 거래 현실 tax_drag.py value_factor.py
자동매매 파이프라인 trading_pipeline.py  

그 밖의 글

글 스크립트 함께 받을 파일
코스피에 요일 효과가 있을까 weekday_effect.py  
레버리지 ETF를 오래 들고 있으면 생기는 일 leveraged_etf.py  
목돈을 한 번에 넣을까, 나눠 넣을까 dca_vs_lump_sum.py  
코스피 최고의 날 10일을 놓치면 best_worst_days.py  
변동성 타기팅 vol_targeting.py  
같은 코드가 다른 숫자를 낸 날 data_cache.py  

워크포워드와 몬테카를로 스크립트는 월말 스냅샷과 구간별 수익률 파일(data/krx/ 폴더)이 있어야 돌아갑니다. 먼저 krx_fetch_monthly.py와 krx_fetch_returns.py로 직접 받아 두세요.

코드가 돌아가지 않거나 글의 숫자와 다르게 나오면 문의로 알려 주세요.