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