Vincent
2022-02-08 11:50老師,問兩個有效前沿的問題。第一個sco代碼基礎(chǔ)課程里沒講,具體哪個課件有?代碼里面標(biāo)紅的部分麻煩再講下:def定義函數(shù)的時候weights這個參數(shù)我并沒有輸入實際的數(shù)字,這個對應(yīng)的是lambda的x嗎?bounds里面的for語句的x指代的是啥,我理解為隨機設(shè)定的,和后面的x沒關(guān)系吧。還有cons限制條件這塊再講下,type指代的是啥?第二個圖里面紅色標(biāo)紅出麻煩再解釋下,尤其是c(顏色)部分等于sharperatio,這部分的課程基礎(chǔ)課也沒有,哪里有講?
所屬:AQF > AQF 視頻位置 相關(guān)試題
來源: 視頻位置 相關(guān)試題
1個回答
高志萍助教
2022-02-08 15:45
該回答已被題主采納
同學(xué)你好,
關(guān)于scipy
scipy這個庫,不是考試的核心內(nèi)容,所以課程里沒像numpy和pandas這樣介紹(python被稱為膠水語言,有很多庫可用,所以我們也無法把每個庫做纖細(xì)的說明),相關(guān)的內(nèi)容,可以查看網(wǎng)站:BUNOOB.COM (https://www.runoob.com/scipy/scipy-module.html, 在SciPy模塊列表里找到optimize API, 點擊后跳轉(zhuǎn)到SciPy的官方說明,網(wǎng)址是:https://docs.scipy.org/doc/scipy-1.8.0/html-scipyorg/reference/optimize.html#module-scipy.optimize)
scipy在視屏python數(shù)理統(tǒng)計中關(guān)于大數(shù)定律和中心極限定理的地方是介紹過scipy.stats的。
scipy.optimize簡單的說,就是在給出限定條件下,計算出最大值和最小值
關(guān)于def定義的weights
這個和bounds里的x無關(guān),這里的weights是4個股票的權(quán)重(權(quán)重和為1)的參數(shù),基于輸入的weights計算出年標(biāo)準(zhǔn)差和年收益
bounds是設(shè)定范圍,邊界,這里的意思,是限制4個股票,每個股票的范圍,
bounds=tuple((0,1)for x in range(number_of_asset), 是元祖解析,作用是生成4個范圍,因為股票的權(quán)重雖然可以做空,也就是可以出現(xiàn)負(fù)數(shù),但是不可能無限的作用,如果不加限制,如果就有可能一個股票的權(quán)重是-100,做空100倍。(0,1)表示的是每個股票比例的范圍在0到100%之間。
這里不用x,用i 也是一樣的。和列表解析的思路是一樣的
關(guān)于result里SLSQP:
這個是sco.optimalize.minimize這個函數(shù)的需要的參數(shù),意思是計算最小值使用的方法是什么,在scipy可以看到有很多的方法
這個方法是序列最小二乘規(guī)劃算法,簡單的理解是給定目標(biāo)計算出需要最低比例,因為一個投資組合,完全不同的權(quán)重有可能組合出相同的收益率,所以需要使用這個方法,計算出一個收益率下的最小的個股持有情況。
-
追答
關(guān)于cons,這個就是sco.minimize里的限制,
這里一共是兩個限制,在sco.minimize下限制是定義為帶鍵的字典,字典的鍵就是type,
type:pe 是表示限制的類型為等于0
fun是可調(diào)用對象,待優(yōu)化的函數(shù)。可以理解為使用匿名函數(shù)lambda 計算出calculate_portfolio_return(x)-target_return的數(shù)字
加上type:pe, 表示等于0才是符合限制的
也就是第一個限制是,計算出來的calculate_portfolio_return(x)是要等于target_return的
那第二個限制,就是所有x之和(x是權(quán)重)減去1要等于0
這里不用x也無所謂的(匿名函數(shù),通常的用法都是x,用a和b也是可以的)
和bounds的x沒有關(guān)系
bounds里的x是隨機的,和后面的x沒有關(guān)系 -
追答
同學(xué)你好,
請再貼一下第二張圖,這里只看到一張圖
colorbar是色條,就是圖片右側(cè)的那一條,顏色從淺的到深,數(shù)字越大
colorbar這個也是matplotlib下的一個函數(shù),課程里是沒有詳細(xì)介紹的,這種函數(shù),也需要同學(xué)在網(wǎng)上找相關(guān)的資料學(xué)習(xí)的。(編程沒辦法的,很多時候只能網(wǎng)上查方法,查用法的)
這個colorbar的標(biāo)簽(也就是名字)是sharpe ratio
sharpe ratio=(組合的收益-無風(fēng)險利率)?組合的標(biāo)準(zhǔn)差
也就是plt.scatter里面的c=(portfolio_returns-risk_free)/portfolio_std
這里的c就是color,也就是每一個return和std計算出來的sharpe ratio都有一個顏色表示
plt.scatter里的marker='o',表示這些對應(yīng)坐標(biāo)用”點“的方式繪制出來,如果market='v'的話,圖片就是圓點,而是倒三角了
camp=plt.get_cmap('Blues')
camp表示的是一種配色方法
plt.get_cmap('Blue') 表示的就是用藍色調(diào)制的配色方案
簡單的說,點的構(gòu)成是return和std,然后根據(jù)sharpe ratio的數(shù)字匹配顏色,顏色使用方案就是以藍色的變化的配色 -
追問
老師,這里函數(shù)里面的weights還是之前 np.random.random(number_of_asset) 歸一化的值嗎,只跑了一次? 后面還有個跑了4000次的?到底是哪一個。
-
追答
同學(xué)你好,
都不是,
函數(shù)里的weights和之前的weights沒有關(guān)系,(可以把函數(shù)前的weighs前的,都改為weights_0, 再從新運營一次,結(jié)果是不影響的)
定義的函數(shù)的weights,是后面的輸入
calculate_target_return(weights), 是在調(diào)用sco的時候,寫限制里的第一個限制。比如初始的4個0.25就是weights,然后sco是最優(yōu)化,所以會把不同的比例輸入calculate_target_return(weights),計算出portfolio_returns
calculate_target_std(weights), 是直接在sco里調(diào)用的
和前面的weight是沒有關(guān)系的,都是后面通過sco這個函數(shù)生成的比重 -
追問
也就是說沒有[0.25,0.25,0.25,0.25]這一初始條件的話,weight就不知道是由四個股票的權(quán)重組成的,對嗎?還有關(guān)于result里SLSQP:這個方法是序列最小二乘規(guī)劃算法,簡單的理解是給定目標(biāo)計算出需要最低比例,因為一個投資組合,完全不同的權(quán)重有可能組合出相同的收益率,所以需要使用這個方法,計算出一個收益率下的最小的個股持有情況。(這里應(yīng)該是講固定收益率下對應(yīng)的最小波動時的個股持有情況吧?)
-
追答
同學(xué)你好,
關(guān)于4個0.25:
是的
4個0.25,是sco的一個必要參數(shù),這個參數(shù)要符合使用函數(shù)的要求,在這里就是要符合(calculate_target_std(weights))這個函數(shù)的要求,
calculate_target_std(weights),這個函數(shù)里用到 log_returns,這個變量,之前已經(jīng)賦值好了,是個4例的表,所以一定要4個權(quán)重,也就是一個weigths里要包含4個權(quán)重數(shù)據(jù)。
關(guān)于SLSQP:
是的,可以這樣理解
