[Python] 기하 브라운 운동

김혜은·2024년 12월 25일

🐍 Python

목록 보기
2/6

헥사곤 코드 자문

# 1. 필요한 라이브러리 설치
# pip install numpy pandas matplotlib yfinance

# 2. 파이썬 코드

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import yfinance as yf

# 주가 데이터 가져오기
# 'yfinance' 라이브러리를 사용하여 APPLE 주가 데이터를 가져옴
ticker = 'AAPL'
data = yf.download(ticker, start='2020-01-01', end='2023-01-01')
prices = data['Close']

# 로그 수익률 계산
# 주가의 로그 수익률을 계산
log_returns = np.log(prices / prices.shift(1)).dropna()

# 기하 브라운운동 파라미터 추정
mu = log_returns.mean() * 252  # 연간화
sigma = log_returns.std() * np.sqrt(252)  # 연간화

# 시뮬레이션 파라미터 설정
# 초기 주가(S0), 시뮬레이션 기간(T), 시간 간격(dt), 시뮬레이션 스텝 수(N), 시뮬레이션 경로 수(M)을 설정
S0 = prices[-1]  # 현재 주가
T = 1  # 시뮬레이션 기간 (1년)
dt = 1/252  # 하루
N = int(T / dt)  # 시뮬레이션 스텝 수
M = 10  # 시뮬레이션 경로 수

# 기하 브라운운동 시뮬레이션
np.random.seed(42)
S = np.zeros((N+1, M))
S[0] = S0

for t in range(1, N + 1):
    Z = np.random.standard_normal(M)
    S[t] = S[t-1] * np.exp((mu - 0.5 * sigma**2) * dt + sigma * np.sqrt(dt) * Z)

# 시뮬레이션 결과 시각화
plt.figure(figsize=(10, 6))
plt.plot(S)
plt.title(f'Geometric Brownian Motion Simulation of {ticker} Stock Price')
plt.xlabel('Time (days)')
plt.ylabel('Price')
plt.show()

0개의 댓글