Python金融數(shù)據(jù)分析與挖掘(微課版) 課件 第9章 股票價格漲跌趨勢預測_第1頁
Python金融數(shù)據(jù)分析與挖掘(微課版) 課件 第9章 股票價格漲跌趨勢預測_第2頁
Python金融數(shù)據(jù)分析與挖掘(微課版) 課件 第9章 股票價格漲跌趨勢預測_第3頁
Python金融數(shù)據(jù)分析與挖掘(微課版) 課件 第9章 股票價格漲跌趨勢預測_第4頁
Python金融數(shù)據(jù)分析與挖掘(微課版) 課件 第9章 股票價格漲跌趨勢預測_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第9章

股票價格漲跌趨勢預測MA、MACD、KDJ、RSI、BIAS、OBV、因變量Y指標設(shè)計及計算方法計算舉例移動平均線(MA)第9章

移動平均線(MA)就是將某一定時期的收盤價之和除以該周期,按時間的長短可以分為長期、中期、短期3種。計算公式如下:Ct為t日股票價格,n為天數(shù)。Python計算移動平均的命令為:P.rolling(n).mean()。其中,P為價格序列,n為周期數(shù)。例如,計算5日移動平均為:P.rolling(5).mean()指數(shù)平滑異同平均線(MACD)第9章

指數(shù)平滑異同平均線(MACD)是在移動平均線的基礎(chǔ)上發(fā)展而成的,它利用兩條不同速度(一條變動速率較快的短期移動平均線,一條變動速度較慢的長期移動平均線)的指數(shù)平滑移動平均線來計算二者之間的差別狀況(DIF),作為研判行情的基礎(chǔ),然后再計算出的9日平滑移動平均線。計算公式為:指數(shù)平滑異同平均線(MACD)第9章

Python計算指數(shù)平滑移動平均的命令為:P.ewm(n).mean()其中,P為價格序列值,n為周期數(shù)。例如,計算12日、26日指數(shù)平滑移動平均為:

Z12=P.ewm(12).mean()

Z26=P.ewm(26).mean()則DIF、DEA、MACD計算算法如下:

DIF=Z12-Z26

Ift=1

DEA[t]=DIF[t]

Ift>1

DEA[t]=(2*DIF[t]+8*DEA[t-1])/10

MACD[t]=2*(DIF[t]-DEA[t])隨機指標(KDJ)第9章

隨機指標(KDJ)一般是用于股票分析的統(tǒng)計體系,根據(jù)統(tǒng)計學原理,通過一個特定的周期(常為9日、9周等)內(nèi)出現(xiàn)過的最高價、最低價及最后一個計算周期的收盤價及這三者之間的比例關(guān)系,計算最后一個計算周期的未成熟隨機值RSV,然后根據(jù)平滑移動平均線的方法計算K值、D值與J值,并繪成曲線圖研判股票價格走勢。Hn、Ln分別表示n日內(nèi)最高收盤價和最低收盤價,n=9。隨機指標(KDJ)第9章

Python計算移動周期內(nèi)的最大最小值命令為:P.rolling(n).max()P.rolling(n).min()其中,P為價格序列,n為周期數(shù)。例如,計算9日移動最大最小值為:Lmin=P.rolling(9).min()Lmax=P.rolling(9).max()RSV=(P-Lmin)/(Lmax-Lmin)則計算KDJ指標算法如下:Ift=1K[t]=RSV[t]D[t]=RSV[t]Ift>1K[t]=2/3*K[t-1]+1/3*RSV[t]D[t]=2/3*D[t-1]+1/3*K[t]J[t]=3*D[t]-2*K[t]相對強弱指標(RSI)第9章

相對強弱指標是利用一定時期內(nèi)平均收盤漲數(shù)與平均收盤跌數(shù)的比值來反映股市走勢的。“一定時期”的選擇是不同的,一般講,天數(shù)選擇短,易對起伏的股市產(chǎn)生動感,不易平衡長期投資的心理準備,做空做多的短期行為增多。天數(shù)選擇長,對短期的投資機會不易把握。因此RSI一般可選用天數(shù)為6天、12天、24天,計算公式為:公式中,A=n日內(nèi)收盤漲數(shù);B=n日內(nèi)收盤跌數(shù);n=6,12,24相對強弱指標(RSI)第9章

相對強弱指標RSI計算方法如下:(1)預定義漲跌標識向量z,即z=np.zeros(len(P)-1),其中P為價格序列。(2)漲跌標識向量賦值。

z[P(2:end)-P(1:end-1)≥0]=1

#漲

z[P(2:end)-P(1:end-1)<0]=-1

#跌

z1=pd.Series(z==1)#轉(zhuǎn)化為序列

z2=pd.Series(z==-1)

#轉(zhuǎn)化為序列(3)漲跌情況統(tǒng)計。

z1=z1.rolling(N).sum()#N日移動計算漲數(shù)

z2=z2.rolling(N).sum()#N日移動計算跌數(shù)

z1=z1.values

#取values值,轉(zhuǎn)為數(shù)組

z2=z2.values

#取values值,轉(zhuǎn)為數(shù)組(4)RSI指標計算。

fort=Ntolen(P)-1

rsi[t]=z1[t]/(z1[t]+z2[t])乖離率指標(BIAS)第9章

乖離率指標(BIAS)通過計算市場指數(shù)或收盤價與某條移動平均線之間的差距百分比,以反映一定時期內(nèi)價格與其MA偏離程度的指標,從而得出價格在劇烈波動時因偏離移動平均趨勢而造成回檔或反彈的可能性,以及價格在正常波動范圍內(nèi)移動而形成繼續(xù)原有勢的可信度,計算公式為:算法如下:(1)預定義乘離率指標bias=np.zeros((len(P))),其中P為價格序列。(2)計算n日移動平均價格man=P.rolling(n).mean()。(3)fort=ntolen(P)bias[t]=(P[t]-man[t])/man[t]能量潮指標(OBV)第9章

能量潮指標(OBV)又稱為能量潮,也叫成交量凈額指標,是通過累計每日的需求量和供給量并予以數(shù)字化,制成趨勢線,然后配合證券價格趨勢圖,從價格變動與成交量增減的關(guān)系上來推測市場氣氛的一種技術(shù)指標。計算公式為:其中,是符號函數(shù),其數(shù)值由下面的式子決定:算法如下:(1)記P、S分別為價格序列和成交量序列,預定義obv=np.zeros((len(P)))。(2)fort=1tolen(P)ift=1obv[t]=S[t]ift>1ifP[t]>=P[t-1]obv[t]=obv[t-1]+S[t]ifP[t]<P[t-1]:obv[t]=obv[t-1]-S[t]漲跌趨勢指標(因變量Y)第9章

下一日收盤價減去當日收盤價,若大于0,則下日股價呈現(xiàn)上漲趨勢,記為+1類,反之則股價呈現(xiàn)下跌趨勢,記為?1類。因變量y的計算方法如下:(1)預定義y=np.zeros(len(P)),其中P為價格序列。(2)預定義標識變量z=np.zeros(len(y)-1)。(3)fort=1tolen(z)

z[P[2:end]-P[1:end-1]>0]=1

#漲

z[P[2:end]-P[1:end-1]==0]=0#平

z[P[2:end]-P[1:end-1]<0]=-1#跌

y[t+1]=z[t]計算舉例第9章

以上汽集團(股票代碼:600104)為例計算其指標。其數(shù)據(jù)區(qū)間為:2017年1月3日—2017年12月29日StkcdTrddtClsprcDnshrtrdDnvaltrdOpnprcHiprcLoprc6001042017-01-0323.893685560788258999223.5724.323.576001042017-01-0424.293353199781480331223.9724.523.896001042017-01-0524.052085937550222785724.3824.3823.956001042017-01-0623.912297960155137241724.0424.1623.786001042017-01-0924.162586837062306871523.9324.2223.926001042017-01-1024.011733726841719233624.1524.223.976001042017-01-1123.851833578443911683524.0624.0723.776001042017-01-1223.952384200757323358723.8924.1123.87…………………………………………字段依次為股票代碼、交易日期、收盤價、交易股數(shù)、交易金額、最高價、最低價、開盤價。根據(jù)前面介紹的指標定義、計算公式及實現(xiàn)算法,這里將各類指標的計算采用函數(shù)形式進行定義。程序見Ind.py,下面僅給出函數(shù)的定義結(jié)構(gòu)。計算舉例第9章

Ind.py文件中的指標計算函數(shù)的定義結(jié)構(gòu)。defMA(data,N1,N2,N3):

……return(MAN1,MAN2,MAN3)defMACD(data):……

returnMACDdefKDJ(data,N):……return(K,D,J)defRSI(data,N):

……returnrsidefBIAS(data,N):

……returnbiasdefOBV(data):

……returnobvdefcla(data):

……returny計算舉例第9章

importIndimportpandasaspddata=pd.read_excel('data.xlsx')MA=Ind.MA(data,5,10,20)macd=Ind.MACD(data)kdj=Ind.KDJ(data,9)rsi6=Ind.RSI(data,6)rsi12=Ind.RSI(data,12)rsi24=Ind.RSI(data,24)bias5=Ind.BIAS(data,5)bias10=Ind.BIAS(data,10)bias20=Ind.BIAS(data,20)obv=Ind.OBV(data)y=Ind.cla(data)pm={'交易日期':data['Trddt'].values}PM=pd.DataFrame(pm)DF={'MA5':MA[0],'MA10':MA[1],'MA20':MA[2],

'MACD':macd,

'K':kdj[0],'D':kdj[1],'J':kdj[2],

'RSI6':rsi6,'RSI12':rsi12,'RSI24':rsi24,

'BIAS5':bias5,'BIAS10':bias10,'BIAS20':bias20,

'OBV':obv}DF=pd.DataFrame(DF)s1=PM.join(DF)y1={'漲跌趨勢':y}ZZ=pd.DataFrame(y1)s2=s1.join(ZZ)ss=s2.dropna()Data=ss[ss.iloc[:,6].values!=0]計算舉例第9章

第9章

股票價格漲跌趨勢預測訓練集和測試集的劃分、數(shù)據(jù)標準化處理和模型求解預測結(jié)果分析訓練集和測試集的劃分第9章

以2017年1月1日—2017年11月31日之間的數(shù)據(jù)作為訓練集,余下的數(shù)據(jù)(2017年12月1日—2017年12月31日,周期為1個月)為測試集,進行分類預測建模。x1=Data['交易日期']>='2017-01-01'x2=Data['交易日期']<='2017-11-30'xx=x1&x2index=xx.values==Trueindex1=xx.values==Falsex_train=Data.iloc[index,1:15]y_train=Data.iloc[index,[15]]x_test=Data.iloc[index1,1:15]y_test=Data.iloc[index1,[15]]部分結(jié)果數(shù)據(jù)標準化處理第9章

#數(shù)據(jù)標準化fromsklearn.preprocessingimportStandardScalerscaler=StandardScaler()scaler.fit(x_train)x_train=scaler.transform(x_train)x_test=scaler.transform(x_test)模型求解第9章

1.支持向量機模型fromsklearnimportsvmclf=svm.SVC()clf.fit(x_train,y_train)result=clf.predict(x_test)sc=clf.score(x_train,y_train)2.神經(jīng)網(wǎng)絡(luò)模型fromsklearn.neural_networkimportMLPClassifierclf=MLPClassifier(solver='lbfgs',alpha=1e-5,hidden_layer_sizes=8,random_state=1)clf.fit(x_train,y_train)result=clf.predict(x_test)sc=clf.score(x_train,y_train)3.邏輯回歸模型fromsklearn.linear_modelimportLogisticRegressionasLRclf=LR()clf.fit(x_train,y_train)result=clf.predict(x_test)sc=clf.score(x_train,y_train)預測結(jié)果分析第9章

result=pd.DataFrame(result)#提取預測樣本的交易日期ff=Data.iloc[index1,0]#將預測結(jié)果與實際結(jié)果整合在一起,進行比較pm1={'交易日期':ff.values,'預測結(jié)果':result.iloc[:,0].values,'實際結(jié)果':y_test.iloc[:,0].values}result1=pd.DataFrame(pm1)z=result1['預測結(jié)果'].values-result1['實際結(jié)果'].valuesR=len(z[z==0])/len(z)模型準確率sc=0.7450980392156863預測準確率R=0.7142857142857143這里以邏輯回歸為例進行說明。部分結(jié)果預測結(jié)果分析第9章

根據(jù)模型的預測情況設(shè)計一個投資策略,即如果預測結(jié)果為1,表示下一個交易日股票價格會上漲,則以當天的收盤價買入,下一個交易日的收盤價賣出,從而獲得投資收益率r_list=[]#存放收益率r_trd=[]#存放交易日期fortinrange(len(result1)-1):#如果預測結(jié)果為1,執(zhí)行投資策略ifresult1['預測結(jié)果'].values[t]==1:p1=data.loc[data['Trddt'].values==result1['交易日期'].values[t],'Clsprc'].valuesdt=data.loc[data['Trddt'].values>result1['交易日期'].values[t],['Trddt','Clsprc']]dt=dt.sort_values('Trddt')p2=dt['Clsprc'].values[0]r=(p2-p1)/p1r_list.append(r)r_trd.append(result1['交易日期'].values[t])r_total=sum(r_list)trd_r={'交易日期':r_trd,'收益率':r_list}trd_r=pd.DataFrame(trd_r)預測結(jié)果分析第9章

根據(jù)模型的預測情況設(shè)計一個投資策略,即如果預測結(jié)果為1,表示下一個交易日股票價格會上漲,則以當天的收盤價買入,下一個交易日的收盤價賣出,從而獲得投資收益率。從result1可以看出預測結(jié)果為1的一共有11天,即有11次交易機會,每次交易的收益情況如下圖所示。從而獲得總收益為:r_total=0.0777502。需要說明的是這里不考慮交易的手續(xù)費用第9章

股票價格漲跌趨勢預測單只股票模型投資收益率計算量化投資策略設(shè)計單只股票模型投資收益率計算第9章

為了方便量化投資策略的使用,我們將單只股票的指標計算、預測模型構(gòu)建及結(jié)果分析,即單只股票模型投資收益率計算的全流程定義為函數(shù)Re,該函數(shù)存在于Re_comput.py文件中defRe(data,n):

#data--表示某只股票代碼的交易數(shù)據(jù)

#n--表示選用的方法,0--神經(jīng)網(wǎng)絡(luò),1--支持向量機,2--邏輯回歸

#返回結(jié)果為一個元組(R,r_list,r_total,sc)

#其中R--表示預測準確率,r_list--表示策略每次投資收益

#r_total--表示總收益,sc--表示模型準確率

return(R,r_list,r_total,sc)量化投資策略設(shè)計第9章

以第8章中基于總體規(guī)模與投資效率指標的綜合評價方法獲得2016年排名前20只股票構(gòu)建投資組合。對投資組合中每一只股票以2017年1月1日—2017年11月30日之間的交易數(shù)據(jù)為訓練數(shù)據(jù),預測2017年12月1日—2017年12月31日之間的交易漲跌情況。如果預測結(jié)果為+1,表示下一個交易日為上漲,則以當天收盤價買入,下一個交易日收盤價賣出,計算該股票的投資收益率。最終獲得投資組合的收益率,其中投資組合的收益率為組合中所有股票收益率之和StkcdTrddtClsprcDnshrtrdDnvaltrdOpnprcHiprcLoprc0000012017-01-039.16459840494205951769.119.189.090000012017-01-049.16449329534115034449.159.189.140000012017-01-059.17344372913157696949.179.189.150000012017-01-069.13358154203271764349.179.179.110000012017-01-099.15361081573299946049.139.179.110000012017-01-109.15241053952205751329.159.169.14…………………………………………2017年交易數(shù)據(jù)量化投資策略設(shè)計第9章

首先基于第8章中基于總體規(guī)模與投資效率指標的綜合評價方法,調(diào)用其綜合評價函數(shù)Fr,函數(shù)輸入?yún)?shù)為財務(wù)報表數(shù)據(jù)和年度,函數(shù)返回結(jié)果為排名情況(證券代碼形式),并取排名前20股票代碼的構(gòu)建投資組合。importpandasaspdimportfunimportRe_comput#第8章中基于總體規(guī)模與投資效率指標的綜合評價方法,獲得排名前20的股票構(gòu)建投資組合dt=pd.read_excel('ddata.xlsx')r=fun.Fr(dt,'2016')c=r[0]code=list(c.index[0:20])量化投資策略設(shè)計第9章

其次調(diào)用前面定義的函數(shù)Re,計算投資組合收益率,并將結(jié)果導出到Excel文件中DA=pd.read_excel('DA.xlsx')#2017股票交易數(shù)據(jù)list_code=[]list_00=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論