python中的多周期投资组合优化

时间:2017-09-10 17:22:21

标签: python optimization finance solver nonlinear-optimization

场景:我正在尝试进行多个投资组合优化,在多周期场景中使用不同的约束(权重,风险,风险厌恶......)。

我已经做过的事情:从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

2 个答案:

答案 0 :(得分:1)

  1. 标准均值 - 方差投资组合模型是一个静态模型。模型中没有动态。 (时间序列仅用于估计方差 - 协方差矩阵和预期收益)。一些相关模型可以回答诸如何时以及如何重新平衡等问题。
  2. 限制投资组合中的资产数量会导致所谓的基数约束的投资组合问题。这基本上变成了MIQP(混合整数二次规划问题)。

答案 1 :(得分:0)

multiperiod 的问题是你的模型会过拟合。另一方面,您可以假设重新平衡期来回测传统的投资组合优化模型。 Riskfolio-Lib 有一个使用 backtrader 的例子,它将标准普尔 500 指数与使用季度重新平衡的不同投资组合进行比较。您可以查看此链接中的示例:https://riskfolio-lib.readthedocs.io/en/latest/examples.html