파이썬을 이용한 포트폴리오 수익률 및 리스크 시뮬레이션

이번 글에서는 파이썬을 이용하여 포트폴리오의 수익률 및 리스크를 시뮬레이션하는 방법에 대해 알아보겠습니다.

1. 포트폴리오 수익률 시뮬레이션

포트폴리오의 수익률을 시뮬레이션하기 위해서는 가상의 주식 가격 데이터를 생성해야 합니다. 이때, 이전 주가와 변동성을 기반으로 임의의 주식 가격을 생성할 수 있습니다.

1.1. 주식 가격 데이터 생성

가상의 주식 가격 데이터는 정규분포를 따르는 확률 변수를 사용하여 생성할 수 있습니다. 예를 들어, 로그 정규분포(log-normal distribution)를 이용하여 주식 가격 데이터를 생성할 수 있습니다.

import numpy as np

# 주식 가격 데이터 생성 함수
def generate_stock_prices(init_price, drift, vol, num_periods):
    t = np.arange(num_periods)
    log_returns = drift * t + vol * np.random.randn(num_periods)
    prices = init_price * np.exp(log_returns)
    return prices

# 초기 주가, 수익률, 변동성, 기간 설정
initial_price = 1000
drift = 0.05  # 평균 수익률
volatility = 0.2  # 변동성
num_periods = 252  # 일 년 기준으로 252개의 거래일

# 주식 가격 데이터 생성
stock_prices = generate_stock_prices(initial_price, drift, volatility, num_periods)

위의 코드에서 generate_stock_prices 함수를 통해 주식 가격 데이터를 생성하였습니다. 초기 주가(initial_price), 평균 수익률(drift), 변동성(volatility), 기간(num_periods)을 설정한 후, np.random.randn 함수를 이용하여 가우시안 정규분포를 따르는 난수를 생성하여 로그수익률을 계산한 뒤, 초기 주가에 누적하여 주식 가격을 구합니다.

1.2. 포트폴리오 수익률 계산

주식 가격 데이터를 생성한 뒤에는 이를 이용하여 포트폴리오 수익률을 계산할 수 있습니다. 포트폴리오 수익률은 각 주식 비중을 고려하여 계산합니다.

# 포트폴리오 수익률 계산 함수
def calculate_portfolio_returns(weights, returns):
    portfolio_returns = np.dot(returns, weights)
    return portfolio_returns

# 주식 비중 설정
weights = np.array([0.5, 0.3, 0.2])

# 개별 주식의 수익률 계산
individual_returns = np.diff(stock_prices) / stock_prices[:-1]

# 포트폴리오 수익률 계산
portfolio_returns = calculate_portfolio_returns(weights, individual_returns)

위의 코드에서 calculate_portfolio_returns 함수를 통해 포트폴리오 수익률을 계산하였습니다. 주식 비중(weights)을 설정한 후, 개별 주식의 수익률(individual_returns)을 계산하고, 가중합을 통해 포트폴리오 수익률을 구했습니다.

2. 포트폴리오 리스크 시뮬레이션

포트폴리오 리스크를 시뮬레이션하기 위해서는 주식 가격 데이터를 기반으로 포트폴리오의 변동성을 계산해야 합니다.

2.1. 포트폴리오 변동성 계산

포트폴리오의 변동성은 개별 주식의 변동성과 각 주식 비중을 고려하여 계산할 수 있습니다. 아래의 코드는 포트폴리오의 변동성을 계산하는 방법을 보여줍니다.

# 포트폴리오 변동성 계산 함수
def calculate_portfolio_volatility(weights, returns):
    portfolio_variance = np.dot(weights.T, np.dot(returns.cov(), weights))
    portfolio_volatility = np.sqrt(portfolio_variance)
    return portfolio_volatility

# 개별 주식의 일간 수익률 계산
individual_returns = np.diff(stock_prices) / stock_prices[:-1]

# 주식 가격 데이터를 데이터프레임으로 변환
import pandas as pd
df_returns = pd.DataFrame(individual_returns)

# 포트폴리오 변동성 계산
portfolio_volatility = calculate_portfolio_volatility(weights, df_returns)

위의 코드에서 calculate_portfolio_volatility 함수를 통해 포트폴리오의 변동성을 계산하였습니다. 주식 가격 데이터를 데이터프레임(df_returns)으로 변환한 후, cov 함수를 이용하여 공분산 행렬을 구하고, 주식 비중과의 내적으로 포트폴리오 분산을 계산하였습니다. 이후, 포트폴리오 분산의 제곱근을 구하여 포트폴리오 변동성을 계산하였습니다.

마무리

이번 글에서는 파이썬을 이용하여 포트폴리오의 수익률 및 리스크를 시뮬레이션하는 방법을 알아보았습니다. 포트폴리오의 수익률을 시뮬레이션하기 위해서는 주식 가격 데이터를 생성하고, 포트폴리오의 수익률을 계산하는 과정이 필요합니다. 마찬가지로, 포트폴리오의 리스크를 시뮬레이션하기 위해서는 주식 가격 데이터를 기반으로 포트폴리오의 변동성을 계산해야 합니다. 파이썬을 활용하여 효율적으로 포트폴리오의 수익률 및 리스크를 시뮬레이션하여 투자 결정에 도움을 줄 수 있습니다.

#파이썬 #포트폴리오