[Python] S&P500에서 최고의 조합을 찾아주세요.

S&P500(미국 우량기업 약 500개)의 조합 중에서 가장 적합한 조합을 탐색하다.
이 글은 원본 코드의 대체적인 절차만 설명하고 모든 원본 코드의 설명과 최적화 결과는 본 글의 마지막 링크에서 설명할 것이다.

하고 싶은 일


S&P500(미국 우량기업 약 500개)의 조합에서 최고의 조합을 찾아내고 싶습니다.
이번에 발견한 최고의 조합은,
위험(파동성)이 가장 적은 조합
샤프 비율이 가장 높은 제품 조합
예화 비율은 기대 수익을 파동으로 나눈 양을 가리킨다.

포트폴리오 최적화 개요


다음 절차에 따라 진행하다.
1. S&P500의 주가 시퀀스 데이터 얻기
2. 주가 데이터를 바탕으로 각 주식의 기대 수익과 리스크(파동성, 협방차의 제곱근)를 구한다
3. 각종 비율의 투자 조합을 통해 예상 수익과 위험을 계산하여 효율적인 최첨단을 창조한다
4. 위험이 가장 적고 예리한 비율의 제품 조합을 찾는다
(5. 부서별 포트폴리오로 수정)

S&P500의 주가 시퀀스 데이터 가져오기


우선 S&P500 주식의 질(기대수익, 리스크)을 계산하기 위해서는 주식의 주가가 필요하다.
S&P500 품목 취득 정보는 아래 URL의 CSV에서 확인할 수 있습니다.
S&P500 품종의 취득은 아래에서 진행할 수 있다.
import pandas as pd
url = "https://raw.githubusercontent.com/datasets/s-and-p-500-companies/master/data/constituents.csv"
sp500 = pd.read_csv(url, encoding="SHIFT_JIS")

sp500 = sp500['Symbol'] #sp500ティッカーコードのデータフレーム
sp500_tickers = sp500.values.tolist() #データフレームをリストに変換
그리고 취득한 주식의 주가를 얻기 위해 판다스-datareader 등을 사용한다.
import datetime
import pandas_datareader.data as web
start = datetime.date(2014,1,1)
end = datetime.date.today()

data = web.DataReader(sp500_tickers, 'yahoo', start, end)["Adj Close"] #sp500の株価データを取得
단, 시작일(start) 이전에 상장하지 않은 주식은 주식 가격을 취득할 수 없음을 주의하십시오.
또 여러 번 주가를 올리면 시간이 걸리고 API 서버에도 좋지 않으므로 CSV 파일에 저장하는 것이 좋습니다.
data.to_csv('sp500_stocks_data.csv')
자세한 내용은 아래의 보도를 보십시오.

2. 주가 데이터를 바탕으로 각 주식의 기대 수익과 위험을 구한다


코드 전문은 문장의 마지막에 붙어 있는 링크에서 설명한다. 간단하게 설명하면 전체 조합의 기대 수익과 위험(파동성)을 계산하는 데 필요한 각 품종의 수익과 협방차 행렬을 계산한다.
# calculate daily and annual returns of the stocks
returns_daily = data.pct_change()
returns_annual = returns_daily.mean() * 250

# get daily and covariance of returns of the stock
cov_daily = returns_daily.cov()
cov_annual = cov_daily * 250
각 품종의 수익과 품종의 비례 벡터의 내적을 얻어 투자조합의 기대 수익을 구한다.
또한 비례 벡터로 각 품종 간의 협방차 행렬을 끼워 제곱근을 취하여 위험(파동성)을 구한다.

3. 효율적인 최전방 만들기


세로축은 기대 보답을 취하고 가로축은 파동성을 취하며 각 묘사점이 조합을 나타내는 그림을 만든다. 다음은 실제 생성의 효과적인 최첨단이다.

점이 녹색일수록, 예도가 클수록, 빨간색은 작아진다.

4. 파동이 가장 작고 예리한 제품 조합을 찾는다


방금 만든 유효한 최첨단 그림에서 파동성이 가장 작은 조합과 예도 비율이 가장 큰 조합을 골라라.
유효한 최첨단 그림에서 파란색 위치의 조합은 파동이 가장 작고 빨간색 위치의 조합은 예도 비율이 가장 크다.
이것들을 원도로 만들면 다음과 같다.

하나하나의 품종이 그려지지만, 너무 작아서 잘 모르겠어요. 따라서 부서별로 둥근 도표를 표시해 봅시다. (또한 마지막 링크는 표로 품종이 다른 결과를 표시합니다.)

5. 각 부서의 제품 조합으로 수정


이 점에 대해서는 다음 링크에서 설명합니다.

모든 소스 코드 및 실행 결과


모든 소스 코드


S&P500에서 가장 적합한 제품 조합을 찾아내 부서별로 표시된 코드 전문은 다음과 같다. 코드에 대한 설명도 있다.

실행 결과


다음 기사에는 집행 결과에 대한 상세한 내용만 적혀 있다.
실행 결과는 다음과 같습니다.
· 베스트 포트폴리오(위험이 가장 적고 샤프 비율이 가장 높음)의 브랜드 구성 비율
· 상술한 최상의 조합을 부문별로 총결산하다

좋은 웹페이지 즐겨찾기