책 제목 : 금융 파이썬 쿡북
예제 코드 다운로드 : http://www.acornpub.co.kr/book/python-finance
-> https://github.com/AcornPublishing/python-finance
많은 내용 생략!
1장 금융 데이터와 전처리
- 주식 데이터 다운로드
- 데이터 다운로드 가능한 api
- yfinance
라이브러리로 1일단위 주식 데이터 다운 가능
- quandl
api key 필요+ 더 많은 컬럼 지원
라이브러리로 1일단위 주식 데이터 다운 가능
- intrinio_sdk
api key 필요+ 더 많은 컬럼 지원
라이브러리로 1일단위 주식 데이터 다운 가능
- 수익률
- 단순 수익률
자산에 대해 집계
Rt = (Pt - Pt-1)/Pt-1
- 로그 수익률
시간에 대해 집계
Rt = log(Pt/Pt-1)
2장 파이썬에서의 기술적 분석
- 백테스팅(backtesting)
일부 휴리스틱이나 기술 지표를 사용해 구축된 거래 전략의 성능을 과거 데이터에 적용해 평가해 보는것
-> backtrader 를 사용해 테스트 가능
- 볼린저 밴드(Bollinger Band)
시간에 따른 특정 자산 가격과 변동성의 정보를 도출하는 데 사용되는 통계쩍인 방법
- RSI(Relative Strength Index)
자산의 종가를 사용해 매도/매수 조건을 실벽하는 지표
3장 시계열 모델링
시계열 분해
시계열을 여러 구성 요소로 나눠 데이터에 대한 이해를 높이는것
- 체계적 구성 요소
일반적이고 묘사와 모델링 가능
- level : 계열의 평균값
- trend : 추세의 추정치, 즉 특정 시점에서 연속 지점 사이의 값 변화
- seasonality : 단기 사이클로 반복되는 평균으로부터의 편차
- 비체계적 구성 요소
직접적으로 모델링 할 수 없음
- noise : 시계열상 랜덤 변화
- 가산적(additive) 유형
- 모델의 식
y(t) = level + trend + seasonality + noise
- 설형 모델
시간에 따른 크기 변화가 일정
- 추세는 선형
- 시간 주기에 대해 동일한 빈도와 폭을 가진 성형 계절성
- 승산적(multiplicative) 유형
- 모델의 식
y(t) = level * trend * seasonality * noise
- non-linear model
시간에 따른 변화가 일정하지 않다.
- 곡선이며 비선형 추세
- 시간 주기에 대해 증가/감소하는 빈도와 폭을 가지는 비선형 계절성
코드
- 코드 예시
- 이동 평균
df['rolling_mean'] = df.price.rolling(window=WINDOW_SIZE)
- 계절성 분해
from statsmodels.tsa.seasonal import seasonal_decompose
를 사용해서 볼 수 있음
- 페이스북의 Prophet 라이브러리도 잘되있음
시계열의 정상성 테스트
- 정상성(stationary) 시계열
평균, 분산, 공분산 등의 통계적인 속성이 시간에 대해 일정한 시계열
- stationary 테스트 방법
- ADF(Augmented Dickey-Fuller) 검정
시계열이 정상성이 아니다라는 귀무가설로 p-값이 1또는 임계치보다 큰 경우 귀무가설을 긱할 이유가 없음으로 정상성이 아니라는 결론을 내림
- KPSS(Kwiatkowski-Pjillips_Schmidt-Shine) 검정
귀무가설은 시계열이 정상성이다를 기보능로 해서 p값이 0.01이거나 큰 경우 대립가설이 선호되며 귀무가설을 기각
- 자기 상관 함수(PACF/ACF) 도면
시계열의 전상성 교정
- 디플레이션
CPI(소비자 물가 지수, Consumer Price Index)를 사용해 인플레이션을 반영
- 자연 로그
지수 추세를 선형에 가깝게 만듬
- differencing (차분)
현 관측값과 지연 값 사이의 차이를 취함
ex) 월별 데이터에 연간 계쩔성이 있는 경우에는 높은 차수를 사용(12)
- Box-Cos transformation(반스-콕스 변환)
시계열 데이터에 사용할 수 있는 조정
다른 지수 변환 함수를 결합해 분포를 정규 분포와 유사하게 만듦
단, 시계열 모든값이 양수여야함
지수 평활법(exponential smoothing)을 사용한 시계열 모델링
비정상 데이터에 적합하며 지수 이동 평균과 유사하게 작동
- SES(단순 지수 평활, Simple Exponential Smoothing)
가장 기본적인 모델을 단순 지수 평활이라고 한다.
0~1 사이의 a(알파)를 매개 변수화하여 값이 클수록 최근 관측값에 더 많은 가중치가 적용
0이면 과거데이터의 평균 1이면 마지막 관측값과 동일
추세나 계절성이 없는경우 적당함
- Holt(홀트)의 선형 추세 방법
SES의 확자응로서 추세 구성 요소를 모델 사양에 추가해 시게열의 추세롤 고려
감쇠 매개 변수를 추가해 추세를 완화
0.8 ~ 0.98 사이가 적절 1은 감쇠가 없는값과 동일
ARIMA(Autoregressive Moving Average)
- AR(Autoregressive) 모델
관측값과 지연된 값 아이의 관계를 사용
금융의 맥락에서 AR모델은 모멘텀과 평균 회귀 효과를 반영하려고 한다.
- I(Integration)
I는 원래 시계열을 차분해 정상성으로 만드는 것
통합을 담당하는 매개 변수는 d이며 차분을 적용하는 횟수를 말함
- MA(Moving Average)
관측값과 백색 노이즈 항간의 관계를 이용
이동 평균 모델은 관측된 시계열에 영향을 미치는 예측할 수 없는 충경르 설명
4. 다팩터 모델
- CAPM(자본 자산 가격 모델, Capital Asset Pricing Model)
E(ri) : 자산 i의 기대 수익률
rf : 무위험 금리 (국고채 등)
E(rm) : 시장의 기대 수익률, 즉 배타 계수
- beta
-1 < beta : 자산이 벤치 마크와 반대 방향이며, 벤치 마크의 음수보다 더 큰 정도로 이동
-1 < beta < 0 :자산이 벤치 마크와 반대 방향으로 이동
beta = 0 : 자산의 가격 변동과 시장 벤치 마크 사이에는 상관관계가 없다
0 < beta < 1 : 자산이 시장과 같은 방향으로 움직이잠ㄴ 크기는 더 작다.
beta =1 : 자산과 시장이 같은 방향과 같은 크기로 이동
beta > 1 : 자산이 시장과 같은 방향으로 더 크게 이동
위 식에서 rf를 좌항으로 이동시켜
E(ri) - rf = B *(E(rm) - rf) 로 나타낼 수있다
좌변은 위험 프리미엄 우변은 시장 프리미엄을 나타낸다
- 파마-프렌치 3-팩터
파마와 프렌치는 자신들의 유명한 논문에서 자산이나 포트폴리오의 초과 수익을 설명하는 두 가지 팩터를 추가해 CAPM 모델을 확장
- MKT(Markget Factor)
CAPM과 유사한 ㅅ장의 초과 수익률을 측정
- SMB(Small Minus Big)
시가 총액이 큰 주식 대비 시가 총액이 작은 주식의 초과 수익률
- HML(High Minus Low)
성장 주식 대비 초과 가치 주식의 초과 수익률을 츨정
가치 주식은 높은 시장가 대비 장부가(book-to-market) 비율을 갖고 성장 주식은 그 비율이 낮다.
5장 GARCH 클래스 모델을 사용한 변동성 모델링
ARIMA같은 모델은 시간에 대해 일정하지 않은 변동성은 설명할 수 없는 문제가 있음
- ARCH 모델을 사용한 주식 수익률의 변동성 설명
ARCH(Autoregressive Conditional Heteroskedasticity) 모델을 사용해 주식 수익률의 조건부 변동성을 설명
- 특징
- 시계열의 무조건과 조건부 차이를 명시적으로 인식
- 평균 프로세스에서 조건부 분산을 과거 잔차의 함수로 모델링
- 무조건 분산은 시간에 대해 일정하다고 가정
- 모델의 사전 잔차 수를 자기회긔 모델과 유사하게 지정해야 함
- 주어진 시계열에 다른 모델을 적합화한 후 얻은 자차에만 적용가능
- 잔차는 불연속 백색 잡음의 관측값과 유사해야함
6장 금융에서의 몬테카를로 시뮬레이션
몬테카를로(Monte Carlo) 시뮬레이션은 확률적 해석이 가능한 문제의 해결을 위해 반복된 랜덤 샘플리을 사용하는 계싼 알고리즘 부류
적분을 정확하게 추정하는데 사용할 수 있다.
- 이산화(discretization)
일정 기간 다양한 시나리오/결과가 될 수 있는 다양한 샘플경로를 생성하고, 기간은 지정된 수의 시간 단계로 분할하는 프로세스
기하 브라운 운동을 사용한 주가 역학 시뮬레이션
확률적 미분 방정식(SED, Stochastic Differential Equation)을 이용해 예측할 수 없는 주가 시뮬레이션을 옵션과 같은 많은 파생 상품의 평가
.. 어려워서 정리 포기!
7장 python으로 자산 배분
대상 프레임워크는 MPT(Modern Profoli Theory)이며 평균 분산분석이라고도 함
특정 위험 수준에 대해 기대 수익률을 극대화하고자 위험을 피하며 포트폴리오를 구성하는 방법(노벨 수상자인 Herry Markowitz가 도입 )
- 포트폴리오 구성시 중요한 지표들
- Sharpe ratio
흔히 쓰임, 표준 편차 단위당 초과 수익률을 측정(무위험이자 대비)
클수록 포트폴리오의 위험 조정 성능이 향상
- Calmar ratio
평균 연복리 수익률을 동일 기간 동안의 최대 드로우다운으로 나눈 값으로 정의
높을수록 좋음
- max drawdown(최대 드로우다운)
포트폴리오의 하락 위험에 대한 지표
투자 과정에서 peak-to-velly를 측정(최고 이득대비 손실)
낮을수록 좋음
- 안정성
누적 로그 수익률에 대한 선형 적합의 R-제곱
- Omega ratio
수익 목표 임계깞에 대한 손실 대비 이익의 확률 가중비율
오메가가 비율이 샤프비율보다 좋은 이유는 모든 수익률 분포 모멘트를 고려 (샤프는 처음 두가지 고려)
- Sortino ratio
샤프 비율을 수정한 버전
분모의 표준 편차가 하방(downside)편차로 대체
- skew(외도)
왜도는 비대칭의 정도, 분포가 정규 분포보다 비뚤어진 정도를 측정
- kurtosis(첨도)
꼬리 중 하나에서 극단적인 값을 측정
첨도가 큰 분포는 가우스분포의 꼬리를 초과하는 꼬리 데이터를 나타냄 -> 크고 작은 수익률이 자주 발생
- tail ratio
일 수익률의 95,5번째 백분위 수 사이의 비율
~0.8의 꼬리 비율은 손실이 이익의 ~1.25배를 의미
- 일일 밸류-앳-리스크
평균 - 2*표준편차 로 계산
평균 - (기간동안 평균 포트폴리오 수익률)
참고
- CAPM 수식 스림
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=carrot_1027&logNo=220780295571