当前位置:首页 » 股票盈亏 » 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时代就业指南:数据挖掘入门与求职》