R语言期末实验报告预测股票河北钢铁
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SAS与数据分析方法实验课程
实验报告
实验地点:81008
实验时间:2015年1月11日
成绩:______
实验成绩评定表
指导教师评定成绩:
指导教师签名:年月日
预测股票市场收益
问题描述与目标
股票交易市场绝对是数据挖掘技术的实战之地,事实上,数据挖掘技术在处理大量历史数据时要比人工检验更加优越,更加高效,另外,研究者声称,市场通过价格调整而发生快速变化,导致很难捕捉到持续盈利的投资方式,这就是所谓的有效市场假说,它表示在一个市场中如果价格能反映所有可获得信息,这种市场就成为有效市。但这一理论很快就被更加松弛的版本取代,因为有效市场并不一定永远是有效的,所以这也为交易机随时留有余地。
一般股票交易的目的就是通过买单卖单来维持一组证券资产。长期目标就是通过交易行为获得尽可能多的利润。本章我们的主要内容就限定在这个领域,基于既定的有价证券全要求和初始资本,我们会尽量扩大某一交易方式下未来的交易收益。我们的交易策略就是把数据挖掘的结果作为基本的决策信号,用于指导交易行为。这里的数据挖掘首先是基于历史报价构建模型,然后通过模型预测指数未来的变化趋势。我们的模型会被整合成一个交易系统,用来依据预测结果进行交易决策。另外,我们通过交易系统的表现作为评价准则,简单的说就是系统的交易行为所带来的获利和损失,以及其他一些投资者感兴趣的统计值。因此,通过数据挖掘过程所获得知识进行交易,这些交易获得的最终收益才是我们评价系统的标准,而不仅仅是模型预测的准确性
二、从网站上获取数据
获取数据的一种方法是使用Yahoo财经网站提供的免费服务。
数据的结构:交易的日期、开盘价、最高价、最低价、收盘价、交易量、调整的收盘价
为简单起见,用的是股票指数的数据
处理时间序列的包zoo,xts,后者是前者的拓展
表示的处理时间的类;POSIXct/POSIXIt,date
从CSV文件读数据
从网络读取数据
Quantmod包里的getSymbols()
从数据库读数据:包RODBC,RMySQL
获取数据如下:
library(quantmod)
library(tseries)
YT <- as.xts(get.hist.quote("000709.sz",start="2013-01-01",
quote=c("Open", "High", "Low", "Close","Volume","AdjClose"))) head(HB)
Date Open High Low Close Volume AdjClose
2001-01-01 7.95 8.02 7.95 8.00 0 1.57
2001-01-02 8.02 8.10 7.95 8.05 1579200 1.58
2001-01-03 8.06 8.12 8.04 8.10 2260700 1.59
2001-01-04 8.10 8.15 8.01 8.04 2144700 1.57
2001-01-05 8.02 8.06 7.98 8.01 3095100 1.57
2001-01-08 8.01 8.20 7.90 8.19 4344700 1.60
三、定义预测任务
1、预测什么
将学习的交易策略假设我们可以预测未来几天的市场变化趋势,如果这个预测在未来被验证时正确的,那么基于该预测下达的交易指令将是获利的。
事实上,我们需要预测的是在未来K天中价格总的动态变化,并不是预测某个特定时间的一个特定价格。
假设每天的平均价格可以有一下公式来近似:
其中,Ci、Hi、Li分别为第i天的收盘价、最高价和最低价。
设Vi代表未来k天的平均价格相对今天收盘价的百分比变化(通常称为算数收益):Vi=
我们把动态变化绝对值超过目标收益p%的变化进行累加作为一个指标变化T:
指标变化T用来找出在k天内,日平均价格明显高于目标变化的那些日期的变化之和。大的正T值意味着有几天的日平均报价高于今天收盘价的p%,这种情况表明有潜在的机会发出买入指令,因为有良好的预期价格会上涨。另一方面,大的负T值标明价格可能下降,可能进行卖出行动。如果T值接近零,则可能是由于价格平稳波动或价格涨跌互现,正的变化和负的变化互相抵消。
下面的函数实现这个简单的指标:
T.ind <- function(quotes,tgt.margin=0.025,n.days=10) {
v <- apply(HLC(quotes),1,mean)
r <- matrix(NA,ncol=n.days,nrow=NROW(quotes))
for(x in 1:n.days) r[,x] <- Next(Delt(v,k=x),x)
x <- apply(r,1,function(x) sum(x[x > tgt.margin | x < -tgt.margin]))
if (is.xts(quotes)) xts(x,time(quotes)) else x
}
为了更好的理解指标T的性质,绘图的代码如下:
candleChart(last(HB,'3 months'),theme='white',TA=NULL)
avgPrice <- function(p) apply(HLC(p),1,mean)
addAvgPrice <- newTA(FUN=avgPrice,col=1,legend='AvgPrice')
addT.ind <- newTA(FUN=T.ind,col='red',legend='tgtRet')