-两条均线的交易策略

#加载包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)