cov對(duì)角線是相應(yīng)列的方差,非對(duì)角線列是相應(yīng)列的協(xié)方差,你是4*4的原始方陣,所以就是4*4的矩陣 !
成都創(chuàng)新互聯(lián)公司2013年至今,先為花都等服務(wù)建站,花都等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為花都企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
a=[1?2?3;2?5?6]
a?=
1?????2?????3
2?????5?????6
b=mean(a)%%mean是按列求平均值,從b中的值可以看出
b?=
1.5000????3.5000????4.5000
c=mean(a')%%所以要按行求平均值,直接轉(zhuǎn)置求取,最后對(duì)c再求轉(zhuǎn)置即可得到p維列向量
c?=
2.0000????4.3333
%%%%%%%%%%%%%%%%%%%%%%%%%%
M=rand(4,3)
M?=
0.9501????0.8913????0.8214
0.2311????0.7621????0.4447
0.6068????0.4565????0.6154
0.4860????0.0185????0.7919
m=cov(M)
m?=
0.0892????0.0330????0.0405
0.0330????0.1505???-0.0186
0.0405???-0.0186????0.0305%%%%%%%%可以看出最后得到的協(xié)方差是3*3,由此知cov也是按列計(jì)算的,m對(duì)角線的元素是每列的方差,其余元素是列與列之間的協(xié)方差
n=cov(M')
n?=
0.0042???-0.0061???-0.0006???-0.0110
-0.0061????0.0714???-0.0214???-0.0714
-0.0006???-0.0214????0.0080????0.0326
-0.0110???-0.0714????0.0326????0.1517%%轉(zhuǎn)置后計(jì)算協(xié)方差,n為4*4,那么對(duì)角線元素就是行的方差,其余元素就是行與行之間的協(xié)方差。
%%%%%%%%%%%%%%%%%
關(guān)于cov計(jì)算的結(jié)果和手算的結(jié)果不同,這里的原因是:
matlab在計(jì)算相關(guān)矩陣時(shí),把每一列的數(shù)作為一個(gè)隨機(jī)變量的樣本,每一行作為一個(gè)這幾個(gè)隨機(jī)變量的聯(lián)合樣本,即第i個(gè)隨機(jī)變量取第k行的樣本值時(shí),第j個(gè)隨機(jī)變量也取第k行的樣本值。利用這個(gè)性質(zhì),我們就可以用協(xié)方差的公式代入來(lái)計(jì)算協(xié)方差矩陣了。
然而,由于矩陣中給出只是這些隨機(jī)變量的樣本,根據(jù)概率論的知識(shí)我們知道,由于我們不知道這些隨機(jī)變量的概率分布(或聯(lián)合概率分布),我們是不可能計(jì)算出這些隨機(jī)變量的期望、方差或是協(xié)方差的,而只能計(jì)算出它們的一個(gè)無(wú)偏估計(jì),即樣本均值、樣本方差與樣本協(xié)方差。其計(jì)算公式如下所示:
Python 的測(cè)試覆蓋率使用 Coverage 模塊, 需要先安裝:
假設(shè)你原來(lái)執(zhí)行單元測(cè)試的命令為:
那么需要分析測(cè)試覆蓋率時(shí),只要將命令改為如下即可:
參數(shù)解釋:
輸出到控制臺(tái)的簡(jiǎn)單統(tǒng)計(jì)結(jié)果:
也可以轉(zhuǎn)化成HTML,會(huì)在當(dāng)前目錄生成 covhtml 文件夾,打開(kāi)html文件即可查看詳細(xì)的覆蓋率情況:
yaml腳本添加如下兩行:
在gitlab的 CI/CD - General pipelines settings 配置中,添加 Test coverage parsing 的正則:
運(yùn)行后,單元測(cè)試的 Job 頁(yè)面即可看到coverage
---EOF---
是算協(xié)方差的,covariance
是以列向量為單位,算出協(xié)方差是多少,Cov(X),X為觀察結(jié)果,數(shù)據(jù)的矩陣,列向量表示一次得到的觀察結(jié)果,樣本
協(xié)方差參考
多股票策略回測(cè)時(shí)常常遇到問(wèn)題。
倉(cāng)位如何分配?
你以為基金經(jīng)理都是一拍腦袋就等分倉(cāng)位了嗎?
或者玩點(diǎn)玄乎的斐波拉契數(shù)列?
OMG,誰(shuí)說(shuō)的黃金比例,讓我看到你的腦袋(不削才怪)??!
其實(shí),這個(gè)問(wèn)題,好多好多年前馬科維茨(Markowitz)我喜愛(ài)的小馬哥就給出答案——投資組合理論。
根據(jù)這個(gè)理論,我們可以對(duì)多資產(chǎn)的組合配置進(jìn)行三方面的優(yōu)化。
1.找到有效前沿。在既定的收益率下使組合的方差最小。
2.找到sharpe最優(yōu)的組合(收益-風(fēng)險(xiǎn)均衡點(diǎn))
3.找到風(fēng)險(xiǎn)最小的組合
跟著我,一步兩步,輕松實(shí)現(xiàn)。
該理論基于用均值和方差來(lái)表述組合的優(yōu)劣的前提。將選取幾只股票,用蒙特卡洛模擬初步探究組合的有效前沿。
通過(guò)最大Sharpe和最小方差兩種優(yōu)化來(lái)找到最優(yōu)的資產(chǎn)組合配置權(quán)重參數(shù)。
最后,刻畫(huà)出可能的分布,兩種最優(yōu)以及組合的有效前沿。
注:
文中的數(shù)據(jù)API來(lái)自量化平臺(tái)聚寬,在此表示感謝。
原文見(jiàn)【組合管理】——投資組合理論(有效前沿)(包含正態(tài)檢驗(yàn)部分)
0.導(dǎo)入需要的包
import pandas as pd
import numpy as np
import statsmodels.api as sm #統(tǒng)計(jì)運(yùn)算
import scipy.stats as scs #科學(xué)計(jì)算
import matplotlib.pyplot as plt #繪圖
1.選取幾只感興趣的股票
000413 東旭光電,000063 中興通訊,002007 華蘭生物,000001 平安銀行,000002 萬(wàn)科A
并比較一下數(shù)據(jù)(2015-01-01至2015-12-31)
In[1]:
stock_set = ['000413.XSHE','000063.XSHE','002007.XSHE','000001.XSHE','000002.XSHE']
noa = len(stock_set)
df = get_price(stock_set, start_date = '2015-01-01', end_date ='2015-12-31', 'daily', ['close'])
data = df['close']
#規(guī)范化后時(shí)序數(shù)據(jù)
(data/data.ix[0]*100).plot(figsize = (8,5))
Out[1]:
2.計(jì)算不同證券的均值、協(xié)方差
每年252個(gè)交易日,用每日收益得到年化收益。計(jì)算投資資產(chǎn)的協(xié)方差是構(gòu)建資產(chǎn)組合過(guò)程的核心部分。運(yùn)用pandas內(nèi)置方法生產(chǎn)協(xié)方差矩陣。
In [2]:
returns = np.log(data / data.shift(1))
returns.mean()*252
Out[2]:
000413.XSHE 0.184516
000063.XSHE 0.176790
002007.XSHE 0.309077
000001.XSHE -0.102059
000002.XSHE 0.547441
In [3]:
returns.cov()*252
Out[3]:
3.給不同資產(chǎn)隨機(jī)分配初始權(quán)重
由于A股不允許建立空頭頭寸,所有的權(quán)重系數(shù)均在0-1之間
In [4]:
weights = np.random.random(noa)
weights /= np.sum(weights)
weights
Out[4]:
array([ 0.37505798, 0.21652754, 0.31590981, 0.06087709, 0.03162758])
4.計(jì)算預(yù)期組合年化收益、組合方差和組合標(biāo)準(zhǔn)差
In [5]:
np.sum(returns.mean()*weights)*252
Out[5]:
0.21622558669017816
In [6]:
np.dot(weights.T, np.dot(returns.cov()*252,weights))
Out[6]:
0.23595133640121463
In [7]:
np.sqrt(np.dot(weights.T, np.dot(returns.cov()* 252,weights)))
Out[7]:
0.4857482232609962
5.用蒙特卡洛模擬產(chǎn)生大量隨機(jī)組合
進(jìn)行到此,我們最想知道的是給定的一個(gè)股票池(證券組合)如何找到風(fēng)險(xiǎn)和收益平衡的位置。
下面通過(guò)一次蒙特卡洛模擬,產(chǎn)生大量隨機(jī)的權(quán)重向量,并記錄隨機(jī)組合的預(yù)期收益和方差。
In [8]:
port_returns = []
port_variance = []
for p in range(4000):
weights = np.random.random(noa)
weights /=np.sum(weights)
port_returns.append(np.sum(returns.mean()*252*weights))
port_variance.append(np.sqrt(np.dot(weights.T, np.dot(returns.cov()*252, weights))))
port_returns = np.array(port_returns)
port_variance = np.array(port_variance)
#無(wú)風(fēng)險(xiǎn)利率設(shè)定為4%
risk_free = 0.04
plt.figure(figsize = (8,4))
plt.scatter(port_variance, port_returns, c=(port_returns-risk_free)/port_variance, marker = 'o')
plt.grid(True)
plt.xlabel('excepted volatility')
plt.ylabel('expected return')
plt.colorbar(label = 'Sharpe ratio')
Out[8]:
6.投資組合優(yōu)化1——sharpe最大
建立statistics函數(shù)來(lái)記錄重要的投資組合統(tǒng)計(jì)數(shù)據(jù)(收益,方差和夏普比)
通過(guò)對(duì)約束最優(yōu)問(wèn)題的求解,得到最優(yōu)解。其中約束是權(quán)重總和為1。
In [9]:
def statistics(weights):
weights = np.array(weights)
port_returns = np.sum(returns.mean()*weights)*252
port_variance = np.sqrt(np.dot(weights.T, np.dot(returns.cov()*252,weights)))
return np.array([port_returns, port_variance, port_returns/port_variance])
#最優(yōu)化投資組合的推導(dǎo)是一個(gè)約束最優(yōu)化問(wèn)題
import scipy.optimize as sco
#最小化夏普指數(shù)的負(fù)值
def min_sharpe(weights):
return -statistics(weights)[2]
#約束是所有參數(shù)(權(quán)重)的總和為1。這可以用minimize函數(shù)的約定表達(dá)如下
cons = ({'type':'eq', 'fun':lambda x: np.sum(x)-1})
#我們還將參數(shù)值(權(quán)重)限制在0和1之間。這些值以多個(gè)元組組成的一個(gè)元組形式提供給最小化函數(shù)
bnds = tuple((0,1) for x in range(noa))
#優(yōu)化函數(shù)調(diào)用中忽略的唯一輸入是起始參數(shù)列表(對(duì)權(quán)重的初始猜測(cè))。我們簡(jiǎn)單的使用平均分布。
opts = sco.minimize(min_sharpe, noa*[1./noa,], method = 'SLSQP', bounds = bnds, constraints = cons)
opts
Out[9]:
status: 0
success: True
njev: 4
nfev: 28
fun: -1.1623048291871221
x: array([ -3.60840218e-16, 2.24626781e-16, 1.63619563e-01, -2.27085639e-16, 8.36380437e-01])
message: 'Optimization terminated successfully.'
jac: array([ 1.81575805e-01, 5.40387481e-01, 8.18073750e-05, 1.03137662e+00, -1.60038471e-05, 0.00000000e+00])
nit: 4
得到的最優(yōu)組合權(quán)重向量為:
In [10]:
opts['x'].round(3)
Out[10]:
array([-0. , 0. , 0.164, -0. , 0.836])
sharpe最大的組合3個(gè)統(tǒng)計(jì)數(shù)據(jù)分別為:
In [11]:
#預(yù)期收益率、預(yù)期波動(dòng)率、最優(yōu)夏普指數(shù)
statistics(opts['x']).round(3)
Out[11]:
array([ 0.508, 0.437, 1.162])
7.投資組合優(yōu)化2——方差最小
接下來(lái),我們通過(guò)方差最小來(lái)選出最優(yōu)投資組合。
In [12]:
#但是我們定義一個(gè)函數(shù)對(duì) 方差進(jìn)行最小化
def min_variance(weights):
return statistics(weights)[1]
optv = sco.minimize(min_variance, noa*[1./noa,],method = 'SLSQP', bounds = bnds, constraints = cons)
optv
Out[12]:
status: 0
success: True
njev: 7
nfev: 50
fun: 0.38542969450547221
x: array([ 1.14787640e-01, 3.28089742e-17, 2.09584008e-01, 3.53487044e-01, 3.22141307e-01])
message: 'Optimization terminated successfully.'
jac: array([ 0.3851725 , 0.43591119, 0.3861807 , 0.3849672 , 0.38553924, 0. ])
nit: 7
方差最小的最優(yōu)組合權(quán)重向量及組合的統(tǒng)計(jì)數(shù)據(jù)分別為:
In [13]:
optv['x'].round(3)
Out[13]:
array([ 0.115, 0. , 0.21 , 0.353, 0.322])
In [14]:
#得到的預(yù)期收益率、波動(dòng)率和夏普指數(shù)
statistics(optv['x']).round(3)
Out[14]:
array([ 0.226, 0.385, 0.587])
8.組合的有效前沿
有效前沿有既定的目標(biāo)收益率下方差最小的投資組合構(gòu)成。
在最優(yōu)化時(shí)采用兩個(gè)約束,1.給定目標(biāo)收益率,2.投資組合權(quán)重和為1。
In [15]:
def min_variance(weights):
return statistics(weights)[1]
#在不同目標(biāo)收益率水平(target_returns)循環(huán)時(shí),最小化的一個(gè)約束條件會(huì)變化。
target_returns = np.linspace(0.0,0.5,50)
target_variance = []
for tar in target_returns:
cons = ({'type':'eq','fun':lambda x:statistics(x)[0]-tar},{'type':'eq','fun':lambda x:np.sum(x)-1})
res = sco.minimize(min_variance, noa*[1./noa,],method = 'SLSQP', bounds = bnds, constraints = cons)
target_variance.append(res['fun'])
target_variance = np.array(target_variance)
下面是最優(yōu)化結(jié)果的展示。
叉號(hào):構(gòu)成的曲線是有效前沿(目標(biāo)收益率下最優(yōu)的投資組合)
紅星:sharpe最大的投資組合
黃星:方差最小的投資組合
In [16]:
plt.figure(figsize = (8,4))
#圓圈:蒙特卡洛隨機(jī)產(chǎn)生的組合分布
plt.scatter(port_variance, port_returns, c = port_returns/port_variance,marker = 'o')
#叉號(hào):有效前沿
plt.scatter(target_variance,target_returns, c = target_returns/target_variance, marker = 'x')
#紅星:標(biāo)記最高sharpe組合
plt.plot(statistics(opts['x'])[1], statistics(opts['x'])[0], 'r*', markersize = 15.0)
#黃星:標(biāo)記最小方差組合
plt.plot(statistics(optv['x'])[1], statistics(optv['x'])[0], 'y*', markersize = 15.0)
plt.grid(True)
plt.xlabel('expected volatility')
plt.ylabel('expected return')
plt.colorbar(label = 'Sharpe ratio')
Out[16]:
協(xié)方差的性質(zhì):
1、Cov(X,Y)=Cov(Y,X);
2、Cov(aX,bY)=abCov(X,Y),(a,b是常數(shù));
3、Cov(X1+X2,Y)=Cov(X1,Y)+Cov(X2,Y)。
由協(xié)方差定義,可以看出Cov(X,X)=D(X),Cov(Y,Y)=D(Y)。
協(xié)方差函數(shù)定義為:
若X(t)=Y(t)+i*Z(t),Y,Z為實(shí)過(guò)程,則稱X(t)為復(fù)隨機(jī)過(guò)程,相關(guān)函數(shù)定義為:
擴(kuò)展資料
協(xié)方差反映了兩個(gè)變量之間的相關(guān)程度:
協(xié)方差是兩個(gè)變量與自身期望做差再相乘,然后對(duì)乘積取期望。也就是說(shuō),當(dāng)其中一個(gè)變量的取值大于自身期望,另一個(gè)變量的取值也大于自身期望時(shí),即兩個(gè)變量的變化趨勢(shì)相同,此時(shí),兩個(gè)變量之間的協(xié)方差取正值。
反之,即其中一個(gè)變量大于自身期望時(shí),另外一個(gè)變量小于自身期望,那么這兩個(gè)變量之間的協(xié)方差取負(fù)值。
當(dāng)x與y變化趨勢(shì)一致時(shí),兩個(gè)變量與自身期望之差同為正或同為負(fù),其乘積必然為正,所以其協(xié)方差為正;反之,其協(xié)方差為負(fù)。所以協(xié)方差的正負(fù)性反映了兩個(gè)變量的變化趨勢(shì)是否一致。
再者,當(dāng)x和y在某些時(shí)刻變化一致,某些時(shí)刻變化不一致時(shí),在第一個(gè)點(diǎn),x與y雖然變化,但是y的變化幅度遠(yuǎn)不及x變化幅度大,所以其乘積必然較小。
在第二個(gè)點(diǎn),x與y變化一致且變化幅度都很大,因此其乘積必然較大,在第三個(gè)點(diǎn),x與y變化相反,其乘積為負(fù)值,這類點(diǎn)將使其協(xié)方差變小,因此,我們可以認(rèn)為協(xié)方差絕對(duì)值大小反映了兩個(gè)變量變化的一致程度。因此,兩個(gè)變量相關(guān)系數(shù)的定義為協(xié)方差與變量標(biāo)準(zhǔn)差乘積之比。
參考資料來(lái)源:百度百科-協(xié)方差
本文名稱:python中cov函數(shù) python csv函數(shù)
轉(zhuǎn)載來(lái)于:http://muchs.cn/article22/docdgjc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷型網(wǎng)站建設(shè)、服務(wù)器托管、網(wǎng)站營(yíng)銷、移動(dòng)網(wǎng)站建設(shè)、動(dòng)態(tài)網(wǎng)站、全網(wǎng)營(yíng)銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容