场景:我正在尝试进行多个投资组合优化,在多周期场景中使用不同的约束(权重,风险,风险厌恶......)。
我已经做过的事情:从cvxpy的例子中我发现了如何在非线性二次公式下优化投资组合,从而得出投资组合中资产的权重列表。我的问题是,虽然我有15年的月度数据,但我不知道如何针对不同时期进行优化(代码,就其当前形式而言,在我的数据的整个时间跨度内产生最佳组合)
问题1:是否可以针对不同时段优化代码。例如1,3,4,6,9,12个月(在这种情况下,每个时期产生不同的权重)如果是这样,那怎么可能呢?。
问题2:是否有可能限制每个投资组合中的资产数量?实现这一目标的最佳方法是什么? (当前代码使用了所有这些代码,但我想测试资产数量何时受限,以控制营业额水平。)
代码:
from cvxpy import *
from cvxopt import *
import pandas as pd
import numpy as np
prices = pd.DataFrame()
logret = pd.DataFrame()
normret = pd.DataFrame()
returns = pd.DataFrame()
prices = pd.read_excel(open('//folder//Dgms89//calculation v3.xlsx', 'rb'), sheetname='Prices Final')
logret = pd.read_excel(open('//folder//Dgms89//calculation v3.xlsx', 'rb'), sheetname='Returns log')
normret = pd.read_excel(open('//folder//Dgms89//calculation v3.xlsx', 'rb'), sheetname='Returns normal')
returns = normret
def calculate_portfolio(returns, selected_solver):
cov_mat = returns.cov()
Sigma = np.asarray(cov_mat.values)
w = Variable(len(cov_mat))
gamma = quad_form(w, Sigma)
prob = Problem(Minimize(gamma), [sum_entries(w) == 1])
prob.solve(solver=selected_solver)
weights = []
for weight in w.value:
weights.append(float(weight[0]))
return weights
答案 0 :(得分:1)
答案 1 :(得分:0)
multiperiod 的问题是你的模型会过拟合。另一方面,您可以假设重新平衡期来回测传统的投资组合优化模型。 Riskfolio-Lib 有一个使用 backtrader 的例子,它将标准普尔 500 指数与使用季度重新平衡的不同投资组合进行比较。您可以查看此链接中的示例:https://riskfolio-lib.readthedocs.io/en/latest/examples.html