Windows 10, Python 3.8, все библиотеки и модули:
import numpy as np
import arch as arch_model
import pandas as pd
import scipy.stats
import matplotlib.pyplot as plt
from datetime import datetime
from arch import arch_model
import yfinance as yf
После следующей функции получаю ошибку
После этой функции получаю ошибку
import numpy as np
import arch as arch_model
import pandas as pd
import scipy.stats
import matplotlib.pyplot as plt
from datetime import datetime
from arch import arch_model
import yfinance as yf
Python:
def make_copula_simulation(returns, copula_func, n_samples, univariate_dist):
# объявляем копулу
cop = copula_func(dim=returns.shape[1])
cdfs = returns.copy()
distribution_params = {}
# моделируем частные распределения для каждой акции
for col in cdfs.columns:
if univariate_dist == 't':
t_df, t_mean, t_sigma = scipy.stats.t.fit(returns[col])
distribution_params[col] = (t_df, t_mean, t_sigma)
cdfs[col] = scipy.stats.t.cdf(cdfs[col], df=t_df, loc=t_mean, scale=t_sigma)
elif univariate_dist == 'gennorm':
beta, loc, scale = scipy.stats.gennorm.fit(returns[col])
distribution_params[col] = (beta, loc, scale)
cdfs[col] = scipy.stats.gennorm.cdf(cdfs[col], beta, loc, scale)
elif univariate_dist == 'garch':
cdf, am, res = get_garch_residuals(returns[col], dist)
distribution_params[col] = (am, res)
cdfs[col] = cdf
# фитим копулу
cop.fit(cdfs)
# делаем сэмплирование квантилей из совместного распределения копулы
copula_simulations = cop.random(n_samples, seed=42)
copula_simulations = pd.DataFrame(copula_simulations, columns=cdfs.columns)
return_simulations = copula_simulations.copy()
# трансформируем квантили в доходности с помощью частных функций распределений из первого шага
for col in cdfs.columns:
if univariate_dist == 't':
t_df, t_mean, t_sigma = distribution_params[col]
return_simulations[col] = scipy.stats.t.ppf(copula_simulations[col], df=t_df, loc=t_mean, scale=t_sigma)
elif univariate_dist == 'gennorm':
beta, loc, scale = distribution_params[col]
return_simulations[col] = scipy.stats.gennorm.ppf(copula_simulations[col], beta, loc, scale)
elif univariate_dist == 'garch':
am, res = distribution_params[col]
return_simulations[col] = make_garch_forecast(copula_simulations[col], dist, res, am)
# возвращаем матрицу сэмплированных доходностей
return return_simulations
После следующей функции получаю ошибку
Python:
return_simulations = make_copula_simulation(returns, ClaytonCopula, n_samples=10**5, univariate_dist='garch')