基于Bp神經(jīng)網(wǎng)絡(luò)的股票預(yù)測_第1頁
基于Bp神經(jīng)網(wǎng)絡(luò)的股票預(yù)測_第2頁
基于Bp神經(jīng)網(wǎng)絡(luò)的股票預(yù)測_第3頁
基于Bp神經(jīng)網(wǎng)絡(luò)的股票預(yù)測_第4頁
基于Bp神經(jīng)網(wǎng)絡(luò)的股票預(yù)測_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、基于神經(jīng)網(wǎng)絡(luò)的股票預(yù)測【摘要】: 股票分析和預(yù)測是一個復(fù)雜的研究領(lǐng)域,本論文將股票技術(shù)分析理論與人工神經(jīng)網(wǎng)絡(luò)相結(jié)合,針對股票市場這一非線性系統(tǒng),運用BP神經(jīng)網(wǎng)絡(luò),研究基于歷史數(shù)據(jù)分析的股票預(yù)測模型,同時,對單只股票短期收盤價格的預(yù)測進行深入的理論分析和實證研究。本文探討了BP神經(jīng)網(wǎng)絡(luò)的模型與結(jié)構(gòu)、BP算法的學(xué)習(xí)規(guī)則、權(quán)值和閾值等,構(gòu)建了基于BP神經(jīng)網(wǎng)絡(luò)的股票短期預(yù)測模型,研究了神經(jīng)網(wǎng)絡(luò)的模式、泛化能力等問題。并且,利用搭建起的BP神經(jīng)網(wǎng)絡(luò)預(yù)測模型,采用多輸入單輸出、單隱含層的系統(tǒng),用前五天的價格來預(yù)測第六天的價格。對于網(wǎng)絡(luò)的訓(xùn)練,選用學(xué)習(xí)率可變的動量BP算法,同時,對網(wǎng)絡(luò)結(jié)構(gòu)進行了隱含層節(jié)點的

2、優(yōu)化,多次嘗試,確定最為合理、可行的隱含層節(jié)點數(shù),從而有效地解決了神經(jīng)網(wǎng)絡(luò)隱含層節(jié)點的選取問題?!綼bstract Stock analysis and forecasting is a complex field of study. The paper will make research on stock prediction model based on the analysis of historical data, using BP neural network and technical analysis theory. At the same time, making in-de

3、pth theoretical analysis and empirical studies on the short-term closing price forecasts of single stock. Secondly, making research on the model and structure of BP neural network, learning rules, weights of BP algorithm and so on, building a stock short-term forecasting model based on the BP neural

4、 network, related with the model of neural network and the ability of generalization. Moreover, using system of multiple-input single-output and single hidden layer, to forecast the sixth day price by BP neural network forecasting model structured. The network of training is chosen BP algorithm of t

5、raingdx, while making optimization on the node numbers of the hidden layer by several attempts. Thereby resolve effectively the problem of it.【關(guān)鍵詞】BP神經(jīng)網(wǎng)絡(luò) 股票預(yù)測分析1引言股票市場是一個不穩(wěn)定的非線性動態(tài)變化的復(fù)雜系統(tǒng),股價的變動受眾多因素的影響。影響股價的因素可簡單地分為兩類,一類是公司基本面的因素,另一類是股票技術(shù)面的因素,雖然股票的價值是公司未來現(xiàn)金流的折現(xiàn),由公司的基本面所決定,但是由于公司基本面的數(shù)據(jù)更新時間慢,且很多時候并不能客觀

6、反映公司的實際狀況,采用適當(dāng)數(shù)學(xué)模型就能在一定程度上實現(xiàn)對股價的預(yù)測。BP神經(jīng)網(wǎng)絡(luò)是一種模擬人腦神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)從而具有一定的預(yù)測功能的數(shù)學(xué)模型,由于其具有很強的自學(xué)習(xí)能力自適應(yīng)能力以及容錯能力等優(yōu)點,使它成為一種比較適合股票預(yù)測的方法。本文就采用此方法對股價趨勢進行了分析。MATLAB所搭配的NeuralcNetwork Toolbox,將神經(jīng)網(wǎng)絡(luò)領(lǐng)域研究的成果完整地覆蓋,它以人工神經(jīng)網(wǎng)絡(luò)理論為基礎(chǔ),用MATLAB語言構(gòu)造出典型神經(jīng)網(wǎng)絡(luò)的激活函數(shù)。另外,根據(jù)各種典型的修正網(wǎng)絡(luò)權(quán)值的規(guī)則,加上網(wǎng)絡(luò)的訓(xùn)練過程,用MATLAB編寫出網(wǎng)絡(luò)設(shè)計與訓(xùn)練的子程序,網(wǎng)絡(luò)的設(shè)計者則可以根據(jù)需要去調(diào)用工具箱中有關(guān)神

7、經(jīng)網(wǎng)絡(luò)的設(shè)計訓(xùn)練程序,使自己能夠從繁瑣的編程中解脫出來,集中精力去思考問題和解決問題,從而提高解題效率。BP神經(jīng)網(wǎng)絡(luò)算法、特點2.1 BP神經(jīng)網(wǎng)絡(luò)算法 BP網(wǎng)絡(luò)的產(chǎn)生歸功于BP算法的獲得。BP算法屬于算法,是一種有監(jiān)督式的學(xué)習(xí)算法。其主要思想為:對于q個輸入學(xué)習(xí)樣本P1,P2Pq,已知與其對應(yīng)的輸出樣本為:T1,T2Tq。學(xué)習(xí)的目的是用網(wǎng)絡(luò)的實際輸出A1,A2Aq與目標矢量T1,T2Tq之間的誤差來修改其權(quán)值,使Ai (i=1,2q )與期望的T盡可能地接近,即使網(wǎng)絡(luò)輸出層的誤差平方和達到最小。它是通過連續(xù)不斷地在相對于誤差函數(shù)斜率下降的方向上,計算網(wǎng)絡(luò)權(quán)值和偏差的變化而逐漸逼近目標的。每一次

8、權(quán)值和偏差的變化都與網(wǎng)絡(luò)誤差的影響成正比,并以反向傳播的方式傳遞到每一層的。BP算法由兩部分組成,分別為信息的正向傳遞與誤差的反向傳播。在正向傳播過程中,輸入信息從輸入經(jīng)隱含層逐層計算傳向輸出層,每一層神經(jīng)元的狀態(tài)只影響下一層神經(jīng)元的狀態(tài),如果在輸出層沒有得到期望的輸出,則計算輸出層的誤差變化值,然后轉(zhuǎn)向反向傳播;通過網(wǎng)絡(luò)將誤差信號沿原來的連接通路反傳回來,修改各層神經(jīng)元的權(quán)值,直至達到期望目標,誤差信號趨向最小。其具體的實現(xiàn)步驟如圖所示。2.2 BP神經(jīng)網(wǎng)絡(luò)在預(yù)測中的適用性基于神經(jīng)網(wǎng)絡(luò)本身的特點與優(yōu)越性,本文選擇BP神經(jīng)網(wǎng)絡(luò)用于股票預(yù)測應(yīng)用研究。第一,具有自學(xué)習(xí)功能。自學(xué)習(xí)功能對于模型預(yù)測有

9、特別重要的意義。未來的人工神經(jīng)網(wǎng)絡(luò)計算機將提供經(jīng)濟預(yù)測、市場預(yù)測、信用預(yù)測,其應(yīng)用前途是很遠大的。第二,容錯能力強。網(wǎng)絡(luò)中少量單元的局部缺損不會造成網(wǎng)絡(luò)的癱瘓,也不會影響全局,它反映了神經(jīng)網(wǎng)絡(luò)的魯棒性。神經(jīng)網(wǎng)絡(luò)帶有高度并行處理信息的機制且具有高速的自學(xué)習(xí)、自適應(yīng)能力,內(nèi)部所包含的大量可調(diào)參數(shù)使得系統(tǒng)的靈活性更強。因此,神經(jīng)網(wǎng)絡(luò)很好的魯棒性可以提高股票預(yù)測模型的適應(yīng)性與通用性。第三,具有高速尋找優(yōu)化解的能力。尋找一個復(fù)雜問題的優(yōu)化解,往往需要很大的計算量,一個針對某問題而設(shè)計的神經(jīng)網(wǎng)絡(luò),可以發(fā)揮計算機的高速運算能力,能很快找到優(yōu)化解。這對提高模型的運算效率很有幫助。第四,可以充分逼近任意復(fù)雜的非

10、線性關(guān)系。股票分析中的各個指標之間的關(guān)系并不十分明確,大多為非線性的。而神經(jīng)網(wǎng)絡(luò)能夠逼近任意復(fù)雜的非線性關(guān)系,這就決定了神經(jīng)網(wǎng)絡(luò)的預(yù)測精度比其他的預(yù)測方法要高。而對股票預(yù)測來講,預(yù)測精度無疑是非常重要的問題。第五,具有在新環(huán)境下的泛化能力,能不斷接受新樣本、新經(jīng)驗并不斷調(diào)整模型,自適應(yīng)能力強,具有動態(tài)特性。由于股票分析具有分行業(yè)、分階段的特點,其評估結(jié)果的不確定性非常大。這就意味著需要針對不同的股票設(shè)立相應(yīng)的預(yù)測模型,神經(jīng)網(wǎng)絡(luò)的這一特性正好滿足這樣的需求。然而BP神經(jīng)網(wǎng)絡(luò)也不是沒有缺點。一是其工作的隨機性較強,即使是同樣的訓(xùn)練樣本,相同的網(wǎng)絡(luò)參數(shù),多次運行生成的神經(jīng)網(wǎng)絡(luò)模型預(yù)測結(jié)果也有差別。因

11、此要得到一個較好的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),需要人為地去調(diào)試,非常耗費人力與時間,因此應(yīng)用受到了限制。二是BP算法本身存在一定的缺陷。2.3 BP神經(jīng)網(wǎng)絡(luò)模型構(gòu)建的方法建立BP神經(jīng)網(wǎng)絡(luò)模型的具體步驟:首先要分析問題的性質(zhì)及核心,然后有針對性地建立網(wǎng)絡(luò)模型,最后通過網(wǎng)絡(luò)預(yù)測分析,調(diào)整參數(shù),優(yōu)化網(wǎng)絡(luò)模型。具體過程如圖所示:股票預(yù)測BP網(wǎng)絡(luò)模型的建立3.1 數(shù)據(jù)的采集和預(yù)處理本文選擇了中國銀行(601988)2013/11/1-2014/5/15的收盤價和中國汽研(601965)2013/4/1-2014/5/12的收盤價作數(shù)據(jù)采集。根據(jù)模型建立的需要,BP神經(jīng)網(wǎng)絡(luò)要求樣本集合理區(qū)間為0,1或-1,1,所以要對

12、樣本集進行歸一化處理。歸一化公式為: Matlab中歸一化處理數(shù)據(jù)可以采用premnmx , postmnmx , tramnmx 這3個函數(shù)。本文用了premnmx歸一化函數(shù)和postmnmx反歸一化函數(shù)。premnmx語法:pn,minp,maxp,tn,mint,maxt = premnmx(p,t)參數(shù):pn: p矩陣按行歸一化后的矩陣minp,maxp:p矩陣每一行的最小值,最大值tn:t矩陣按行歸一化后的矩陣mint,maxt:t矩陣每一行的最小值,最大值作用:將矩陣p,t歸一化到-1,1 ,主要用于歸一化處理訓(xùn)練數(shù)據(jù)集。postmnmx語法: p,t = postmnmx(pn,

13、minp,maxp,tn,mint,maxt)參數(shù):minp,maxp:premnmx函數(shù)計算的p矩陣每行的最小、最大值mint,maxt:premnmx函數(shù)計算的t矩陣每行的最小值,最大值作用:將矩陣pn,tn映射回歸一化處理前的范圍。postmnmx函數(shù)主要用于將神經(jīng)網(wǎng)絡(luò)的輸出結(jié)果映射回歸一化前的數(shù)據(jù)范圍。3.2 訓(xùn)練網(wǎng)絡(luò)的設(shè)計在有合理的結(jié)構(gòu)和恰當(dāng)?shù)臋?quán)值條件下,三層前饋網(wǎng)絡(luò)可以逼近任意的連續(xù)函數(shù),這樣,就提供了一個設(shè)計BP神經(jīng)網(wǎng)絡(luò)的基本原則。較少的隱含層,可以實現(xiàn)樣本空間的超平面劃分,選擇兩層BP網(wǎng)絡(luò)就可以實現(xiàn)有效的預(yù)測了。本文將采用單隱含層的網(wǎng)絡(luò)設(shè)計,分為單隱含層和輸出層兩個網(wǎng)絡(luò)層次,如

14、圖所示。本文將連續(xù)五天的價格作為一組輸入,將第六天的價格作為輸出目標。既用前五天的價格來預(yù)測第六天的價格。所以輸入層神經(jīng)元數(shù)目是5。輸出層的節(jié)點數(shù)取決于兩個方面:輸出數(shù)據(jù)類型和表示該類型所需的數(shù)據(jù)大??;同時,根據(jù)經(jīng)典的道氏理論,股票價量分析中最重要的指標就是收盤價。本文所建的股票預(yù)測模型,就是針對單只股票的走勢進行預(yù)測,所以,將股票的收盤價作為該預(yù)測模型的唯一輸出向量,這樣,網(wǎng)絡(luò)輸出層的神經(jīng)元數(shù)目即為1。 BP網(wǎng)絡(luò)隱含層節(jié)點數(shù)的多少和BP網(wǎng)絡(luò)預(yù)測精度之間有很大相關(guān)性,節(jié)點數(shù)太少,神經(jīng)網(wǎng)絡(luò)的訓(xùn)練能力就會變?nèi)酰瑹o法完成精確預(yù)測。節(jié)點數(shù)太多,神經(jīng)網(wǎng)絡(luò)訓(xùn)練時間變長且網(wǎng)絡(luò)可能出現(xiàn)過度擬合現(xiàn)象。所以選擇合

15、適的節(jié)點數(shù)才能使BP網(wǎng)絡(luò)的性能得到最大發(fā)揮,但目前還沒有統(tǒng)一的標準來確定隱含層的節(jié)點數(shù),所以本文經(jīng)過多次試驗多次比較最終確定了隱含層節(jié)點數(shù)為12。 傳遞函數(shù)是BP網(wǎng)絡(luò)的重要組成部分,必須是連續(xù)可微的;BP網(wǎng)絡(luò)通常采用S型的對數(shù)或正切函數(shù)。本預(yù)測模型采集到的原始數(shù)據(jù),經(jīng)過歸一化處理后輸入、輸出向量均在區(qū)間-1,1范圍內(nèi),符合S型的對數(shù)或正切函數(shù)的取值區(qū)間。因此,隱含層傳遞函數(shù)選擇tansig,輸出層傳遞函數(shù)選擇purelin,訓(xùn)練函數(shù)采用traingdm。訓(xùn)練參數(shù)設(shè)為:net_1.trainParam.show = 50; 限時訓(xùn)練迭代過程net_1.trainParam.lr = 0.05;

16、學(xué)習(xí)率net_1.trainParam.mc = 0.9; 附加動量因子net_1.trainParam.epochs = 20000; 最大訓(xùn)練次數(shù)net_1.trainParam.goal = 1e-3; 訓(xùn)練要求精度訓(xùn)練過程如圖:關(guān)于性能函數(shù)的設(shè)計,本文采用典型的前項反饋網(wǎng)絡(luò)誤差性能函數(shù)為均方誤差函數(shù)mse:股票預(yù)測分析4.1中國銀行預(yù)測分析在MATLABr2014a 中用函數(shù)xlsread 導(dǎo)入已經(jīng)下載好的中國銀行(601988)2013/11/1-2014/5/15的收盤價作為輸入樣本,進行BP網(wǎng)絡(luò)訓(xùn)練。網(wǎng)絡(luò)結(jié)構(gòu):BP神經(jīng)網(wǎng)絡(luò)的仿真結(jié)果:圖中紅色線為預(yù)測曲線,藍色線為實際曲線,可以看

17、出模擬出的曲線大致上與實際曲線相同,但有些地方明顯誤差偏大,很可能是由于訓(xùn)練樣本的數(shù)目過少和訓(xùn)練次數(shù)不夠而導(dǎo)致。此圖為實際值與預(yù)測值的誤差曲線,可以明顯看出誤差確實比較大,所以此圖預(yù)測結(jié)果不盡人意。誤差訓(xùn)練情況:梯度:回歸曲線:股票分析:方法一:移動平均線與BP曲線相結(jié)合 從上圖可以看出,五日平均線從上而下穿過下降趨勢的十日線,二十日線和六十日線,表明標號1這個點在這個時候支撐線被向下突破,此時為死亡交叉點,表示股價短期將繼續(xù)下落,十日線向下突破二十日線,說明中期內(nèi)也將繼續(xù)下跌,二十日線也向下突破六十日線,長期內(nèi)也將下降,行情看跌,死亡交叉預(yù)示著空頭市場來臨,而實際曲線也驗證了預(yù)測結(jié)果。 標號

18、二為上升中的五日線由下而上穿過上升的十日線,形成黃金交叉,這個時候壓力線被向上突破,表示股價短期內(nèi)將繼續(xù)上漲,行情看好,而實際曲線也驗證了預(yù)測,同時十日線向上突破上升趨勢的二十日線,說明中期內(nèi)該股將會呈上升趨勢。 標號三為下降趨勢的五日線向下跌破十日線,說明短期內(nèi)該股會下降,而旁邊下降趨勢十日線也向下跌破了二十日線,說明中期內(nèi)該股呈下降趨勢。 標號四為上升趨勢的五日線向上突破十日線,表明短期內(nèi)該股會上升,上升趨勢的十日線也向上突破二十日線,說明該股中期內(nèi)也將呈上升趨勢,向上趨勢的二十日線也向上突破六十日線,形成黃金交叉,表明長期內(nèi)該股呈上升趨勢,結(jié)合BP曲線對下一日的預(yù)測,可以提高投資決策的準

19、確性。 標號五為下降趨勢的五日線突破了十日線,表明短期內(nèi)該股會有下降趨勢。 標號六為上升趨勢的五日線向上突破十日線,說明短期內(nèi)該股將呈上升趨勢。方法二:指數(shù)平滑異同平均線(MACD)分析法:MACD稱為指數(shù)平滑異同平均線,是從雙移動平均線發(fā)展而來的,由快的移動平均線減去慢的移動平均線,MACD的意義和雙移動平均線基本相同,但閱讀起來更方便。當(dāng)MACD從負數(shù)轉(zhuǎn)向正數(shù),是買的信號。當(dāng)MACD從正數(shù)轉(zhuǎn)向負數(shù),是賣的信號。當(dāng)MACD以大角度變化,表示快的移動平均線和慢的移動平均線的差距非常迅速的拉開,代表了一個市場大趨勢的轉(zhuǎn)變。MACD線從正數(shù)轉(zhuǎn)向負數(shù)時,股票即將有下降趨勢,是賣出的信號,從負數(shù)轉(zhuǎn)向正

20、數(shù)的時候,股票有即將有上升的趨勢,是買入的信號。綜合所述,本次股票預(yù)測還算是成功,預(yù)測結(jié)果往往令人滿意。MATLAB程序:clc;clear;close all;P=xlsread(中國銀行2);T=xlsread(中國銀行T2);Hn=xlsread(中國銀行H2n);K=xlsread(中國銀行五日線);L=xlsread(中國銀行十日線);M=xlsread(中國銀行二十日線);N=xlsread(中國銀行六十日線);Pn,minp,maxp,Tn,mint,maxt=premnmx(P,T) net_1=newff(minmax(Pn),12,1,tansig,purelin,trai

21、ngdm) % 當(dāng)前輸入層權(quán)值和閾值inputWeights=net_1.IW1,1inputbias=net_1.b1% 當(dāng)前網(wǎng)絡(luò)層權(quán)值和閾值layerWeights=net_1.LW2,1layerbias=net_1.b2 % 設(shè)置訓(xùn)練參數(shù)net_1.trainParam.show = 50;net_1.trainParam.lr = 0.05;net_1.trainParam.mc = 0.9;net_1.trainParam.epochs = 100000;net_1.trainParam.goal = 1e-3; % 調(diào)用 TRAINGDM 算法訓(xùn)練 BP 網(wǎng)絡(luò)net_1,tr=t

22、rain(net_1,Pn,Tn); % 對 BP 網(wǎng)絡(luò)進行仿真A = sim(net_1,Hn);% 計算仿真誤差 E = Tn - A;MSE=mse(E); A1,T1 = postmnmx(A,min(min(P),max(max(P),Tn,mint,maxt) x=1:129;x1=1:131plot(x,A1,r);hold on plot(x,T1,b);hold on plot(x1,K,w);hold on plot(x1,L,y);hold on plot(x1,M,m);hold on plot(x1,N,c);title(中國銀行2013/11/1-2014/5/15

23、);legend(預(yù)測,實際,五日線,十日線,二十日線,六十日線,1);figure(2)plot(x,E,r)4.2中國汽研預(yù)測分析;在MATLABr2014a 中用函數(shù)xlsread 導(dǎo)入已經(jīng)下載好的中國汽研(601965)2013/4/1-2014/5/12的收盤價作為輸入樣本,進行BP網(wǎng)絡(luò)訓(xùn)練。網(wǎng)絡(luò)結(jié)構(gòu):BP神經(jīng)網(wǎng)絡(luò)的仿真結(jié)果:圖中紅色曲線為預(yù)測曲線,藍色曲線為實際曲線,從圖可以看出,BP曲線近似的模擬出真實曲線,較之前中國銀行的預(yù)測效果要好,主要原因是中國汽研的訓(xùn)練樣本數(shù)目提升到256組,并且訓(xùn)練了十萬次,誤差到了0.006。誤差訓(xùn)練情況:梯度:回歸曲線:股票分析:方法一:移動平均線

24、與BP曲線相結(jié)合 從標號一可以看出,下降趨勢的五日線突破了下降趨勢的十日線,說明短期內(nèi)該股票將下跌,下降趨勢的十日線也同樣突破下降趨勢的二十日線,表明該股中期內(nèi)也將下降,投資者此時應(yīng)謹慎。標號一和標號二之間連續(xù)出現(xiàn)幾個死亡交叉點,并且BP曲線出現(xiàn)波動,此時投資者應(yīng)該慎重考慮,切勿急功近利。 標號二表明上升趨勢的五日線向上突破十日線,表明短期內(nèi)該股將上漲,同時上升趨勢的十日線也向上突破上升趨勢的二十日線,表明中期內(nèi)該股也呈上升趨勢。 標號三可以看出,上升趨勢的五日線向上穿過上升趨勢的十日線,所以該股短期內(nèi)將會上升,同樣的上升趨勢的十日線向上穿過上升趨勢的二十日線,說明該股在中期內(nèi)也將會上升。 標

25、號四可以看出,下降趨勢的五日線向下穿過下降趨勢的十日線,表明短期內(nèi)該股將會上升,但是標號四與標號五之間連續(xù)出現(xiàn)幾個死亡交叉點,并且BP曲線出現(xiàn)波動,此時投資者應(yīng)該慎重考慮,切勿急功近利。 標號五為下降趨勢的五日線,二十日線,分別向下穿過下降趨勢的十日線,六十日線,表明該股短期內(nèi),長期內(nèi)將會下降,實際與預(yù)測的結(jié)果大致相同。方法二:指數(shù)平滑異同平均線(MACD)分析法:MACD稱為指數(shù)平滑異同平均線,是從雙移動平均線發(fā)展而來的,由快的移動平均線減去慢的移動平均線,MACD的意義和雙移動平均線基本相同,但閱讀起來更方便。當(dāng)MACD從負數(shù)轉(zhuǎn)向正數(shù),是買的信號。當(dāng)MACD從正數(shù)轉(zhuǎn)向負數(shù),是賣的信號。當(dāng)M

26、ACD以大角度變化,表示快的移動平均線和慢的移動平均線的差距非常迅速的拉開,代表了一個市場大趨勢的轉(zhuǎn)變。MACD線從正數(shù)轉(zhuǎn)向負數(shù)時,股票即將有下降趨勢,是賣出的信號,從負數(shù)轉(zhuǎn)向正數(shù)的時候,股票有即將有上升的趨勢,是買入的信號。綜合所述,本次股票預(yù)測還算是成功,預(yù)測結(jié)果往往令人滿意。MATLAB 程序:clc;clear;close all;P=xlsread(6);T=xlsread(7);H=xlsread(8);H1=xlsread(H1);K=xlsread(中國汽研五日線);L=xlsread(中國汽研十日線);M=xlsread(中國汽研二十日線);N=xlsread(中國汽研六十日

27、線);Pn,minp,maxp,Tn,mint,maxt=premnmx(P,T) net_1=newff(minmax(Pn),12,1,tansig,purelin,traingdm) % 當(dāng)前輸入層權(quán)值和閾值inputWeights=net_1.IW1,1inputbias=net_1.b1% 當(dāng)前網(wǎng)絡(luò)層權(quán)值和閾值layerWeights=net_1.LW2,1layerbias=net_1.b2 % 設(shè)置訓(xùn)練參數(shù)net_1.trainParam.show = 50;net_1.trainParam.lr = 0.05;net_1.trainParam.mc = 0.9;net_1.tr

28、ainParam.epochs = 100000;net_1.trainParam.goal = 1e-3; % 調(diào)用 TRAINGDM 算法訓(xùn)練 BP 網(wǎng)絡(luò)net_1,tr=train(net_1,Pn,Tn); % 對 BP 網(wǎng)絡(luò)進行仿真A = sim(net_1,H);E = Tn - A;MSE=mse(E); A1,T1 = postmnmx(A,min(minp),max(maxp),Tn,mint,maxt) x=1:256;plot(x,A1,r);hold on plot(x,T1,b)hold on plot(x,K,w);hold on plot(x,L,y);hold

29、on plot(x,M,m);hold on plot(x,N,c);title(中國汽研2013/4/1-2014/5/12);legend(預(yù)測,實際,五日線,十日線,二十日線,六十日線,1)figure(2)plot(x,E,r);5.結(jié)論和前景股票市場自誕生以來,一直吸引著眾多投資者和學(xué)者的目光,對股票價格走勢的預(yù)測也始終是他們探尋的目標。然而影響股票價格的因素非常多,這樣,使得股票的預(yù)測成為一項異常困難的工作。盡管如此,這種準確預(yù)測從而獲得超額收益的機會依然吸引著一代又一代的學(xué)者和投資者進行研究和實踐。本文經(jīng)過對兩支股票數(shù)據(jù)資料的統(tǒng)計分析,建立了一個股票預(yù)測模型。由于現(xiàn)有研究條件的制

30、約,該預(yù)測模型還有許多不足之處,還需要在實踐中不斷地改進和完善。 首先,模型輸入節(jié)點數(shù)目需進一步完善。由于數(shù)據(jù)資料的局限性,本文只選擇了5個向量作為輸入節(jié)點。但是,一個完善的預(yù)測模型需要多方面的考慮與設(shè)計,精準對度要比較高,這就需要更加完善的輸入向量設(shè)計。 其次,隱含層節(jié)點數(shù)的設(shè)計需進一步完善。由于神經(jīng)網(wǎng)絡(luò)運行的時間和效率受到計算機硬件的影響,本文只在有限的條件下進行了隱含層節(jié)點數(shù)的選擇和優(yōu)化。要進一步完善隱含層節(jié)點數(shù)的設(shè)計,就需要更加先進的計算機硬件支持,來實現(xiàn)精準的預(yù)測。最后,模型算法仍待改進。6. 結(jié)束語 本文使用的BP神經(jīng)網(wǎng)絡(luò)算法有一點的優(yōu)越性,但同時也具備一些固有的缺陷,而且預(yù)測精度

31、也沒有達到更好的效果。因此,可以嘗試使用RBF和遺傳算法等其他方式建立組合模型,提高模型預(yù)測的準確性和普遍適應(yīng)性?!緟⒖嘉墨I】1劉琳 基于BP神經(jīng)網(wǎng)絡(luò)的股票短期預(yù)測應(yīng)用研究 對外經(jīng)濟貿(mào)易大學(xué)。2 許興軍 顏鋼鋒 基于BP神經(jīng)網(wǎng)絡(luò)的股價趨勢分析 浙江大學(xué)電氣自動化研究所3陳東 BP神經(jīng)網(wǎng)絡(luò)在證券指數(shù)預(yù)測中的的研究與應(yīng)用。4 鐘珞、饒文碧、鄒承明,人工神經(jīng)網(wǎng)絡(luò)及其融合應(yīng)用技術(shù),科學(xué)出版社5 叢爽,面向MATLAB工具箱的神經(jīng)網(wǎng)絡(luò)理論與應(yīng)用,合肥:中國科學(xué)技術(shù)大學(xué)出版社,2009.46張德豐,MATLAB神經(jīng)網(wǎng)絡(luò)應(yīng)用設(shè)計,北京:機械工業(yè)出版社,2009.1附錄資料:不需要的可以自行刪除 C語言圖形模

32、式速成第一節(jié) 圖形模式的初始化Turbo C 提供了非常豐富的圖形函數(shù),所有圖形函數(shù)的原型均在graphics. h 中,本節(jié)主要介紹圖形模式的初始化、獨立圖形程序的建立、基本圖形功能、圖形窗口以及圖形模式下的文本輸出等函數(shù)。另外,使用圖形函數(shù)時要確保有顯示器圖形驅(qū)動程序*.BGI,同時將集成開發(fā)環(huán)境options/Linker中的Graphics lib選為on,只有這樣才能保證正確使用圖形函數(shù)。 不同的顯示器適配器有不同的圖形分辨率。即是同一顯示器適配器,在不同模式下也有不同分辨率。因此,在屏幕作圖之前,必須根據(jù)顯示器適配器種類將顯示器設(shè)置成為某種圖形模式,在未設(shè)置圖形模式之前,微機系統(tǒng)默

33、認屏幕為文本模式(80列,25行字符模式),此時所有圖形函數(shù)均不能工作。設(shè)置屏幕為圖形模式,可用下列圖形初始化函數(shù):void far initgraph(int far *gdriver, int far *gmode,char *path);其中g(shù)driver和gmode分別表示圖形驅(qū)動器和模式,path是指圖形驅(qū)動程序所在的目錄路徑。有關(guān)圖形驅(qū)動器、圖形模式的符號常數(shù)及對應(yīng)的分辨率見graphics. h。圖形驅(qū)動程序由Turbo C出版商提供,文件擴展名為.BGI。 根據(jù)不同的圖形適配器有不同的圖形驅(qū)動程序。例如對于EGA、 VGA 圖形適配器就調(diào)用驅(qū)動程序EGAVGA.BGI。#inc

34、lude stdio.h#include graphics.hint main()int gdriver, gmode;gdriver=VGA;gmode=VGAHI;initgraph(&gdriver, &gmode, C:TC2.0BGI);bar3d(100, 100, 300, 250, 50, 1); /*畫一長方體*/getch();closegraph();return 0;有時編程者并不知道所用的圖形顯示器適配器種類,或者需要將編寫的程序用于不同圖形驅(qū)動器,Turbo C 提供了一個自動檢測顯示器硬件的函數(shù),其調(diào)用格式為:void far detectgraph(int *g

35、driver, *gmode);其中g(shù)driver和gmode的意義與上面相同。 自動進行硬件測試后進行圖形初始化:#include stdio.h#include graphics.hint main()int gdriver, gmode;detectgraph(&gdriver, &gmode); /*自動測試硬件*/printf(the graphics driver is %d, mode is %dn,gdriver,gmode); /*輸出測試結(jié)果*/getch();initgraph(&gdriver, &gmode, C:TC2.0BGI);/* 根據(jù)測試結(jié)果初始化圖形*/b

36、ar3d(100, 100, 300, 250, 50, 1); /*畫一長方體*/getch();closegraph();return 0;上例程序中先對圖形顯示器自動檢測,然后再用圖形初始化函數(shù)進行初始化設(shè)置,但Turbo C提供了一種更簡單的方法, 即用gdriver=DETECT 語句后再跟initgraph()函數(shù)就行了。采用這種方法后,上例可改為:#include stdio.h#include graphics.hint main()int gdriver=DETECT, gmode;initgraph(&gdriver, &gmode, C:TC2.0BGI);bar3d(5

37、0, 50, 150, 30, 50, 1);getch();closegraph();return 0;另外,Turbo C 提供了退出圖形狀態(tài)的函數(shù)closegraph(),其調(diào)用格式為:void far closegraph(void);第二節(jié) 屏幕顏色的設(shè)置和清屏函數(shù)對于圖形模式的屏幕顏色設(shè)置,同樣分為背景色的設(shè)置和前景色的設(shè)置。在Turbo C中分別用下面兩個函數(shù): 設(shè)置背景色: void far setbkcolor(int color);設(shè)置作圖色: void far setcolor(int color);其中color 為圖形方式下顏色的規(guī)定數(shù)值,對EGA,VGA顯示器適配器

38、,有關(guān)顏色的符號常數(shù)及數(shù)值見graphics.h。清除圖形屏幕內(nèi)容但不清除圖形背景使用清屏函數(shù),其調(diào)用格式如下: voide far cleardevice(void);#include stdio.h#include graphics.hint main()int gdriver, gmode, i,aa;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2.0BGI); /*圖形初始化*/setbkcolor(0); /*設(shè)置圖形背景*/cleardevice();for(i=0; i=15; i+)setcolor(i); /*設(shè)置不同作圖色*

39、/circle(320, 240, 20+i*10); /*畫半徑不同的圓*/getch();for(i=0; i=15; i+)setbkcolor(i); /*設(shè)置不同背景色*/cleardevice();circle(320, 240, 20+i*10);getch();aa=getmaxcolor();printf(maxcolor=%d,aa);getch();closegraph();return 0;另外,TURBO C也提供了幾個獲得現(xiàn)行顏色設(shè)置情況的函數(shù)。 int far getbkcolor(void); 返回現(xiàn)行背景顏色值。int far getcolor(void);

40、返回現(xiàn)行作圖顏色值。int far getmaxcolor(void); 返回最高可用的顏色值。第三節(jié) 基本畫圖函數(shù)基本圖形函數(shù)包括畫點,線以及其它一些基本圖形的函數(shù)。本節(jié)對這些函數(shù)作一全面的介紹。 、畫點. 畫點函數(shù) void far putpixel(int x, int y, int color); 該函數(shù)表示有指定的象元畫一個按color 所確定顏色的點。對于顏色color的值可從表3中獲得而對x, y是指圖形象元的坐標。在圖形模式下,是按象元來定義坐標的。對VGA適配器,它的最高分辨率為640 x480,其中640為整個屏幕從左到右所有象元的個數(shù),480為整個屏幕從上到下所有象元的個

41、數(shù)。屏幕的左上角坐標為(0,0),右下角坐標為(639, 479),水平方向從左到右為x 軸正向,垂直方向從上到下為y軸正向。TURBO C的圖形函數(shù)都是相對于圖形屏幕坐標,即象元來說的。關(guān)于點的另外一個函數(shù)是: int far getpixel(int x, int y); 它獲得當(dāng)前點(x, y)的顏色值。 II、有關(guān)坐標位置的函數(shù) int far getmaxx(void);返回x軸的最大值。int far getmaxy(void);返回y軸的最大值。int far getx(void); 返回游標在x軸的位置。void far gety(void); 返回游標有y軸的位置。void

42、far moveto(int x, int y); 移動游標到(x, y)點,不是畫點,在移動過程中亦畫點。void far moverel(int dx, int dy); 移動游標從現(xiàn)行位置(x, y)移動到(x+dx, y+dy)的位置,移動過程中不畫點。、畫線I. 畫線函數(shù)TURBO C提供了一系列畫線函數(shù): void far line(int x0, int y0, int x1, int y1); 畫一條從點(x0, y0)到(x1, y1)的直線。void far lineto(int x, int y); 畫一作從現(xiàn)行游標到點(x, y)的直線。void far linerel

43、(int dx, int dy); 畫一條從現(xiàn)行游標(x,y)到按相對增量確定的點(x+dx, y+dy)的直線。void far circle(int x, int y, int radius); 以(x, y)為圓心,radius為半徑,畫一個圓。void far arc(int x, int y, int stangle, int endangle,int radius); 以(x,y)為圓心,radius為半徑,從stangle開始到endangle結(jié)束(用度表示)畫一段圓弧線。在TURBO C中規(guī)定x軸正向為0 度,逆時針方向旋轉(zhuǎn)一周, 依次為90,180, 270和360度(其它有

44、關(guān)函數(shù)也按此規(guī)定,不再重述)。 void ellipse(int x, int y, int stangle, int endangle,int xradius,int yradius);以(x, y)為中心,xradius,yradius為x軸和y軸半徑,從角stangle 開始到endangle結(jié)束畫一段橢圓線,當(dāng)stangle=0,endangle=360時, 畫出一個完整的橢圓。void far rectangle(int x1, int y1, int x2, inty2); 以(x1, y1)為左上角,(x2, y2)為右下角畫一個矩形框。 void far drawpoly(in

45、t numpoints, int far *polypoints); 畫一個頂點數(shù)為numpoints,各頂點坐標由polypoints給出的多邊形。polypoints整型數(shù)組必須至少有2 倍頂點數(shù)個無素。每一個頂點的坐標都定義為x,y,并且x在前。值得注意的是當(dāng)畫一個封閉的多邊形時,numpoints 的值取實際多邊形的頂點數(shù)加一,并且數(shù)組polypoints中第一個和最后一個點的坐標相同。下面舉一個用drawpoly()函數(shù)畫箭頭的例子。#include stdio.h#include graphics.hint main()int gdriver, gmode, i;int arw16

46、=200,102,300,102,300,107,330,100,300,93,300,98,200,98,200,102;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2.0BGI);setbkcolor(BLUE);cleardevice();setcolor(12); /*設(shè)置作圖顏色*/drawpoly(8, arw); /*畫一箭頭*/getch();closegraph();return 0;II、設(shè)定線型函數(shù)在沒有對線的特性進行設(shè)定之前,TURBO C 用其默認值,即一點寬的實線,但TURBO C 也提供了可以改變線型的函數(shù)。線型包

47、括:寬度和形狀。其中寬度只有兩種選擇:一點寬和三點寬。而線的形狀則有五種。下面介紹有關(guān)線型的設(shè)置函數(shù)。void far setlinestyle(int linestyle,unsigned upattern,int thickness);該函數(shù)用來設(shè)置線的有關(guān)信息,其中l(wèi)inestyle是線形狀的規(guī)定,見graphics.h。對于upattern,只有l(wèi)inestyle選USERBIT_LINE 時才有意義 (選其它線型,uppattern取0即可)。此時uppattern的16位二進制數(shù)的每一位代表一個象元,如果那位為1,則該象元打開,否則該象元關(guān)閉。 void far getlinese

48、ttings(struct linesettingstypefar *lineinfo);該函數(shù)將有關(guān)線的信息存放到由lineinfo 指向的結(jié)構(gòu)中,表中l(wèi)inesettingstype的結(jié)構(gòu)如下:struct linesettingstypeint linestyle;unsigned upattern;int thickness;例如下面兩句程序可以讀出當(dāng)前線的特性 struct linesettingstype *info;getlinesettings(info);void far setwritemode(int mode);該函數(shù)規(guī)定畫線的方式。如果mode=0,則表示畫線時將所畫

49、位置的原來信息覆蓋了(這是TURBO C的默認方式)。如果mode=1, 則表示畫線時用現(xiàn)在特性的線與所畫之處原有的線進行異或(XOR)操作,實際上畫出的線是原有線與現(xiàn)在規(guī)定的線進行異或后的結(jié)果。因此,當(dāng)線的特性不變,進行兩次畫線操作相當(dāng)于沒有畫線。有關(guān)線型設(shè)定和畫線函數(shù)的例子如下所示。#include stdio.h#include graphics.hint main()int gdriver, gmode, i;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2.0BGI);setbkcolor(BLUE);cleardevice();set

50、color(GREEN);circle(320, 240, 98);setlinestyle(0, 0, 3); /*設(shè)置三點寬實線*/setcolor(2);rectangle(220, 140, 420, 340);setcolor(WHITE);setlinestyle(4, 0 xaaaa, 1);/*設(shè)置一點寬用戶定義線*/line(220, 240, 420, 240);line(320, 140, 320, 340);getch();closegraph();return 0;第四節(jié) 基本圖形的填充填充就是用規(guī)定的顏色和圖模填滿一個封閉圖形。 一般是先畫輪廓再填充。TURBO C

51、提供了一些先畫出基本圖形輪廓, 再按規(guī)定圖模和顏色填充整個封閉圖形的函數(shù)。在沒有改變填充方式時,TURBO C 以默認方式填充。 void far bar(int x1, int y1, int x2, int y2);確定一個以(x1,y1)為左上角,(x2,y2)為右下角的矩形窗口,再按規(guī)定圖模和顏色填充。說明:此函數(shù)不畫出邊框,所以填充色為邊框。void far bar3d(int x1, int y1, int x2, int y2,int depth,int topflag);當(dāng)topflag為非0時, 畫出一個三維的長方體。當(dāng)topflag為0時,三維圖形不封頂,實際上很少這樣使用

52、。說明: bar3d()函數(shù)中,長方體第三維的方向不隨任何參數(shù)而變,即始終為45度的方向。void far pieslice(int x,int y,int stangle,int endangle,int radius);畫一個以(x, y)為圓心,radius為半徑,stangle為起始角度,endangle 為終止角度的扇形,再按規(guī)定方式填充。當(dāng)stangle=0,endangle=360 時變成一個實心圓,并在圓內(nèi)從圓點沿X軸正向畫一條半徑。void far sector(int x, int y,int stanle,intendangle,int xradius, int yrad

53、ius);畫一個以(x, y)為圓心分別以xradius, yradius為x軸和y軸半徑,stangle 為起始角,endangle為終止角的橢圓扇形,再按規(guī)定方式填充。第五節(jié) 設(shè)定填充方式TURBO C有四個與填充方式有關(guān)的函數(shù)。下面分別介紹: void far setfillstyle(int pattern, int color); color的值是當(dāng)前屏幕圖形模式時顏色的有效值。pattern的值及與其等價的符號常數(shù)見graphics.h。除USER_FILL(用戶定義填充式樣)以外,其它填充式樣均可由setfillstyle() 函數(shù)設(shè)置。當(dāng)選用USER_FILL時,該函數(shù)對填充圖

54、模和顏色不作任何改變。 之所以定義USER_FILL主要因為在獲得有關(guān)填充信息時用到此項。void far setfillpattern(char * upattern,int color); 設(shè)置用戶定義的填充圖模的顏色以供對封閉圖形填充。其中upattern是一個指向8個字節(jié)的指針。這8個字節(jié)定義了8x8點陣的圖形。每個字節(jié)的8位二進制數(shù)表示水平8點,8個字節(jié)表示8行,然后以此為模型向個封閉區(qū)域填充。void far getfillpattern(char * upattern); 該函數(shù)將用戶定義的填充圖模存入upattern指針指向的內(nèi)存區(qū)域。void far getfillsetin

55、gs(struct fillsettingstypefar * fillinfo); 獲得現(xiàn)行圖模的顏色并將存入結(jié)構(gòu)指針變量fillinfo中。其中fillsettingstype結(jié)構(gòu)定義如下:struct fillsettingstypeint pattern; /* 現(xiàn)行填充模式 * /int color; /* 現(xiàn)行填充模式 * /; 有關(guān)圖形填充圖模的顏色的選擇,請看下面例程。#include stdio.h#include graphics.hmain()char str8=10,20,30,40,50,60,70,80; /*用戶定義圖模*/int gdriver,gmode,i;

56、struct fillsettingstype save;/*定義一個用來存儲填充信息的結(jié)構(gòu)變量*/gdriver=DETECT;initgraph(&gdriver,&gmode,C:TC2.0BGI);setbkcolor(BLUE);cleardevice();for(i=0;i13;i+)setcolor(i+3);setfillstyle(i,2+i); /* 設(shè)置填充類型 */bar(100,150,200,50); /*畫矩形并填充*/bar3d(300,100,500,200,70,1); /* 畫長方體并填充*/pieslice(200, 300, 90, 180, 90);

57、/*畫扇形并填充*/sector(500,300,180,270,200,100);/*畫橢圓扇形并填充*/getch();cleardevice();setcolor(14);setfillpattern(str, RED);bar(100,150,200,50);bar3d(300,100,500,200,70,0);pieslice(200,300,0,360,90);sector(500,300,0,360,100,50);getch();getfillsettings(&save);/*獲得用戶定義的填充模式信息*/closegraph();clrscr();printf(The p

58、attern is %d, The color of filling is %d,save.pattern, save.color);/*輸出目前填充圖模和顏色值*/getch();第六節(jié) 任意封閉圖形的填充截止目前為止,我們只能對一些特定形狀的封閉圖形進行填充,但還不能對任意封閉圖形進行填充。為此,TURBO C 提供了一個可對任意封閉圖形填充的函數(shù),其調(diào)用格式如下: void far floodfill(int x, int y, int border); 其中:x, y為封閉圖形內(nèi)的任意一點,border為邊界的顏色,也就是封閉圖形輪廓的顏色。調(diào)用了該函數(shù)后,將用由函數(shù)setfillst

59、yle()規(guī)定的顏色和模式填滿整個封閉圖形。注意:a. 如果x或y取在邊界上,則不進行填充。b. 如果不是封閉圖形則填充會從沒有封閉的地方溢出去,填滿其它地方。c. 如果x或y在圖形外面,則填充封閉圖形外的屏幕區(qū)域。d. 由border指定的顏色值必須與圖形輪廓的顏色值相同, 但填充色可選任意顏色。下例是有關(guān)floodfill()函數(shù)的用法,該程序填充了bar3d()所畫長方體中其它兩個未填充的面。#include stdio.h#include graphics.hmain()int gdriver, gmode;struct fillsettingstype save;gdriver=DE

60、TECT;initgraph(&gdriver, &gmode, C:TC2.0BGI);setbkcolor(BLUE);cleardevice();setcolor(LIGHTRED);setlinestyle(0,0,3);setfillstyle(1,14); /*設(shè)置填充方式*/bar3d(100,200,400,350,200,1); /*畫長方體并填充*/floodfill(450,300,LIGHTRED);/*填充長方體另外兩個面*/floodfill(250,150, LIGHTRED);rectangle(450,400,500,450); /*畫一矩形*/floodfi

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論