固定收益
固定收益投資組合優化
我正在嘗試解決固定收益領域的最大夏普比率投資組合。為此,我在 python 中使用 CVXPY。我用這篇論文作為參考。
這是我的“設置”:
## SET UP PROBLEM C = np.asmatrix(new_cov) mu = np.asmatrix(s['E(r) after FXh']/100) mu0 = np.asmatrix(cleared_swaps.iloc[z]['CHF1']/100) ## INITIATE WEIGHT VARIABLE y = cp.Variable(len(framework)) # DEFINE CONSTRAINTS AND MODIFY FOR QUADRATIC PROBLEM A_mod = A - b.T ## CREATE CONSTRAINTS constraints = [(mu-mu0)@y==1, 0 <= y, A_mod@y.T >= 0] ## FORM OBJECTIVE obj = cp.Minimize(cp.quad_form(y,C)) ## FORM AND SOLVE PROBLEM prob = cp.Problem(obj, constraints) try: prob.solve() w = y.value/sum(y.value) w[w<=0] = 0 w = w/sum(w)*1 except: print('Exception. Using Market weights') w = np.repeat(df_mkt_val_pct.iloc[z][live_currencies.index.tolist()].values,2)/2 w = w/sum(w)*1
其中 A 基本上持有子投資組合久期(例如不同的歐元久期):
和 b 持有 DV01 限制:
現在,當我執行這個腳本時,我得到的投資組合是“反向優化的”,這意味著我的表現一直低於指數。如果我然後反轉最佳權重(例如,我將一種貨幣的減持添加到 BM 權重,這樣我最終得到超重),那麼回報符合預期。
但在我看來,這種行為很奇怪。有沒有辦法如何“翻轉”優化,以便我得到優化的值,然後我可以使用而不必“反轉”它們?
您是否正確地為求解器製定了問題?如果你想最大化一個函式(銳化率) $ f $ , 等價於最小化 $ -f $ . 這種混淆(最小化而不是最大化)基本上會導致與您類似的結果。
您的問題表述是錯誤的,您必須使用Charnes and Cooper 轉換。
這意味著您的約束
(mu-mu0)@y==1
必須是(mu-mu0)@y==k
andw=y/k
,這意味著k==cp.sum(y)
。