【问题标题】:portfolio optimization: how to maximize return while subject to target risk using cvxopt.solver.qp?投资组合优化:如何使用 cvxopt.solver.qp 在承受目标风险的同时最大化回报?
【发布时间】:2017-07-15 01:00:01
【问题描述】:

在这里尝试优化投资组合权重分配,通过使用 cvxopt 模块限制风险来最大化我的回报函数。我的代码如下:

from cvxopt import matrix, solvers, spmatrix, sparse
from cvxopt.blas import dot
import numpy
import pandas as pd
import numpy as np
from datetime import datetime

solvers.options['show_progress'] = False
# solves the QP, where x is the allocation of the portfolio:
# minimize   x'Px + q'x
# subject to Gx <= h
#            Ax == b
#
# Input:  n       - # of assets
#         avg_ret - nx1 matrix of average returns
#         covs    - nxn matrix of return covariance
#         r_min   - the minimum expected return that you'd
#                   like to achieve
# Output: sol - cvxopt solution object

dates = pd.date_range('2000-01-01', periods=6)
industry = ['industry', 'industry', 'utility', 'utility', 'consumer']
symbols = ['A', 'B', 'C', 'D', 'E']
zipped = list(zip(industry, symbols))
index = pd.MultiIndex.from_tuples(zipped)

noa = len(symbols)

data = np.array([[10, 11, 12, 13, 14, 10],
                 [10, 11, 10, 13, 14, 9],
                 [10, 10, 12, 13, 9, 11],
                 [10, 11, 12, 13, 14, 8],
                 [10, 9, 12, 13, 14, 9]])

market_to_market_price = pd.DataFrame(data.T, index=dates, columns=index)
rets = market_to_market_price / market_to_market_price.shift(1) - 1.0
rets = rets.dropna(axis=0, how='all')

# covariance of asset returns
P    = matrix(rets.cov().values)


n = len(symbols)
q = matrix(np.zeros((n, 1)), tc='d')
G = matrix(-np.eye(n), tc='d')
h = matrix(-np.zeros((n, 1)), tc='d')
A = matrix(1.0, (1, n))
b = matrix(1.0)
sol = solvers.qp(P, q, G, h, A, b)

我应该使用蒙特卡罗模拟来获得目标风险同时最大化回报吗?解决这个问题的最佳方法是什么?谢谢。

【问题讨论】:

    标签: python optimization portfolio cvxopt


    【解决方案1】:

    这并不像人们想象的那么简单。典型的投资组合优化问题是在目标收益的情况下最小化风险,这是一个线性约束问题,具有二次目标;即,二次规划(QP)。

    minimize        x^T.P.x
    subject to      sum(x_i) = 1
                    avg_ret^T.x >= r_min
                    x >= 0 (long-only)
    

    您在此处想要最大化受目标风险影响的回报,是一个二次约束二次规划 (QCQP),如下所示:

    maximize        avg_ret^T.x
    subject to      sum(x_i) = 1
                    x^T.P.x <= risk_max
                    x >= 0 (long-only)
    

    使用凸二次约束,优化发生在包含二阶锥因子的更复杂的锥上。如果要继续使用 cvxopt,则必须将 QCQP 转换为二阶锥程序 (SOCP),因为 cvxopt 没有用于 QCQP 的显式求解器。如您在documentation 中所见,带有 cvxopt 的 SOCP 具有与典型 QP 不同的矩阵语法。这个blog post 对如何针对这个特定问题执行此操作进行了非常好的演练。

    【讨论】:

      【解决方案2】:

      我认为您正在尝试计算夏普投资组合。我相信可以证明,这是一个等效于最小化风险 (w'Pw) 的问题,对回报有一个等式约束 (w'*rets = 1)。这将更容易在二次程序员 qp 下指定。

      【讨论】:

      • 我认为夏普投资组合是我试图找到的投资组合之一。但是,如果我想用我的容忍风险来最大化我的回报,我该如何计算权重?
      猜你喜欢
      • 2016-10-08
      • 1970-01-01
      • 2019-08-28
      • 2018-11-20
      • 2021-08-20
      • 1970-01-01
      • 2018-03-06
      • 2020-10-15
      • 1970-01-01
      相关资源
      最近更新 更多