-两条均线的交易策略
#加载包quantmod
#R本身提供了丰富的金融函数工具包,quantmod包就是最常用的一个,另外还要配合时间序列包zoo和xts,
#指标计算包TTR,可视包ggplot2等一起使用
library(quantmod)
## Loading required package: xts
## Loading required package: zoo
##
## Attaching package: 'zoo'
##
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
##
## Loading required package: TTR
## Version 0.4-0 included new data defaults. See ?getSymbols.
library(TTR)
library(ggplot2)
library(scales)
library(plyr)
#导入金融数据
download = function(stockname, from = "2007-01-01"){
df = getSymbols(stockname, from = from, to = Sys.Date(), env = environment(), auto.assign = F)
#sse1 = getSymbols("ITG", from = "2010-01-01", src = "yahoo")
names(df) = c("Open", "High", "Low","Close", "Volume", "Adjusted")
#生成名为stockname.csv的文件
write.zoo(df,file = paste(stockname, ".csv", sep = ""), sep = ",", quote = F)
}
#读取文件并转为xts格式
read = function(stockname){
as.xts(read.zoo(file = paste(stockname, ".csv", sep = ""),header = T, sep = ",", format = "%Y-%m-%d"))
}
#以国贸数据为例
stockname = "600755.ss"
download(stockname, from = "2010-01-01")
## As of 0.4-0, 'getSymbols' uses env=parent.frame() and
## auto.assign=TRUE by default.
##
## This behavior will be phased out in 0.5-0 when the call will
## default to use auto.assign=FALSE. getOption("getSymbols.env") and
## getOptions("getSymbols.auto.assign") are now checked for alternate defaults
##
## This message is shown once per session and may be disabled by setting
## options("getSymbols.warning4.0"=FALSE). See ?getSymbol for more details
ITG = read(stockname)
#用R语言实现均线模型
#画出蜡烛图
chartSeries(ITG)
#带指标
chartSeries(ITG, TA = "addVo(); addSMA();addEnvelope()")
#自定义均线图
#移动平均
ma = function(cdata, mas = c(5, 20, 60)){
ldata = cdata
for(m in mas){
ldata = merge(ldata, SMA(cdata, m))
}
ldata = na.locf(ldata, fromLast = TRUE)
names(ldata) = c('Value', paste('ma',mas, sep = ''))
return(ldata)
}
# 均线图
drawLine<-function(ldata,titie="Stock_MA",sDate=min(index(ldata)),eDate=max(index(ldata)),out=FALSE){
g<-ggplot(aes(x=Index, y=Value),data=fortify(ldata[,1],melt=TRUE))
g<-g+geom_line()
g<-g+geom_line(aes(colour=Series),data=fortify(ldata[,-1],melt=TRUE))
g<-g+scale_x_date(labels=date_format("%Y-%m"),breaks=date_breaks("2 months"),limits = c(sDate,eDate))
g<-g+xlab("") + ylab("Price")+ggtitle(title)
if(out) ggsave(g,file=paste(titie,".png",sep=""))
else g
}
#运行程序
cdata = ITG['2013/2015']$Close
title = "Stock_ITG"
sDate = as.Date("2013-1-1")
eDate = as.Date("2015-1-1")
ldata = ma(cdata, c(5, 20, 60))
drawLine(ldata, title, sDate, eDate)