




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第10章
股票價格形態(tài)聚類與收益分析關(guān)鍵價格點(diǎn)概念及提取算法基于關(guān)鍵價格點(diǎn)的形態(tài)特征表示基于關(guān)鍵價格點(diǎn)的形態(tài)特征提取關(guān)鍵價格點(diǎn)概念及提取算法第10章
股票價格走勢主要由一些關(guān)鍵價格點(diǎn)構(gòu)成,因此我們選擇其關(guān)鍵的價格點(diǎn)作為聚類特征即可。構(gòu)成的序列模式,值越大,xi成為關(guān)鍵點(diǎn)的可能性就越大。關(guān)鍵價格點(diǎn)提取算法如下:輸入:原始價格序列x=(x1,x2,……,xp),提取關(guān)鍵點(diǎn)個數(shù)num。輸出:關(guān)鍵價格點(diǎn)序列、對應(yīng)下標(biāo)序列。step1:對x2,…,x(p-1)按公式計算其與相鄰兩個價格點(diǎn)均值的絕對值大小,并按從大到小
進(jìn)行排序,取排名前num-2對應(yīng)的價格點(diǎn),記為L1,對應(yīng)的下標(biāo)序列記為S1。step2:x1,xp對應(yīng)的價格點(diǎn)記為L2,對應(yīng)的下標(biāo)序列記為S2。step3:記L=L1∪L2,S=S1∪S2,并按S從小到大進(jìn)行排序,則L即為關(guān)鍵價格點(diǎn)序列,
S即為對應(yīng)的下標(biāo)序列。關(guān)鍵價格點(diǎn)概念及提取算法第10章
defget_keydata(x,num):
importpandasaspd
importnumpyasnp
#計算x2,…,x(p-1)各點(diǎn)減去相鄰兩點(diǎn)平均值的絕對值
d=abs(x[1:len(x)-1].values-(x[0:len(x)-2].values+x[2:len(x)].values)/2)
#以d為值,對應(yīng)的下標(biāo)為index,構(gòu)建序列,并按降序排序
Sd=pd.Series(d,index=np.arange(1,len(x)-1)).sort_values(ascending=False)
L1=Sd[0:num-2]
L2=pd.Series([x[0],x[len(x)-1]],index=[0,len(x)-1])
L=L1.append(L2)
keydata=x[L.index].sort_index()
returnkeydata函數(shù)輸入?yún)?shù)為價格數(shù)組X、提取的關(guān)鍵點(diǎn)個數(shù)num,返回值為關(guān)鍵點(diǎn)序列(index為下標(biāo),value為對應(yīng)的關(guān)鍵價格點(diǎn))關(guān)鍵點(diǎn)提取算法函數(shù)如下(函數(shù)定義在df.py文件中)關(guān)鍵價格點(diǎn)概念及提取算法第10章
股票代碼為600000的股票2017年6月1日—2017年8月31日的收盤價數(shù)據(jù),提取10個關(guān)鍵點(diǎn),并在同一坐標(biāo)軸上繪制原始價格點(diǎn)與關(guān)鍵價格點(diǎn)擬合圖,importpandasaspdimportdfimportmatplotlib.pyplotaspltdata=pd.read_excel('DA.xlsx')I1=data['Trddt'].values>='2017-06-01'I2=data['Trddt'].values=<'2017-08-31'I=I1&I2data1=data.iloc[I,:]#提取代碼600000的收盤價dt=data1.loc[data1['Stkcd']==600000,['Clsprc']]['Clsprc']#收盤價序列的index重排,從0開始dt=pd.Series(dt.values,index=range(len(dt)))keydata=df.get_keydata(dt,10)plt.plot(dt.index,dt.values)plt.plot(keydata.index,keydata.values,'r*--')關(guān)鍵價格點(diǎn)(keydata.values)為:[12.9212.5312.8613.7613.5513.4513.6713.4412.4712.71]對應(yīng)的下標(biāo)(keydata.index)為:[0,27,29,32,33,36,37,44,60,65]基于關(guān)鍵價格點(diǎn)的形態(tài)特征表示第10章
關(guān)鍵價格點(diǎn)的提取降低了維度,但是直接用價格點(diǎn)進(jìn)行聚類還是存在較大的誤差,因此我們需要對關(guān)鍵價格點(diǎn)的走勢情況進(jìn)行特征化表示,采用兩個關(guān)鍵價格點(diǎn)之間連線的斜率確定其漲跌情況,即特征化表示為兩個關(guān)鍵點(diǎn)連線之間的夾角
的tan值:其中p1和p2分別表示前后兩個關(guān)鍵點(diǎn),x1和x2分別為關(guān)鍵點(diǎn)對應(yīng)的下標(biāo)。漲跌幅的劃分標(biāo)準(zhǔn)如下:上漲幅度大:
tan值>0.5上漲幅度較大:
tan值介于0.2~0.5上漲:
tan值介于0.1~0.2平緩:
tan值介于?0.1~0.1下跌:
tan值介于?0.2~?0.1下跌幅度較大:
tan值介于?0.5~?0.2下跌幅度大:
tan值<?0.5分別記為:7、6、5、4、3、2、1基于關(guān)鍵價格點(diǎn)的形態(tài)特征表示第10章
特征化表示函數(shù)如下(函數(shù)也定義在df.py文件中)defget_tz(keydata):
importnumpyasnp
y1=keydata.values[1:]
y2=keydata.values[0:-1]
x1=keydata.index[1:]
x2=keydata.index[0:-1]
#計算tan值
tan=list((y2-y1)/(x2-x1))
T=np.array(tan)
I7=T>0.5
i1=T>0.2
i2=T<=0.5
I6=i1&i2
i1=T>0.1
i2=T<=0.2
I5=i1&i2
i1=T>-0.1
i2=T<=0.1
I4=i1&i2i1=T>-0.2i2=T<=-0.1I3=i1&i2i1=T>=-0.5i2=T<=-0.2I2=i1&i2I1=T<-0.5T[I1]=1T[I2]=2T[I3]=3T[I4]=4T[I5]=5T[I6]=6T[I7]=7returnT函數(shù)輸入?yún)?shù)為關(guān)鍵點(diǎn)序列,返回結(jié)果為特征化數(shù)組:T=df.get_tz(keydata)print(T)可以看到,前面所示關(guān)鍵點(diǎn)價格走勢圖其特征化表示為:[4.5.6.2.4.6.4.4.4.]基于關(guān)鍵價格點(diǎn)的形態(tài)特征提取第10章
根據(jù)第8章中基于總體規(guī)模與投資效率指標(biāo)的綜合評價方法,獲取2016年排名前400的股票作為研究樣本,并提取其交易數(shù)據(jù)區(qū)間在2017年5月1日—2017年7月31日的股票關(guān)鍵價格點(diǎn)和形態(tài)特征。首先基于總體規(guī)模與投資效率指標(biāo)的綜合評價方法,獲取2016年排名前400的股票,包括其股票代碼和股票簡稱。importpandasaspdimportfundta=pd.read_excel('ddata.xlsx')r=fun.Fr(dta,'2016')c=r[0][0:400]cn=r[1][0:400]code=list(c.index)#將股票代碼轉(zhuǎn)化為列表的形式基于關(guān)鍵價格點(diǎn)的形態(tài)特征提取第10章
其次確定在2017年5月1日—2017年7月31日之間的交易所實(shí)際交易天數(shù)Mtd=pd.read_excel('交易日歷數(shù)據(jù)表.xlsx')I1=td['Clddt'].values>='2017-05-01'I2=td['Clddt'].values<='2017-07-31'I=I1&I2ddt=td.loc[I,['Clddt']]M=len(ddt)基于關(guān)鍵價格點(diǎn)的形態(tài)特征提取第10章
最后我們計算400只股票樣本的關(guān)鍵價格點(diǎn)數(shù)據(jù)和對應(yīng)的下標(biāo),并根據(jù)關(guān)鍵價格點(diǎn)和對應(yīng)下標(biāo)數(shù)據(jù)計算形態(tài)特征,這里需要說明的是如果存在股票交易天數(shù)不足M天,則做剔除處理。最終得到股票形態(tài)特征數(shù)據(jù)Data、關(guān)鍵價格點(diǎn)數(shù)據(jù)KeyData、關(guān)鍵價格點(diǎn)數(shù)據(jù)對應(yīng)的序號KeyData_index。其中關(guān)鍵價格點(diǎn)數(shù)據(jù)KeyData已做極差化處理,即數(shù)據(jù)標(biāo)準(zhǔn)化為[0,1]之間。第10章
股票價格形態(tài)聚類與收益分析K-最頻繁值聚類算法基于K-最頻繁值聚類算法的股票價格形態(tài)聚類類平均收益率的計算K-最頻繁值聚類算法第10章
K-均值聚類算法主要適用于數(shù)值特征數(shù)據(jù),而本章中提取的股票價格形態(tài)特征數(shù)據(jù)是經(jīng)過離散化的離散變量(名義變量),因此經(jīng)典的K-均值聚類算法不再適用。本節(jié)借鑒K-均值聚類算法的思想,給出K-最頻繁值聚類算法,該算法與K-均值聚類算法的不同之處主要體現(xiàn)在距離度量和類中心的更新方法上,其中距離度量函數(shù)采用海明距離,類中心的更新方法則選擇類樣本特征向量分量出現(xiàn)最多的值(最頻繁值,經(jīng)典的K-均值聚類算法采用的是平均值)作為類中心特征向量的分量。K-最頻繁值聚類算法第10章
輸入:特征數(shù)據(jù)集,聚類個數(shù)K。輸出:特征數(shù)據(jù)集及其類標(biāo)簽。Step1:隨機(jī)初始化K個聚類中心,即K個類中心向量。Step2:對每個樣本,計算其與各個類中心向量的距離,并將該樣本指派給距離最小的類,
這里的距離采用海明距離,其計算公式如下:K-最頻繁值聚類算法:Step3:更新每個類的中心向量,更新的方法為取該類所有樣本的特征向量的最頻繁值。Step4:直到各個類的中心向量不再發(fā)生變化為止,并輸出類標(biāo)簽。Python中沒有現(xiàn)成的函數(shù)可以調(diào)用,故本節(jié)給出其函數(shù)的具體定義。這里僅介紹基本結(jié)構(gòu)defK_mean(data,knum):#輸入:data--聚類特征數(shù)據(jù)集,要求為數(shù)據(jù)結(jié)構(gòu)要求為numpy數(shù)值數(shù)組#輸入:knum--聚類個數(shù)#返回值為類別標(biāo)簽列基于K-最頻繁值聚類算法的股票價格形態(tài)聚類第10章
利用K-最頻繁值聚類算法對股票價格形態(tài)進(jìn)行聚類,輸入為股票形態(tài)特征數(shù)據(jù)集Data,輸出為每個股票代碼的聚類結(jié)果.為了后續(xù)使用的方便,對形態(tài)特征數(shù)據(jù)Data、關(guān)鍵價格點(diǎn)數(shù)據(jù)KeyData、關(guān)鍵點(diǎn)價格數(shù)據(jù)對應(yīng)的序號數(shù)據(jù)KeyData_index,都在數(shù)據(jù)集的最后加上一列,即聚類結(jié)果列。添加聚類結(jié)果列后,數(shù)據(jù)集分別記為:Data_c、KeyData_c、KeyData_index_cimportkmean#導(dǎo)入自定義的K最頻繁值聚類算法c=kmean.K_mean(Data[:,1:],20)#調(diào)用K最頻繁值聚類算法,聚為20個類,并返回結(jié)果cKeyData_c=np.hstack((KeyData,c.reshape(len(c),1)))KeyData_index_c=np.hstack((KeyData_index,c.reshape(len(c),1)))Data_c=np.hstack((Data,c.reshape(len(c),1))類平均收益率的計算第10章
根據(jù)聚類結(jié)果,對每一類股票計算該類股票的平均收益率,持有期為2017年8月1日—2017年8月31日,即考察未來一個月的平均收益率。也就是說,這種形態(tài)出現(xiàn)之后,未來一個月的市場表現(xiàn)如何。第10章
股票價格形態(tài)聚類與收益分析函數(shù)定義及使用方法訓(xùn)練樣本與預(yù)測樣本的構(gòu)建量化投資策略設(shè)計函數(shù)定義及使用方法第10章
將以上介紹的股票價格形態(tài)特征提取定義為函數(shù)FR1defFR1(DA,t_trd1,t_trd2,num):
#輸入:
#DA--2017年股票交易數(shù)據(jù)
#t_trd1--聚類數(shù)據(jù)區(qū)間開始日期
#t_trd2--聚類數(shù)據(jù)區(qū)間結(jié)束日期
#num--基于總體規(guī)模與投資效率指標(biāo)的綜合評價方法提取樣本個數(shù)
#輸出:
#Data--形態(tài)特征數(shù)據(jù)
#KeyData--關(guān)鍵價格點(diǎn)數(shù)據(jù)
#KeyData_index--關(guān)鍵價格點(diǎn)對應(yīng)序號函數(shù)定義及使用方法第10章
將以上介紹的形態(tài)特征聚類與收益率計算定義為函數(shù)FR2defFR2(DA,Data,KeyData,KeyData_index,s_trd1,s_trd2,class_num):
#輸入:
#DA--2017年股票交易數(shù)據(jù)
#Data--形態(tài)特征數(shù)據(jù)
#KeyData--關(guān)鍵價格點(diǎn)數(shù)據(jù)
#KeyData_index--關(guān)鍵價格點(diǎn)對應(yīng)序號
#s_trd1--收益率計算持有期開始日期
#s_trd2--收益率計算持有期結(jié)束日期
#class_num--聚類個數(shù)
#輸出:
#Data_c--形態(tài)特征數(shù)據(jù)+聚類結(jié)果列
#KeyData_c--關(guān)鍵價格點(diǎn)數(shù)據(jù)+聚類結(jié)果列
#KeyData_index_c--關(guān)鍵價格點(diǎn)對應(yīng)序號+聚類結(jié)果列
#D--每只股票代碼、所屬聚類類別、收益率組成的數(shù)據(jù)框
#list_cr--每類股票的總收益訓(xùn)練樣本與預(yù)測樣本的構(gòu)建第10章
選用2017年5月1日—2017年7月31日和2017年6月1日—2017年8月31日兩個計算周期的交易數(shù)據(jù)提取股票價格形態(tài)特征進(jìn)行聚類,并分別以2017年8月1日—2017年8月31日和2017年9月1日—2017年9月30日兩個持有期計算每個類別的平均收益率,如果類平均收益率排名前5,則該類中所有股票記為+1類,否則記為?1類,并以此構(gòu)建訓(xùn)練樣本。importpandasaspdDA=pd.read_excel('DA.xlsx')R1=FR1(DA,'2017-05-01','2017-07-31',400)R2=FR2(DA,R1[0],R1[1],R1[2],'2017-08-01','2017-08-31',20)dt1=R2[0]
#2017年5月1日至2017年7月31日的股票價格形態(tài)特征數(shù)據(jù)+聚類結(jié)果列cr1=pd.Series(R2[4])#對應(yīng)每類的平均收益率crr=cr1.sort_values(ascending=False)#對類平均收益率序列cr1按降序排序cr=list(crr.index)
#取對應(yīng)的類編號(排序后的數(shù)據(jù))foriinrange(len(crr)):
#類平均收益率排名前5的類中所有股票標(biāo)記為1
ifi<5:
dt1[dt1[:,len(dt1[0,:])-1]==cr[i],len(dt1[0,:])-1]=1
#(聚類結(jié)果列變?yōu)橐蜃兞?1)dt1[dt1[:,len(dt1[0,:])-1]!=1,len(dt1[0,:])-1]=-1
#(聚類結(jié)果列變?yōu)橐蜃兞?1)訓(xùn)練樣本與預(yù)測樣本的構(gòu)建第10章
R1=FR1(DA,'2017-06-01','2017-08-31',400)R2=FR2(DA,R1[0],R1[1],R1[2],'2017-09-01','2017-09-30',20)dt2=R2[0]
#2017年6月1日至2017年8月31日的股票價格形態(tài)特征數(shù)據(jù)+聚類結(jié)果列cr2=pd.Series(R2[4])crr=cr2.sort_values(ascending=False)cr=list(crr.index)foriinrange(len(crr)):ifi<5:dt2[dt2[:,len(dt2[0,:])-1]==cr[i],len(dt2[0,:])-1]=1
#(聚類結(jié)果列變?yōu)橐蜃兞?1)dt2[dt2[:,len(dt2[0,:])-1]!=1,len(dt2[0,:])-1]=-1
#(聚類結(jié)果列變?yōu)橐蜃兞?1)#構(gòu)造訓(xùn)練樣本importnumpyasnpdt=np.vstack((dt2,dt1))x=dt[:,1:-1]#訓(xùn)練樣本的Xy=dt[:,len(dt[0,:])-1]#訓(xùn)練樣本的Y訓(xùn)練樣本與預(yù)測樣本的構(gòu)建第10章
對于預(yù)測樣本,選用的是2017年7月1日—2017年9月30日的交易數(shù)據(jù)計算形態(tài)特征,這里調(diào)用前面定義的FR1函數(shù)來實(shí)現(xiàn)。#預(yù)測樣本的構(gòu)建R1=FR1(DA,'2017-07-01','2017-09-30',400)dt3=R1[0]x1=dt3[:,1:]#交易數(shù)據(jù)為2017年7月1日~2017年9月30日的股票價格形態(tài)特征數(shù)據(jù)量化投資策略設(shè)計第10章
根據(jù)前面構(gòu)建的訓(xùn)練樣本和預(yù)測樣本,利用支持向量機(jī)模型進(jìn)行訓(xùn)練和預(yù)測,如果預(yù)測結(jié)果為+1,表示該只股票在未來一個月內(nèi)可能獲得比較好的收益,對該只股票以持有期為2017年10月1日—2017年10月31日進(jìn)行計算投資收益率(期初收盤價買入,期末收盤價賣出),最終將所有預(yù)測結(jié)果為+1的股票收益率求和,即得到投資策略的總收益率,并以同期的滬深300指數(shù)收益率作為基準(zhǔn)進(jìn)行比較。fromsklearnimportsvmclf=svm.SVC()clf.fit(x,y)res=clf.predict(x1)#支持向量機(jī)預(yù)測結(jié)果code=dt3[res==1,0]list_r=[]#預(yù)定義列表,用于存放預(yù)測結(jié)果為+1的股票收益率list_code=[]#預(yù)定義列表,用于存放預(yù)測結(jié)果為+1的股票代碼foriinrange(len(code)):
I1=DA['Trddt'].values>='2017-10-01'
I2=DA['Trddt'].values<='2017-10-31'
I3=DA['Stkcd'].values==c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中考?xì)v史總復(fù)習(xí)《世界歷史》九年級下冊 (世界現(xiàn)代史)全冊知識提綱
- 廚藝展示活動方案
- 《課程普及與自主》課件
- 車輛定金簽字合同協(xié)議
- 轉(zhuǎn)讓市區(qū)公墓合同協(xié)議
- 木片購銷協(xié)議書
- 農(nóng)村土地合作開發(fā)畜牧養(yǎng)殖協(xié)議
- 更換原件協(xié)議書
- 歺廳股份協(xié)議書
- 產(chǎn)品定制及購銷協(xié)議合同書
- 河南五市2025年高三俄語二模試卷(無答案)
- 2025-2030中國旅游景區(qū)行業(yè)市場發(fā)展現(xiàn)狀及前景趨勢與投資發(fā)展研究報告
- 9.2 歐洲西部課件3-2024-2025學(xué)年七年級地理下學(xué)期人教版2024
- 2024年山東泰安岱岳區(qū)職業(yè)教育中心招聘筆試真題
- 2025年廣東廣州市高三二模高考英語試卷試題(含答案詳解)
- 期中考試質(zhì)量分析會上校長引用6個關(guān)鍵詞講話:深耕、融合、賦能、深耕、創(chuàng)新、協(xié)同、堅守
- 2025屆高三化學(xué)備考:山東高考模擬練習(xí)-工業(yè)流程61道
- 聯(lián)營采購合同協(xié)議
- 少兒書畫測試題及答案
- 掛靠法人免責(zé)協(xié)議書
- 煤炭加工中的選煤技術(shù)與選煤機(jī)械考核試卷
評論
0/150
提交評論