首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Python中为Efficient Frontier添加附加约束?

如何在Python中为Efficient Frontier添加附加约束?
EN

Stack Overflow用户
提问于 2020-08-10 05:32:08
回答 1查看 380关注 0票数 1

我有一个表,列出了每种资产的预期收益和波动率,还有这些资产的协方差矩阵,最后,这些资产中的一部分是寻求回报的一部分,其余的资产是寻求负债的一部分,我想添加寻求回报和寻求负债的权重约束。

我正在使用一种优化方法来解决有效边界,但我想在我的优化问题中添加两个约束。我的优化问题是:

代码语言:javascript
复制
                 Minimise  Volatility 
                    x
                subject to portfolio returns = target
                           Sum of weights = 1

我想添加两个额外的约束条件寻求权重的回报总和= 0.65寻求权重的负债总和= 0.35我的代码写成:

代码语言:javascript
复制
def efficient_return(mean_returns, cov_matrix, target):
    num_assets = len(mean_returns)
    args = (mean_returns, cov_matrix)

    def portfolio_return(weights):
        return portfolio_annualised_performance(weights, mean_returns, cov_matrix)[1]

    constraints = ({'type': 'eq', 'fun': lambda x: portfolio_return(x) - target},
                   {'type': 'eq', 'fun': lambda x: np.sum(x) - 1})
    bounds = tuple((0,1) for asset in range(num_assets))
    result = sco.minimize(portfolio_volatility, num_assets*[1./num_assets,], args=args, method='SLSQP', bounds=bounds, constraints=constraints)
    return result


def efficient_frontier(mean_returns, cov_matrix, returns_range):
    efficients = []
    for ret in returns_range:
        efficients.append(efficient_return(mean_returns, cov_matrix, ret))
    return efficients

我的投资组合列表是:

代码语言:javascript
复制
lista_labels = ['Global Equity', 'TIPS','Long Duration Bonds – Gov’t / Credit', 'Long Duration Bonds – Credit',
               'High Yield Bonds','Emerging Market Bonds','Real Estate (Broad Market)','Global REITs',
               'Commodities','Private Infrastructure','25-year Government Bond','Broad Hedge Funds (Universe)'
                ,'Public Infrastructure','Tactical Asset Allocation','Core Plus Fixed Income']

我的退货清单是:

代码语言:javascript
复制
lista_RS = ['Global Equity','High Yield Bonds','Emerging Market Bonds','Real Estate (Broad Market)',
           'Global REITs','Commodities','Private Infrastructure','Broad Hedge Funds (Universe)',
           'Public Infrastructure','Tactical Asset Allocation']

我的责任是:

代码语言:javascript
复制
lista_LS = ['TIPS','Long Duration Bonds – Gov’t / Credit','Long Duration Bonds – Credit','25-year Government Bond',
           'Core Plus Fixed Income'] 

我想复制这个表http://prntscr.com/twredz。提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-08-10 06:55:34

代码语言:javascript
复制
constraints = (
{'type': 'eq', 'fun': lambda x: portfolio_return(x) - target},
{'type': 'eq', 'fun': lambda x: np.sum(x) - 1},
{'type': 'eq', 'fun': lambda x: np.sum(x[x>0]) - 0.65},
{'type': 'eq', 'fun': lambda x: np.sum(x[x>0]) - 0.35}
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63331544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档