當前位置:首頁 » 股票盈虧 » lstm模型在股票價格預測中的應用
擴展閱讀
設計總院股票歷史股價 2023-08-31 22:08:17
股票開通otc有風險嗎 2023-08-31 22:03:12
短線買股票一天最好時間 2023-08-31 22:02:59

lstm模型在股票價格預測中的應用

發布時間: 2022-06-30 15:08:58

❶ 如何在Python中用LSTM網路進行時間序列預測

時間序列模型

時間序列預測分析就是利用過去一段時間內某事件時間的特徵來預測未來一段時間內該事件的特徵。這是一類相對比較復雜的預測建模問題,和回歸分析模型的預測不同,時間序列模型是依賴於事件發生的先後順序的,同樣大小的值改變順序後輸入模型產生的結果是不同的。
舉個栗子:根據過去兩年某股票的每天的股價數據推測之後一周的股價變化;根據過去2年某店鋪每周想消費人數預測下周來店消費的人數等等

RNN 和 LSTM 模型

時間序列模型最常用最強大的的工具就是遞歸神經網路(recurrent neural network, RNN)。相比與普通神經網路的各計算結果之間相互獨立的特點,RNN的每一次隱含層的計算結果都與當前輸入以及上一次的隱含層結果相關。通過這種方法,RNN的計算結果便具備了記憶之前幾次結果的特點。

典型的RNN網路結構如下:

4. 模型訓練和結果預測
將上述數據集按4:1的比例隨機拆分為訓練集和驗證集,這是為了防止過度擬合。訓練模型。然後將數據的X列作為參數導入模型便可得到預測值,與實際的Y值相比便可得到該模型的優劣。

實現代碼

  • 時間間隔序列格式化成所需的訓練集格式

  • import pandas as pdimport numpy as npdef create_interval_dataset(dataset, look_back):

  • """ :param dataset: input array of time intervals :param look_back: each training set feature length :return: convert an array of values into a dataset matrix. """

  • dataX, dataY = [], [] for i in range(len(dataset) - look_back):

  • dataX.append(dataset[i:i+look_back])

  • dataY.append(dataset[i+look_back]) return np.asarray(dataX), np.asarray(dataY)


  • df = pd.read_csv("path-to-your-time-interval-file")

  • dataset_init = np.asarray(df) # if only 1 columndataX, dataY = create_interval_dataset(dataset, lookback=3) # look back if the training set sequence length

  • 這里的輸入數據來源是csv文件,如果輸入數據是來自資料庫的話可以參考這里

  • LSTM網路結構搭建

  • import pandas as pdimport numpy as npimport randomfrom keras.models import Sequential, model_from_jsonfrom keras.layers import Dense, LSTM, Dropoutclass NeuralNetwork():

  • def __init__(self, **kwargs):

  • """ :param **kwargs: output_dim=4: output dimension of LSTM layer; activation_lstm='tanh': activation function for LSTM layers; activation_dense='relu': activation function for Dense layer; activation_last='sigmoid': activation function for last layer; drop_out=0.2: fraction of input units to drop; np_epoch=10, the number of epoches to train the model. epoch is one forward pass and one backward pass of all the training examples; batch_size=32: number of samples per gradient update. The higher the batch size, the more memory space you'll need; loss='mean_square_error': loss function; optimizer='rmsprop' """

  • self.output_dim = kwargs.get('output_dim', 8) self.activation_lstm = kwargs.get('activation_lstm', 'relu') self.activation_dense = kwargs.get('activation_dense', 'relu') self.activation_last = kwargs.get('activation_last', 'softmax') # softmax for multiple output

  • self.dense_layer = kwargs.get('dense_layer', 2) # at least 2 layers

  • self.lstm_layer = kwargs.get('lstm_layer', 2) self.drop_out = kwargs.get('drop_out', 0.2) self.nb_epoch = kwargs.get('nb_epoch', 10) self.batch_size = kwargs.get('batch_size', 100) self.loss = kwargs.get('loss', 'categorical_crossentropy') self.optimizer = kwargs.get('optimizer', 'rmsprop') def NN_model(self, trainX, trainY, testX, testY):

  • """ :param trainX: training data set :param trainY: expect value of training data :param testX: test data set :param testY: epect value of test data :return: model after training """

  • print "Training model is LSTM network!"

  • input_dim = trainX[1].shape[1]

  • output_dim = trainY.shape[1] # one-hot label

  • # print predefined parameters of current model:

  • model = Sequential() # applying a LSTM layer with x dim output and y dim input. Use dropout parameter to avoid overfitting

  • model.add(LSTM(output_dim=self.output_dim,

  • input_dim=input_dim,

  • activation=self.activation_lstm,

  • dropout_U=self.drop_out,

  • return_sequences=True)) for i in range(self.lstm_layer-2):

  • model.add(LSTM(output_dim=self.output_dim,

  • input_dim=self.output_dim,

  • activation=self.activation_lstm,

  • dropout_U=self.drop_out,

  • return_sequences=True)) # argument return_sequences should be false in last lstm layer to avoid input dimension incompatibility with dense layer

  • model.add(LSTM(output_dim=self.output_dim,

  • input_dim=self.output_dim,

  • activation=self.activation_lstm,

  • dropout_U=self.drop_out)) for i in range(self.dense_layer-1):

  • model.add(Dense(output_dim=self.output_dim,

  • activation=self.activation_last))

  • model.add(Dense(output_dim=output_dim,

  • input_dim=self.output_dim,

  • activation=self.activation_last)) # configure the learning process

  • model.compile(loss=self.loss, optimizer=self.optimizer, metrics=['accuracy']) # train the model with fixed number of epoches

  • model.fit(x=trainX, y=trainY, nb_epoch=self.nb_epoch, batch_size=self.batch_size, validation_data=(testX, testY)) # store model to json file

  • model_json = model.to_json() with open(model_path, "w") as json_file:

  • json_file.write(model_json) # store model weights to hdf5 file

  • if model_weight_path: if os.path.exists(model_weight_path):

  • os.remove(model_weight_path)

  • model.save_weights(model_weight_path) # eg: model_weight.h5

  • return model

  • 這里寫的只涉及LSTM網路的結構搭建,至於如何把數據處理規范化成網路所需的結構以及把模型預測結果與實際值比較統計的可視化,就需要根據實際情況做調整了。

    ❷ 一支簡單的股票價格預測的數學模型!!!!

    對於股票價格只能是在理論上,換句話說是在你自己的期望預期。
    而對於股票價格預測一般是從他的基本面上來考慮。
    你可以試試下面的方法:
    杜邦財務分析法及案例分析
    摘要:杜邦分析法是一種財務比率分解的方法,能有效反映影響企業獲利能力的各指標間的相互聯系,對企業的財務狀況和經營成果做出合理的分析。
    關鍵詞:杜邦分析法;獲利能力;財務狀況
    獲利能力是企業的一項重要的財務指標,對所有者、債權人、投資者及政府來說,分析評價企業的獲利能力對其決策都是至關重要的,獲利能力分析也是財務管理人員所進行的企業財務分析的重要組成部分。
    傳統的評價企業獲利能力的比率主要有:資產報酬率,邊際利潤率(或凈利潤率),所有者權益報酬率等;對股份制企業還有每股利潤,市盈率,股利發放率,股利報酬率等。這些單個指標分別用來衡量影響和決定企業獲利能力的不同因素,包括銷售業績,資產管理水平,成本控制水平等。
    這些指標從某一特定的角度對企業的財務狀況以及經營成果進行分析,它們都不足以全面地評價企業的總體財務狀況以及經營成果。為了彌補這一不足,就必須有一種方法,它能夠進行相互關聯的分析,將有關的指標和報表結合起來,採用適當的標准進行綜合性的分析評價,既全面體現企業整體財務狀況,又指出指標與指標之間和指標與報表之間的內在聯系,杜邦分析法就是其中的一種。
    杜邦財務分析體系(TheDuPontSystem)是一種比較實用的財務比率分析體系。這種分析方法首先由美國杜邦公司的經理創造出來,故稱之為杜邦財務分析體系。這種財務分析方法從評價企業績效最具綜合性和代表性的指標-權益凈利率出發,層層分解至企業最基本生產要素的使用,成本與費用的構成和企業風險,從而滿足通過財務分析進行績效評價的需要,在經營目標發生異動時經營者能及時查明原因並加以修正,同時為投資者、債權人及政府評價企業提供依據。
    一、杜邦分析法和杜邦分析圖
    杜邦模型最顯著的特點是將若干個用以評價企業經營效率和財務狀況的比率按其內在聯系有機地結合起來,形成一個完整的指標體系,並最終通過權益收益率來綜合反映。採用這一方法,可使財務比率分析的層次更清晰、條理更突出,為報表分析者全面仔細地了解企業的經營和盈利狀況提供方便。
    杜邦分析法有助於企業管理層更加清晰地看到權益資本收益率的決定因素,以及銷售凈利潤率與總資產周轉率、債務比率之間的相互關聯關系,給管理層提供了一張明晰的考察公司資產管理效率和是否最大化股東投資回報的路線圖。
    杜邦分析法利用各個主要財務比率之間的內在聯系,建立財務比率分析的綜合模型,來綜合地分析和評價企業財務狀況和經營業績的方法。採用杜邦分析圖將有關分析指標按內在聯系加以排列,從而直觀地反映出企業的財務狀況和經營成果的總體面貌。
    杜邦財務分析體系如圖所示:

    二、對杜邦圖的分析
    1.圖中各財務指標之間的關系:
    可以看出杜邦分析法實際上從兩個角度來分析財務,一是進行了內部管理因素分析,二是進行了資本結構和風險分析。
    權益凈利率=資產凈利率×權益乘數
    權益乘數=1÷(1-資產負債率)
    資產凈利率=銷售凈利率×總資產周轉率
    銷售凈利率=凈利潤÷銷售收入
    總資產周轉率=銷售收入÷總資產
    資產負債率=負債總額÷總資產
    2.杜邦分析圖提供了下列主要的財務指標關系的信息:
    (1)權益凈利率是一個綜合性最強的財務比率,是杜邦分析系統的核心。它反映所有者投入資本的獲利能力,同時反映企業籌資、投資、資產運營等活動的效率,它的高低取決於總資產利潤率和權益總資產率的水平。決定權益凈利率高低的因素有三個方面--權益乘數、銷售凈利率和總資產周轉率。權益乘數、銷售凈利率和總資產周轉率三個比率分別反映了企業的負債比率、盈利能力比率和資產管理比率。
    (2)權益乘數主要受資產負債率影響。負債比率越大,權益乘數越高,說明企業有較高的負債程度,給企業帶來較多地杠桿利益,同時也給企業帶來了較多地風險。資產凈利率是一個綜合性的指標,同時受到銷售凈利率和資產周轉率的影響。
    (3)資產凈利率也是一個重要的財務比率,綜合性也較強。它是銷售凈利率和總資產周轉率的乘積,因此,要進一步從銷售成果和資產營運兩方面來分析。
    銷售凈利率反映了企業利潤總額與銷售收入的關系,從這個意義上看提高銷售凈利率是提高企業盈利能力的關鍵所在。要想提高銷售凈利率:一是要擴大銷售收入;二是降低成本費用。而降低各項成本費用開支是企業財務管理的一項重要內容。通過各項成本費用開支的列示,有利於企業進行成本費用的結構分析,加強成本控制,以便為尋求降低成本費用的途徑提供依據。
    企業資產的營運能力,既關繫到企業的獲利能力,又關繫到企業的償債能力。一般而言,流動資產直接體現企業的償債能力和變現能力;非流動資產體現企業的經營規模和發展潛力。兩者之間應有一個合理的結構比率,如果企業持有的現金超過業務需要,就可能影響企業的獲利能力;如果企業佔用過多的存貨和應收賬款,則既要影響獲利能力,又要影響償債能力。為此,就要進一步分析各項資產的佔用數額和周轉速度。對流動資產應重點分析存貨是否有積壓現象、貨幣資金是否閑置、應收賬款中分析客戶的付款能力和有無壞賬的可能;對非流動資產應重點分析企業固定資產是否得到充分的利用。
    三、利用杜邦分析法作實例分析
    杜邦財務分析法可以解釋指標變動的原因和變動趨勢,以及為採取措施指明方向。下面以一家上市公司北汽福田汽車(600166)為例,說明杜邦分析法的運用。
    福田汽車的基本財務數據如下表:

    (一)對權益凈利率的分析
    權益凈利率指標是衡量企業利用資產獲取利潤能力的指標。權益凈利率充分考慮了籌資方式對企業獲利能力的影響,因此它所反映的獲利能力是企業經營能力、財務決策和籌資方式等多種因素綜合作用的結果。
    該公司的權益凈利率在2001年至2002年間出現了一定程度的好轉,分別從2001年的0.097增加至2002年的0.112.企業的投資者在很大程度上依據這個指標來判斷是否投資或是否轉讓股份,考察經營者業績和決定股利分配政策。這些指標對公司的管理者也至關重要。
    公司經理們為改善財務決策而進行財務分析,他們可以將權益凈利率分解為權益乘數和資產凈利率,以找到問題產生的原因。
    表三:權益凈利率分析表

    福田汽車權益凈利率=權益乘數×資產凈利率
    2001年0.097=3.049×0.032
    2002年0.112=2.874×0.039
    通過分解可以明顯地看出,該公司權益凈利率的變動在於資本結構(權益乘數)變動和資產利用效果(資產凈利率)變動兩方面共同作用的結果。而該公司的資產凈利率太低,顯示出很差的資產利用效果。
    (二)分解分析過程:
    權益凈利率=資產凈利率×權益乘數
    2001年0.097=0.032×3.049
    2002年0.112=0.039×2.874
    經過分解表明,權益凈利率的改變是由於資本結構的改變(權益乘數下降),同時資產利用和成本控制出現變動(資產凈利率也有改變)。那麼,我們繼續對資產凈利率進行分解:
    資產凈利率=銷售凈利率×總資產周轉率
    2001年0.032=0.025×1.34
    2002年0.039=0.017×2.29
    通過分解可以看出2002年的總資產周轉率有所提高,說明資產的利用得到了比較好的控制,顯示出比前一年較好的效果,表明該公司利用其總資產產生銷售收入的效率在增加。總資產周轉率提高的同時銷售凈利率的減少阻礙了資產凈利率的增加,我們接著對銷售凈利率進行分解:
    銷售凈利率=凈利潤÷銷售收入
    2001年0.025=10284.04÷411224.01
    2002年0.017=12653.92÷757613.81
    該公司2002年大幅度提高了銷售收入,但是凈利潤的提高幅度卻很小,分析其原因是成本費用增多,從表一可知:全部成本從2001年403967.43萬元增加到2002年736747.24萬元,與銷售收入的增加幅度大致相當。下面是對全部成本進行的分解:
    全部成本=製造成本+銷售費用+管理費用+財務費用
    2001年403967.43=373534.53+10203.05+18667.77+1562.08
    2002年736747.24=684559.91+21740.962+25718.20+5026.17通過分解可以看出杜邦分析法有效的解釋了指標變動的原因和趨勢,為採取應對措施指明了方向。
    在本例中,導致權益利潤率小的主原因是全部成本過大。也正是因為全部成本的大幅度提高導致了凈利潤提高幅度不大,而銷售收入大幅度增加,就引起了銷售凈利率的減少,顯示出該公司銷售盈利能力的降低。資產凈利率的提高當歸功於總資產周轉率的提高,銷售凈利率的減少卻起到了阻礙的作用。
    由表4可知,福田汽車下降的權益乘數,說明他們的資本結構在2001至2002年發生了變動2002年的權益乘數較2001年有所減小。權益乘數越小,企業負債程度越低,償還債務能力越強,財務風險程度越低。這個指標同時也反映了財務杠桿對利潤水平的影響。財務杠桿具有正反兩方面的作用。在收益較好的年度,它可以使股東獲得的潛在報酬增加,但股東要承擔因負債增加而引起的風險;在收益不好的年度,則可能使股東潛在的報酬下降。該公司的權益乘數一直處於2~5之間,也即負債率在50%~80%之間,屬於激進戰略型企業。管理者應該准確把握公司所處的環境,准確預測利潤,合理控制負債帶來的風險。
    因此,對於福田汽車,當前最為重要的就是要努力減少各項成本,在控製成本上下力氣。同時要保持自己高的總資產周轉率。這樣,可以使銷售利潤率得到提高,進而使資產凈利率有大的提高。
    四、結論
    綜上所述,杜邦分析法以權益凈利率為主線,將企業在某一時期的銷售成果以及資產營運狀況全面聯系在一起,層層分解,逐步深入,構成一個完整的分析體系。它能較好的幫助管理者發現企業財務和經營管理中存在的問題,能夠為改善企業經營管理提供十分有價值的信息,因而得到普遍的認同並在實際工作中得到廣泛的應用。
    但是杜邦分析法畢竟是財務分析方法的一種,作為一種綜合分析方法,並不排斥其他財務分析方法。相反與其他分析方法結合,不僅可以彌補自身的缺陷和不足,而且也彌補了其他方法的缺點,使得分析結果更完整、更科學。比如以杜邦分析為基礎,結合專項分析,進行一些後續分析對有關問題作更深更細致分析了解;也可結合比較分析法和趨勢分析法,將不同時期的杜邦分析結果進行對比趨勢化,從而形成動態分析,找出財務變化的規律,為預測、決策提供依據;或者與一些企業財務風險分析方法結合,進行必要的風險分析,也為管理者提供依據,所以這種結合,實質也是杜邦分析自身發展的需要。分析者在應用時,應注意這一點。

    ❸ 時間序列在股市有哪些應用

    時間序列分析在股票市場中的應用
    摘要
    在現代金融浪潮的推動下,越來越多的人加入到股市,進行投資行為,以期得到豐厚的回報,這極大促進了股票市場的繁榮。而在這種投資行為的背後,越來越多的投資者逐漸意識到股市預測的重要性。
    所謂股票預測是指:根據股票現在行情的發展情況地對未來股市發展方向以及漲跌程度的預測行為。這種預測行為只是基於假定的因素為既定的前提條件為基礎的。但是在股票市場中,行情的變化與國家的宏觀經濟發展、法律法規的制定、公司的運營、股民的信心等等都有關聯,因此所謂的預測難於准確預計。
    時間序列分析是經濟預測領域研究的重要工具之一,它描述歷史數據隨時間變化的規律,並用於預測經濟數據。在股票市場上,時間序列預測法常用於對股票價格趨勢進行預測,為投資者和股票市場管理管理方提供決策依據。

    ❹ 什麼演算法可以改進lstm

    基於模糊聚類演算法改進lstm的預測方法。
    發明的目的在於解決股票市場中的價格預測問題,提供一種基於模糊聚類演算法改進lstm的預測方法,該預測方法引入模糊聚類演算法,對已序列化的數據進行模糊聚類得到隸屬度矩陣,並利用隸屬度矩陣對經過融合的lstm網路輸出進行加權求和,最終得到股票價格預測值,可以有效的模擬股票趨勢中的波動特點及場景,使得預測結果更加准確且符合實際。

    ❺ 請教用人工神經網路進行股票預測在weka

    預測股票可不是有以往股票數據就能的,要考慮因果性,現實事件與股票波動有因果性,也就是時序性。在這情況下有LSTM單元組成循環神經網路可以做到,但訓練集的強度跟體積可是很大的,這需要注意。

    ❻ 股票的預測模型有哪些

    股票的預測模型:
    1、凈現金流量折現法;
    2、投資機會折現法;
    3、股利折現法;
    4、盈餘折現法;
    除此之外,想了解更多的股票類的知識,可以下載財源滾滾APP軟體,系統學習下

    ❼ 應用計量經濟學時間序列分析在股票預測上有多大的作用

    作用沒有想像中的大,你可以用股票的滯後變數來進行回歸分析,滯後2~3期就夠了,不過數據必須具體點,最好細分到每季度、每月的上證指數,還有時間上怎麼也要十年左右吧!

    我以前在論文附錄中做過分析,數據都是自己按季度整理的,挺麻煩的呢,如果需要的話就發給你~

    還有就是,我覺得寫關於股票的預測方面的實際用處並不是很大,畢竟股票的影響因素太多,單單的憑藉以前的走勢而預期太不好了。。我自己也炒股票,就像那些macd、kdj之類的指標根本就起不到太大的作用,如果那個能預期的話,股市豈不就成了提款機了?現在你做的這個就像是那些指標一樣,要知道,股市是活的,人是活的,而指標確實死的!說這么多的意思就是股市不是能簡單預測的,你做的那個用處不大。。

    如果你想做的話,建議換個題目,我當時的寫的是對弗里德曼的貨幣需求理論在中國市場的分析。你可以寫寫貨幣供應量對通貨膨脹的時滯性,分析下在我國市場的滯後期大概是多少~數據在國家統計局和中國人民銀行都可以找到的,樣本空間一定要足夠大,在對滯後變數分析時候主要考慮各自的T檢驗是否通過,一般從通過之後大概就是那個的滯後期!這個比較直接反而有些許用處~
    要是能分析出國家的一般性政策對實體市場的影響就更好了,更有用了~

    呵呵,以上只是自己的建議~有什麼其他的問題就給我留言吧~

    ❽ lstm具有什麼特點

    LSTM(Long Short-Term Memory)是長短期記憶網路,是一種時間遞歸神經網路(RNN),主要是為了解決長序列訓練過程中的梯度消失和梯度爆炸問題。簡單來說,就是相比普通的RNN,LSTM能夠在更長的序列中有更好的表現。 LSTM 已經在科技領域有了多種應用。基於 LSTM 的系統可以學習翻譯語言、控制機器人、圖像分析、文檔摘要、語音識別圖像識別、手寫識別、控制聊天機器人、預測疾病、點擊率和股票、合成音樂等等任務。
    工作原理
    LSTM區別於RNN的地方,主要就在於它在演算法中加入了一個判斷信息有用與否的「處理器」,這個處理器作用的結構被稱為cell。

    一個cell當中被放置了三扇門,分別叫做輸入門、遺忘門和輸出門。一個信息進入LSTM的網路當中,可以根據規則來判斷是否有用。只有符合演算法認證的信息才會留下,不符的信息則通過遺忘門被遺忘。

    說起來無非就是一進二出的工作原理,卻可以在反復運算下解決神經網路中長期存在的大問題。目前已經證明,LSTM是解決長序依賴問題的有效技術,並且這種技術的普適性非常高,導致帶來的可能性變化非常多。各研究者根據LSTM紛紛提出了自己的變數版本,這就讓LSTM可以處理千變萬化的垂直問題。

    ❾ BSM模型怎樣給股票估值

    股票估值分為絕對估值和相對估值。絕對估值絕對估值是通過對上市公司歷史及當前的基本面的分析和對未來反應公司經營狀況的財務數據的預測獲得上市公司股票的內在價值。絕對估值的方法:一是現金流貼現定價模型,二是B-S期權定價模型(主要應用於期權定價、權證定價等)。現金流貼現定價模型目前使用最多的是DDM和DCF,而DCF估值模型中,最廣泛應用的就是FCFE股權自由現金流模型。絕對估值的作用:股票的價格總是圍繞著股票的內在價值上下波動,發現價格被低估的股票,在股票的價格遠遠低於內在價值的時候買入股票,而在股票的價格回歸到內在價值甚至高於內在價值的時候賣出以獲利。相對估值相對估值是使用市盈率、市凈率、市售率、市現率等價格指標與其它多隻股票(對比系)進行對比,如果低於對比系的相應的指標值的平均值,股票價格被低估,股價將很有希望上漲,使得指標回歸對比系的平均值。相對估值包括PE、PB、PEG、EV/EBITDA等估值法。通常的做法是對比,一個是和該公司歷史數據進行對比,二是和國內同行業企業的數據進行對比,確定它的位置,三是和國際上的(特別是香港和美國)同行業重點企業數據進行對比。聯合估值聯合估值是結合絕對估值和相對估值,尋找同時股價和相對指標都被低估的股票,這種股票的價格最有希望上漲。股票估值的意義幫助投資者發現價值被嚴重低估的股票,買入待漲獲利,直接帶來經濟利益;幫助投資者判斷手中的股票是否被高估或低估,以作出賣出或繼續持有的決定,幫助投資者鎖定盈利或堅定持有以獲得更高收益的決心;幫助投資者分析感興趣的股票的風險。估值指數越低的股票,其下跌的風險就越小。估值指數小於30%或操作建議給出「立即買入」或「買入」的股票即使下跌也是暫時的;幫助投資者判斷機構或投資咨詢機構推薦的股票的安全性和獲利性,做到有理有據的接受投資建議;幫助投資者在熱點板塊中尋找最大的獲利機會。通常熱點板塊中的股票的表現大相徑庭,有些投資者雖然踏中的熱點,卻獲利不高。估值幫助投資者在熱點板塊中尋找到最佳的股票、獲得最大的收益; 幫助投資者理解股評信息中對股票價值低估的判斷