當前位置:首頁 » 股市行情 » lstm股票價格的預測
擴展閱讀
李永利 2025-06-22 19:39:43
晨曦股份股票代碼 2025-06-22 19:26:40

lstm股票價格的預測

發布時間: 2022-05-24 14:36:10

Ⅰ 如何在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網路的結構搭建,至於如何把數據處理規范化成網路所需的結構以及把模型預測結果與實際值比較統計的可視化,就需要根據實際情況做調整了。

    Ⅱ 如何從股票數據中預測股票漲跌

    在股市中成交量和股價是技術分析的最基本要素,其中量是市場運動的原因,價是市場運動的結果,量價之間有一個基本的對應,稱為量價關系。利用這個關系,就可以根據成交量和股價的變化來推測股價的未來走勢
    在成交量和股價的關系組合中具有意義的主要有如下幾個:
    1、價格隨成交量的遞增而上漲,為市場行情的正常特性,此種量增價漲的關系,表示股價將繼續上升。
    2、股價下跌,向下跌破股價形態、趨勢線、移動平均線,同時出現大成交量是股價將深幅下跌的信號,強調趨勢的反轉。
    3、股價隨著緩慢遞增的成交量而逐漸上漲,漸漸的走勢突然成為垂直上升的爆發行情,成交量急劇增加,股價爆漲,緊接著,成交量大幅萎縮,股價急劇下跌,表示漲勢已到末期,有轉勢可能。
    4、溫和放量。個股的成交量在前期持續低迷之後,出現連續溫和放量形態,一般可以證明有實力資金在介入。但這並不意味著投資者就可以馬上介入,個股在底部出現溫和放量之後,股價會隨量上升,量縮時股價會適量調整。當持續一段時間後,股價的上漲會逐步加快。
    5、突放巨量。這其中可能存在多種情況,如果股價經歷了較長時間的上漲過程後放巨量,通常表明多空分歧加大,有實力資金開始派發,後市繼續上漲將面臨一定困難。而經歷了深幅下跌後的巨量一般多為空方力量的最後一次集中釋放,後世繼續深跌的可能性很小,反彈或反轉的時機近在眼前。如果股市整體下跌,而個股逆勢放量,在市場一片喊空聲之時放量上攻,造成十分醒目的效果。這類個股往往持續時間不長,隨後反而加速下跌。
    6、成交量也有形態,當成交量構築圓弧底,而股價也形成圓弧底時,往往表明該股後市將出現較大上漲機會。
    這些可以慢慢去領悟,炒股最重要的是掌握好一定的經驗與技巧,這樣才能作出准確的判斷,新手在把握不準的情況下不防用個牛股寶手機炒股去跟著裡面的牛人去操作,這樣要穩妥得多,希望可以幫助到您,祝投資愉快!

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

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

    Ⅳ 通常用什麼數據預測股票的價格收盤價,開盤價,最低價,最高價

    您好,股票的價格一般是不能預測的,但是大體走勢還是可以看得出來,不是單一的看某種價格,您可以查看近幾日的k線圖變化來大致推算預測走勢,k線圖的上影線和下影線有一定的趨勢象徵,還是要多關注財經新聞,國家政策。純手打,望採納,謝謝!

    Ⅳ 有沒有大佬能利用機器學習預測30天後股票漲跌情況啊,我實現不出來,頭都大了

    考慮兩個最簡單的模型,第一個是趨勢跟隨,也就是正在上漲的股票後面大概率還會延續上漲,正在下跌的股票後面大概率還會延續下跌。第二個是均值回歸,就是跌得多了,一定會漲;漲的過頭了,一定會跌。用這兩個作為輸出,實現預測。

    Ⅵ 如何利用Python預測股票價格

    預測股票價格沒有意義。
    單支股票價格,多股組合,大盤這些都可以使用神經網路來學習,02年就做過了,漲跌預測平均能達到54%到57%的准確率,但是只能定性,無法定量,因此,在扣除印花稅之後無利可圖。

    純粹使用股票交易數據來預測並保證總體獲利不是程序能辦到的,人也辦不到。
    目前世界上最先進的炒股機器也只能利用網路時差那微不可計的零點幾秒在歐洲與美國證券間倒來倒去,那套系統研發費用數千萬,硬體(主要是獨立光纜)費用以億計。

    Ⅶ 怎樣預測股票價格趨勢

    在看布雷利的公司理財一書中提到,股票的價格走勢是無法預測的。它說1.從技術面分析,股價的變化模式無法是一致的,相繼周期之間價格沒有相關性,股票看起來是服從隨機遊走的。2.從基本面分析,所有關於公司的信息會瞬間,准確的反應在股價上,遠比人們做出的反應快。
    而且,在一次大學講座的,以及炎黃財經某老師說道股價更大程度是作布朗運動。


    那麼,如果股價真的是無法預測的話,那麼所謂的投資不就是投機?那些日本蠟燭圖,rsi各種指標又如何風靡?如果是的話我的世界就凌亂了!

    Ⅷ 預測股票的方法有幾種

    1、股票價格的預測要綜合考慮多種因素,比如公司的基本面、日K線、周K線、月K線、成交量、各種技術指標等等。股票買了就漲是許多人夢寐以求的事情,其實,盤中判斷股價會不會拉升並不是「可『想』不可求」的事情,是通過長期看盤、操盤實踐可以達到或者部分達到的境界。其中一個重要方法是「結合技術形態研判量能變化」,尤其是研判有無增量資金。
    2、股票預測公式和方法是:
    如果當天量能盤中預測結果明顯大於上一天的量能,增量達到一倍以上,出現增量資金的可能性較大。股票預測首先要預測全天可能出現的成交量。公式是(240分鍾÷前市9:30分到看盤時為止的分鍾數)×已有成交量(成交股數)。使用這個公式時要注意:
    (1)往往時間越是靠前,離開9:30分越近,越是偏大於當天的實際成交量。
    (2)一般採用前15分鍾、30分鍾、45分鍾等三個時段的成交量來預測全天的成交量。過早則失真,因為開盤不久成交偏大偏密集;過晚則失去了預測的意義。

    Ⅸ 如何預測股票的目標價位

    一般是前期的籌碼密集區和重要均線壓力附近,一般漲到這兒上漲就會比較難了,剩下的就是看大盤近期走勢和目標股的股性了。