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

rnn預測股票價格如果

發布時間: 2022-04-28 05:45:47

⑴ 什麼是波動率指數

原文鏈接:http://tecdat.cn/?p=19129

摘要


在學術界和金融界,分析高頻財務數據的經濟價值現在顯而易見。它是每日風險監控和預測的基礎,也是高頻交易的基礎。為了在財務決策中高效利用高頻數據,高頻時代採用了最先進的技術,用於清洗和匹配交易和報價,以及基於高收益的流動性的計算和預測。

高頻數據的處理


在本節中,我們討論高頻金融數據處理中兩個非常常見的步驟:(i)清理和(ii)數據聚合。

> dim(dataraw);[1] 48484 7> tdata$report;initial number no zero prices select exchange48484 48479 20795sales condition merge same timestamp20135 9105> dim(afterfirstclean)[1] 9105 7

高頻數據的匯總


通常不會在等間隔的時間點記錄價格,而許多實際波動率衡量方法都依賴等實際間隔的收益。有幾種方法可以將這些非同步和/或不規則記錄的序列同步為等距時間數據。
最受歡迎的方法是按照時間匯總,它通過獲取每個網格點之前的最後價格來將價格強制為等距網格。

> # 載入樣本價格數據> data("sample");> # 聚合到5分鍾的采樣頻率:> head(tsagg5min);PRICE2008-01-04 09:35:00 193.9202008-01-04 09:40:00 194.6302008-01-04 09:45:00 193.5202008-01-04 09:50:00 192.8502008-01-04 09:55:00 190.7952008-01-04 10:00:00 190.420> # 聚合到30秒的頻率:> tail(tsagg30sec);PRICE2008-01-04 15:57:30 191.7902008-01-04 15:58:00 191.7402008-01-04 15:58:30 191.7602008-01-04 15:59:00 191.4702008-01-04 15:59:30 191.8252008-01-04 16:00:00 191.670

在上面的示例中,價格被強制設置為5分鍾和30秒的等距時間網格。此外,aggregates函數內置於所有已實現的度量中,可以通過設置參數align.by和align.period來調用該函數。在這種情況下,首先將價格強制等間隔的常規時間網格,然後根據這些常規時間段內執行觀察值的收益率來計算實際度量。這樣做的優點是,用戶可以將原始價格序列輸入到實際度量中,而不必擔心價格序列的非同步性或不規則性。

帶有時間和波動率計算的價格示例:

> #我們假設stock1和stock2包含虛擬股票的價格數據:> #匯總到一分鍾:> Price_1min = cbind(aggregatePrice(stock1),aggregatePrice(stock2));> #刷新時間聚合:refreshTime(list(stock1,stock2));> #計算跳躍魯棒的波動性指標> #基於同步數據rBPCov(Price_1min,makeReturns=TRUE);> #計算跳躍和雜訊魯棒的波動性度量> #基於非同步數據:

實際波動性度量

高頻數據的可用性使研究人員能夠根據日內收益的平方來估計實際波動性(Andersen等,2003)。實際上,單變數波動率估計的主要挑戰是應對(i)價格的上漲和(ii)微觀結構雜訊。因此多變數波動率估計也引起了人們的注意。高頻軟體包實施了許多新近提出的實際波動率方法。

下面的示例代碼說明了日內周期的估計:

> #計算並繪制日內周期> head(out); returns vol dailyvol periodicvol2005-03-04 09:35:00 -0.0010966963 0.004081072 0.001896816 2.1515392005-03-04 09:40:00 -0.0005614217 0.003695715 0.001896816 1.9483792005-03-04 09:45:00 -0.0026443880 0.003417950 0.001896816 1.801941

最受歡迎的見解

1.HAR-RV-J與遞歸神經網路(RNN)混合模型預測和交易大型股票指數的高頻波動率

2.WinBUGS對多元隨機波動率模型:貝葉斯估計與模型比較

3.波動率的實現:ARCH模型與HAR-RV模型

4.R語言ARMA-EGARCH模型、集成預測演算法對SPX實際波動率進行預測

5.使用R語言隨機波動模型SV處理時間序列中的隨機波動率

6.R語言多元COPULA GARCH 模型時間序列預測

7.R語言基於ARMA-GARCH過程的VAR擬合和預測

8.R語言隨機搜索變數選擇SSVS估計貝葉斯向量自回歸(BVAR)模型

9.R語言對S&P500股票指數進行ARIMA + GARCH交易策略

⑵ nlp 中rnn怎麼將單詞轉化為固定維度的向量

  • 所有的QA對問題的邏輯都比較簡單,所以命名為Simple QA。僅僅依賴於KB裡面的一個facts,這樣做的好處是可以簡化模型的推理過程。

  • 數據量大,包含十萬多個QA對,而且都是人工生成,語法相對而言更貼近自然語言,而且問題覆蓋面廣,類型較全。

  • 所有QA對都依賴於KB中的實體和facts。保證了KB的覆蓋性。

  • 接下來我們介紹一下論文使用的模型,仍然沿用Memory Networks提出的I、G、O、R四組件的架構,其工作流程如下

  • 存儲KB,第一步是使用Input組件解析知識庫並將其存入Memory之中。

  • 訓練,第二步是使用Simple QA數據集的所有QA對作為輸入,經過Input、Output、Response三個組件進行預測並使用反向傳播訓練網路中的參數

  • 泛化,最後使用Reverb數據集直接接入模型(不在進行重新訓練),使用Generalization模塊將其與Memory中已經存在的facts關聯,看最終效果如何



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

    ⑷ 只有一層隱藏層的CNN(RNN)算是深度學習嗎

    都可以,這個現在沒有特別明晰的界限和定義,不必過分關心.
    個人覺得用層數來界定深還是淺有點low, 深度學習與傳統機器學習的最大區別是在於它的彈性,它的層數和結構可以非常方便的的延伸和拓展.

    ⑸ 如何使用准備這個問題的Keras RNN的training input

    就一個abcd作為一條樣本即可,a b c d 的每一步都會計算loss的,所以拆開也沒啥用
    另外你這個不是序列標注,因為你是要預測下一個,而不是給整體一個最佳序列

    ⑹ 如何將自己的數據轉化成tensorflow的rnn需要的數據

    1)載入數據:讀取文本或者其他格式數據,本例中用到一個包含4列的文本文件,其中第一列表示年,第二列表示月,第三列和第四列表示數據,摘取部分:

    2014,2,68.93,85.54
    2014,3,65.96,53.19
    2014,4,69.56,67.47
    data = np.loadtxt(input_filename, delimiter=',')
    (2)由於數據是有序的,第一行是起始日期,而數據的最後一行是終止日期。需要提取出數據集的起始日期和終止日期:

    # 提取起始日期和終止日期

    start_date = str(int(data[0,0])) + '-' + str(int(data[0,1]))

    end_date = str(int(data[-1,0] + 1)) + '-' + str(int(data[-1,1] +1))

    (3)提取出數據後,我們可以用pandas模塊自動生成連續月的序列,當然,也可以生成其他方式。

    # 創建以月為間隔的變數

    dates = pd.date_range(start_date, end_date, freq='M')

    (4)將數據綁定到第3步提取的序列中。

    # 將日期轉換成時間序列

    data_timeseries1= convert_data_to_timeseries(input_file, 2)

    data_timeseries2= convert_data_to_timeseries(input_file, column_num)

    (5)繪出數據。

    data_timeseries2.plot()

    plt.title('Data(%s-%s)'%(start_date,end_date))

    plt.show()

    ⑺ 實際波動率的概念

    要明確實際波動率,首先要從波動率的概念入手。波動率(Volatility):是指關於資產未來價格不確定性的度量。它通常用資產回報率的標准差來衡量。也可以指某一證券的一年最高價減去最低價的值再除以最低價所得到的比率。業內將波動率定義為價格比率自然對數的標准差。波動率的種類有:實際波動率,隱含波動率,歷史波動率等等,實際波動率便是波動率的一種。

    ⑻ lstm具有什麼特點

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

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

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

    ⑼ 數據挖掘工程師一般都做什麼

    數據挖掘工程師是做什麼的?

    數據挖掘,從字面上理解,就是在數據中找到有用的東西,哪些東西有用就要看具體的業務目標了。最簡單的就是統計應用了,比如電商數據,如淘寶統計過哪個省購買泳衣最多、哪個省的女生胸罩最大等,進一步,可以基於用戶的瀏覽、點擊、收藏、購買等行為推斷用戶的年齡、性別、購買能力、愛好等能表示一個人的畫像,就相當於用這些挖掘出來的屬性來刻畫一個人,這些還是最簡單的東西,更深層次的比如預測(股票預測),但是比較難。

    數據挖掘往往與機器學習離不開。比如分類、聚類、關聯規則挖掘、個性化推薦、預測、神經網路、深度學習等。

    數據挖掘 = 業務知識 + 自然語言處理技術( NLP ) + 計算機視覺技術( CV ) + 機器學習 / 深度學習( ML/DL )

    ( 1 )其中業務知識具體指的是個性化推薦,計算廣告,搜索,互聯網金融等; NLP , CV 分別是處理文本,圖像視頻數據的領域技術,可以理解為是將非結構化數據提取轉換成結構化數據;最後的ml/dl 技術則是屬於模型學習理論;

    ( 2 )在選擇崗位時,各個公司都沒有一套標準的稱呼,但是所做的事情無非 2 個大方向,一種是主要鑽研某個領域的技術,比如自然語言處理工程師,計算機視覺工程師,機器學習工程師等;一種是將各種領域技術應用到業務場景中去解決業務需求,比如數據挖掘工程師,推薦系統工程師等;具體的稱呼不重要,重要的是平時的工作內容;

    PS :在互聯網行業,數據挖掘相關技術應用比較成功的主要是推薦以及計算廣告領域,而其中涉及到的數據主要也是文本,所以 NLP 技術相對來講比較重要,至於 CV 技術主要還是在人工智慧領域(無人車,人臉識別等)應用較多,本人了解有限,相關的描述會較少;

    數據挖掘崗位需要具備的3 種基本能力

    1. 工程能力

    ( 1 )編程基礎:需要掌握一大一小兩門語言,大的指 C++ 或者 Java ,小的指 Python 或者 shell 腳本;需要掌握基本的資料庫語言;

    建議: MySQL + python + C++ ;語言只是一種工具,看看語法就好;

    推薦書籍:《 C++ primer plus 》

    ( 2 )開發平台: Linux ;

    建議:掌握常見的命令,掌握 Linux 下的源碼編譯原理;

    推薦書籍:《 Linux 私房菜》

    ( 3 )數據結構與演算法分析基礎:掌握常見的數據結構以及操作(線性表,隊,列,字元串,樹,圖等),掌握常見的計算機演算法(排序演算法,查找演算法,動態規劃,遞歸等);

    建議:多敲代碼,多上 OJ 平台刷題;

    推薦書籍:《大話數據結構》《劍指 offer 》

    ( 4 )海量數據處理平台: Hadoop ( mr 計算模型, java 開發)或者 Spark ( rdd 計算模型, scala開發),重點推薦後者;

    建議:主要是會使用,有精力的話可以看看源碼了解集群調度機制之類的;

    推薦書籍:《大數據 spark 企業級實戰》

    2. 演算法能力

    ( 1 )數學基礎:概率論,數理統計,線性代數,隨機過程,最優化理論

    建議:這些是必須要了解的,即使沒法做到基礎扎實,起碼也要掌握每門學科的理論體系,涉及到相應知識點時通過查閱資料可以做到無障礙理解;

    ( 2 )機器學習 / 深度學習:掌握 常見的機器學習模型(線性回歸,邏輯回歸, SVM ,感知機;決策樹,隨機森林, GBDT , XGBoost ;貝葉斯, KNN , K-means , EM 等);掌握常見的機器學習理論(過擬合問題,交叉驗證問題,模型選擇問題,模型融合問題等);掌握常見的深度學習模型( CNN ,RNN 等);

    建議:這里的掌握指的是能夠熟悉推導公式並能知道模型的適用場景;

    推薦書籍:《統計學習方法》《機器學習》《機器學習實戰》《 UFLDL 》

    ( 3 )自然語言處理:掌握常見的方法( tf-idf , word2vec , LDA );

    3. 業務經驗

    ( 1 )了解推薦以及計算廣告相關知識;

    推薦書籍:《推薦系統實踐》《計算廣告》

    ( 2 )通過參加數據挖掘競賽熟悉相關業務場景,常見的比賽有 Kaggle ,阿里天池, datacastle 等。

    想要學習數據挖掘的話可以看一下這篇文章《AI時代就業指南:數據挖掘入門與求職》