【问题标题】:Scipy optimization with multiple bounds具有多个边界的 Scipy 优化
【发布时间】:2016-10-11 13:21:25
【问题描述】:

我正在解决一个投资组合优化问题,我需要以这样一种方式分配权重(资本),以使最终投资组合具有尽可能低的历史波动率。目前,我对每只股票的权重总和及其平方权重有两个限制。每只股票的分配范围为 (0.00, 0,02)。

目前我的代码如下所示:

def portfolio_vol(w):
    #compute porfolio volatility
    portfolio_volatility = np.sqrt(w.T.dot(cov_matrix).dot(w))
    return portfolio_volatility

w 是一个等权向量,计算为w = 1.0/len(composition)

def find_optimal_allocations():
    bnds = tuple((0.00, 0.02) for x in weights)
    cons = ({'type': 'eq', 'fun': lambda x: 1 - sum(x)}, {'type': 'ineq', 'fun': lambda x: -sum(x**2) + 0.02}) 
    result = spo.minimize(portfolio_vol, weights, method='SLSQP', bounds = bnds, constraints = cons)
    return result.x

我将我的权重存储在 MultIndex pandas Series 中,其中股票按国家/地区分组并且最初是等权重的:

Country  Ticker         
AS       OMV AV Equity      0.020000
BE       SOLB BB Equity     0.020000
FI       NESTE FH Equity    0.020000
FR       FP FP Equity       0.020000
GB       LAND LN Equity     0.020000
GE       BAS GR Equity      0.020000
         HEI GR Equity      0.020000
GR       TITK GA Equity     0.020000
IR       CRH ID Equity      0.020000
         RYA ID Equity      0.020000
...

US       AMAT US Equity     0.020000
         AMGN US Equity     0.020000
         APA US Equity      0.020000

我想在find_optimal_allocations() 中加入额外的限制,以便为每个国家/地区的最大权重设置限制:s.groupby(level=0,axis=0).sum()

Country
AS    0.020000
BE    0.020000
FI    0.020000
FR    0.020000
GB    0.020000
GE    0.040000
GR    0.020000
IR    0.040000
US    0.400000

例如在这些范围内:

[(.05,.10), (.05,.10), (.05,.10), (.05,.10), (.05,.10), (.05,.10), (.05,.10), (.05,.10), (.05,.20)]

如何将这些界限包含在我的优化函数中,以便同时考虑国家权重约束和单个库存约束?

【问题讨论】:

    标签: python scipy mathematical-optimization finance


    【解决方案1】:

    修改您的优化函数,以便如果任何资产的权重超出其界限,则会受到高额惩罚。使用这个新功能,您可以尝试找到梯度并执行梯度上升以优化您的回报/奖励。

    【讨论】:

    • 感谢您的回复。我不明白为什么要修改优化功能。我希望为国家权重添加额外的界限,类似于您在此post 中为资产类别添加界限的方式据我所知,您分两步进行了优化 1)针对单个权重进行优化 2)针对按资产类别分组的权重进行优化.但是我不完全理解代码。也许您可以解释一下您的解决方案背后的逻辑?
    • 那是一种非最佳方法。底线是您希望在 n 维空间中找到一些局部最优值。为简单起见,假设您只优化三个资产,因此您的目标是在 3D 表面上找到一个峰值。通过更改您的功能,您实际上是在修改该表面,以便走出该界限相当于走下悬崖。
    猜你喜欢
    • 2013-08-15
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多