我學習了一門關于投資組合理論的金融python課程。我必須創建一個帶有嵌套函式的函式。
我的問題是我有一個錯誤資訊:"neg_sharpe_ratio() 缺少2個必要的位置引數。er'和'cov'",而在我看來,"er "和 "cov "已經在下面的函式msr中定義了。所以我明白它們是如何被遺漏的。
f from scipy.optimization import minimize
def msr(riskfree_rate, er, cov):
n= er.shape[0]
init_guess= np.repeat(1/n, n)
bounds=((0.00, 1.0),)*n
weights_sum_to_1 = {
'type' : 'eq' , #
'fun' : lambda weights: np.sum(weights) - 1 ##.
}
def neg_sharpe_ratio(weights,riskfree_rate, er, cov):
r = erk.portfolio_return(weights, er)
vol = erk.portfolio_vol(weights,cov)
回傳 -(r-riskfree_rate)/vol
結果 = 最小化( neg_sharpe_ratio, init_guess,
args=(cov,), method="SLSQP",
options={'disp': False}。
約束=( weights_sum_to_1),
bounds=bounds
)
回傳結果.x
型別錯誤:neg_sharpe_ratio()缺少兩個必要的位置引數。'er'和'cov'
。uj5u.com熱心網友回復:
函式neg_sharpe_ratio能夠參考任何由函式msr傳入和制作的變數,而不需要這些相同的變數傳入它本身。因此,你應該能夠從neq_sharpe_ratio函式定義中洗掉引數riskfree_rate、er和cov,并使其發揮作用,因為這些變數被傳遞到其父函式中,留給你的是。
def neg_sharpe_ratio(weights):
uj5u.com熱心網友回復:
對于那些可能感興趣的人,我發現我的錯誤。 的確,我忘了在我的函式最小化中正確定義我的函式neg_share_ratio的引數。
下面是修改后的代碼:
f from scipy.optimize import minimize def msr(riskfree_rate, er, cov):n= er.shape[0] 。
init_guess= np.repeat(1/n, n)
bounds=((0.00, 1.0),)*n
weights_sum_to_1 = {
'type' : 'eq' , #
'fun' : lambda weights: np.sum(weights) - 1 ##.
}
def neg_sharpe_ratio(weights,riskfree_rate, er, cov):
r = erk.portfolio_return(weights, er)
vol = erk.portfolio_vol(weights,cov)
回傳 -(r-riskfree_rate)/vol
結果 = 最小化( neg_sharpe_ratio, init_guess,
args=(weights,riskfree_rate,er,cov), method="SLSQP",
options={'disp': False}。
約束=( weights_sum_to_1),
bounds=bounds
)
回傳results.x這里的代碼
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/309284.html
標籤:
下一篇:如何回傳一個類引數的串列?
