주가의 몬테카를로 시뮬레이션 (Python사용)

내 게시물 중 하나에서 구현을 위해 Python을 사용하여 임의 걷기 예측의 개념을 소개했습니다. 이 게시물에서는 주가 랜덤 워크의 몬테카를로 시뮬레이션을 수행하고 싶습니다. 이를 위해 다음과 같은 가상의 주가 내역을 사용합니다.

# 가상의 일일 주식 종가로 목록 선언
history_prices = [180,192,193,195,191,199,198,200,199,203,205,207,205,208,201,203,204,201,205,206,207]
print(stockPrices)
[180, 192, 193, 195, 206, 211, 191, 204, 215, 190, 205, 207, 205, 211, 222, 215, 245, 201, 205, 206, 214]

다음 단계를 준비하기 위해 이제 모든 관련 Python 모듈을 가져옵니다.

# 계산을위한 가져 오기 통계 예 : 가격 이력의 표준 편차
import statistics as stat
# 플로팅을 위해 pyplot 가져 오기
import matplotlib.pyplot as plt
# 난수 생성을 위해 임의 가져 오기
import random as rnd

임의의 주가 변동을 가정하면 임의의 주가 변동을 모델링 할 수 있도록 가상의 가격 기록의 상대적 변화에서 표준 편차를 도출합니다.

relative_prices = []
for i in range(0,len(history_prices)):
    if i == 0:
        pass
    else:
        relative_prices.append((history_prices[i]-history_prices[i-1])/(history_prices[i-1])) 
std_prices = stat.stdev(relative_prices)
print(std_prices)
0.021375589655016836

이제 무작위 가격의 표준 편차를 기반으로 무작위 가격 변동을 가정하여 미래 100 일 동안의 예시적인 무작위 가격 변동을 모델링합니다. 나는 무작위 정규 분포를 가정합니다. 역사상 마지막으로 알려진 가격이 시작점 역할을합니다.

# 100 일 동안 무작위 가격 변동 모델링
# -- 계산 수행, 기능 정의
def randomWalk(stdev,pastPrices):
    days = [i for i in range(1,101)]
    prices = []
    price = pastPrices[-1]
    for i in range(1,101):
        price = price + price*rnd.normalvariate(0,stdev)
        prices.append(price)
    return([days,prices])
# -- 계산 수행, 기능 사용
prices = randomWalk(std_prices,history_prices)
# -- 임의의 걷기를 선 플롯으로 시각화
plt.plot(prices[0],prices[1])
plt.title("random price walk")
plt.xlabel("day")
plt.ylabel("stock price")
Text(0, 0.5, 'stock price')

추가 랜덤 워크를 다시 계산하여 주가 변동에 대한 몬테카를로 시뮬레이션을 만들어이 프로세스를 반복 할 수 있습니다. 아래 예에서는 30 개의 개별 걷기에 대해 무작위 걷기 프로세스를 반복합니다.

plt.figure()
for i in range(0,30):
    prices = randomWalk(std_prices,history_prices)
    plt.plot(prices[0],prices[1])
plt.title("monte-carlo simulation of stock price development")
plt.xlabel("day")
plt.ylabel("stock price")
Text(0, 0.5, 'stock price')

Leave a Reply

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

Close

그 밖의 기능