Добавить квантиль к результатам моделирования Монте-Карло в Python - PullRequest
0 голосов
/ 25 мая 2020

Я создал моделирование Монте-Карло для одного портфеля акций и хотел бы рассчитать и идеально отобразить определенные квантили. Например, в моем примере у меня 1000 прогонов, и я хотел бы вычислить 95% квантиль результата (t252).

import pandas_datareader.data as web
import pandas as pd
import datetime as dt
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import style
import quandl

style.use('ggplot')

quandl.ApiConfig.api_key = 'dnyYEnFxwxxxxxxxxxxx'


prices = quandl.get(dataset='WIKI/AAPL',start_date='2000-01-01',end_date='2010-12-31')['Close']
returns = prices.pct_change()
last_price = prices[-1]

num_simulations = 1000
num_days = 252

simulation_df = pd.DataFrame()

for x in range(num_simulations):
    count = 0
    daily_vol = returns.std()

    price_series = []

    price = last_price * (1  + np.random.normal(0, daily_vol))
    price_series.append(price)

    for y in range(num_days):
        if count == 251:
            break
        price = price_series[count] * (1  + np.random.normal(0, daily_vol))
        price_series.append(price)
        count += 1


    simulation_df[x] = price_series

fig = plt.figure()
plt.plot(simulation_df)
plt.axhline(y = last_price, color = 'r', linestyle = '-')
plt.show()

Может кто-нибудь сказать мне, как лучше всего получить go? У меня было go в функции квантиля Pandas, но, к сожалению, я не продвинулся далеко.

Заранее большое спасибо!

1 Ответ

0 голосов
/ 25 мая 2020

Pandas функция квантиля - это путь к go. Если вам нужно 252 значения (т.е. 0,95 квантиля каждого дня), вы можете использовать параметр оси:

simulation_df.quantile(.95, axis=1)

Если вам просто нужен быстрый обзор, транспонируйте и используйте функцию описания:

simulation_df.T.describe(percentiles=[.95, .75, .5, .25, .05])
...