二条均线打天下

用IT技术玩金融系列文章,将介绍如何使用IT技术,处理金融大数据。在互联网混迹多年,已经熟练掌握一些IT技术。单纯地在互联网做开发,总觉得使劲的方式不对。要想靠技术养活自己,就要把技术变现。通过“跨界”可以寻找新的机会,创造技术的壁垒。

金融是离钱最近的市场,也是变现的好渠道!今天就开始踏上“用IT技术玩金融”之旅!

关于作者:

  • 张丹(Conan), 程序员Java,R,PHP,Javascript
  • weibo:@Conan_Z
  • blog: http://blog.fens.me
  • email: bsspirit@gmail.com

转载请注明出处:
http://blog.fens.me/finance-stock-ma/

stock-ma

前言

移动平均线(MA)是股市中最常用的一种技术分析方法,用来在大行情的波动段找到有效的交易信号。移动平均线不仅简单,而且有效,对股市操作具有神奇的指导作用。

据金融从业人员称,均线模型能有效地打败了大部分的主观策略,是炒股、炒期货的必备基本工具。那么本文将深入研究一下均线模型,如何在股市中发挥作用。

目录

  1. 移动平均线
  2. 均线模型
  3. 用R语言实现均线模型

1. 移动平均线

移动平均线(MA,Moving average)是以道·琼斯的”平均成本概念”为理论基础,采用统计学中”移动平均”的原理,将一段时期内的股票价格平均值连成曲线,用来显示股价的历史波动情况,进而反映股价指数未来发展趋势的技术分析方法。它是道氏理论的形象化表述。

移动平均线的计算方法就是求连续若干天的收盘价的算术平均。天数就是MA的参数。在技术分析领域中,移动平均线是必不可少的指标工具。移动平均线利用统计学上的“移动平均”原理,将每天的市场价格进行移动平均计算,求出一个趋势值,用来作为价格走势的研判工具。

计算公式: MA = (C1+C2+C3+C4+C5+….+Cn)/n ,C为收盘价,n为移动平均周期数例如,5日移动平均价格计算方法为:


MA5 = (前四天收盘价+前三天收盘价+前天收盘价+昨天收盘价+今天收盘价)/5 

移动平均线依时间长短可分为三种,即短期移动平均线,中期移动平均线,长期移动平均线。短期移动平均线一般以5日或10日为计算期间,中期移动平均线大多以30日、60日为计算期间;长期移动平均线大多以100天和200天为计算期间。

移动平均根据对数据的处理方法,又可分为3种:

  • 简单移动平均线(SMA):又称“算术移动平均线”,是指对特定期间的收盘价进行简单平均化的意思。一般所提及之移动平均线即指简单移动平均线(SMA)。
  • 加权移动平均线(WMA):加权移动平均线(Weighted Moving Average 简称WMA),是一种按时间进行加权运算的移动平均线。时间越近越近的价格,权重越大。计算方式是基于加权移动平均线日数,将每一个之前日 数比重提升。每一价格会乘以一个比重,最新的价格会有最大的比重,其之前的每一日的比重将会递减。加权移动平均线是移动平均线(MA)的改良。
  • 指数平滑移动平均线(EMA):指数平滑移动平均线EXPMA(Exponential Moving Average),为解决一旦价格已脱离均线差值扩大,而平均线未能立即反应,EXPMA可以减少类似缺点。

2. 均线模型

在日K线图中除了标准的价格K线以外,另外还有4条线,分别是白线、黄线、紫线、绿线依次分别表示:5日、10日、20日和60日移动平均线,通过这4条线与价格K线的交叉,就可以形成不同的均线模型。

以乐视网(300104)股票日K图为例,截取2012年8月到2014年7月的股价数据。
300104

最低价是13.91,出现在2012年12月;最高价55.50,出现在2014年1月。这段时期,可以看到乐视网的股价一路震荡向上,绿色线为60日均线平滑了股价,趋势性比较明显。

利用均线平滑的特点,可以发现均线与价格K线会有叉,各均线之间也有交叉,我们可以通过这些交叉点判断交易信号。

  • 黄金交叉,当10日均线由下往上穿越30日均线,10日均线在上,30日均线在下,其交叉点就是黄金交叉,黄金交叉是多头的表现,出现黄金交叉后,后市会有一定的涨幅空间,这是进场的最佳时机。
  • 死亡交叉,当30日均线与10日平均线交叉时,30日均线由下住上穿越10日平均线,形成30日平均线在上,10日均线在下时,其交点称之为”死亡交叉”,”死亡交叉”预示空头市场来临,股市将下跌此时是出场的最佳时机。

如果很好地运用移动平均线理论,再掌握行情的真正趋势,就能实现获取可观利润。

但移动平均线理论也有局限性:

  • 移动平均线是股价定型后产生的图形,反映较慢,只适用于日间交易。
  • 移动平均线不能反映股价在当日的变化及成交量的大小,不适用于日内交易。
  • 移动平均线是趋势性模型,如果股价未形成趋势,只是频繁波动,模型不适用。

3. 用R语言实现均线模型

接下来,我们利用R语言对股票数据的进行操作,来实现一个均线模型的实例。

3.1 从互联网下载数据

R语言本身提供了丰富的金融函数工具包,quantmod包就是最常用的一个,另外还要配合时间序列包zoo和xts,指标计算包TTR,可视包ggplot2等一起使用。关于zoo包和xts包的详细使用可以参考文章R语言时间序列基础库zoo可扩展的时间序列xts

我们首先利用quantmod包,从互联网下载股票数据,并以CSV格式保存到本地。


#加载工具包
> library(plyr)
> library(quantmod)
> library(TTR)
> library(ggplot2)
> library(scales)

#下载数据
> download<-function(stock,from="2010-01-01"){
+ df<-getSymbols(stock,from=from,env=environment(),auto.assign=FALSE)  #下载数据
+ names(df)<-c("Open","High","Low","Close","Volume","Adjusted")
+ write.zoo(df,file=paste(stock,".csv",sep=""),sep=",",quote=FALSE) #保存到本地
+}

#本地读数据
> read<-function(stock){  
+  as.xts(read.zoo(file=paste(stock,".csv",sep=""),header = TRUE,sep=",", format="%Y-%m-%d"))
+}

> stock<-"IBM"
> download(stock,from='2010-01-01')
> IBM<-read(stock)

# 查看数据类型
> class(IBM)
[1] "xts" "zoo"

# 查看前6条数据
> head(IBM)
             Open   High    Low  Close  Volume Adjusted
2010-01-04 131.18 132.97 130.85 132.45 6155300   121.91
2010-01-05 131.68 131.85 130.10 130.85 6841400   120.44
2010-01-06 130.68 131.49 129.81 130.00 5605300   119.66
2010-01-07 129.87 130.25 128.91 129.55 5840600   119.24
2010-01-08 129.07 130.92 129.05 130.85 4197200   120.44
2010-01-11 131.06 131.06 128.67 129.48 5730400   119.18

利用quantmod包的getSymbols()函数,默认会通过Yahoo的金融开放API下载数据,我们选择IBM的股票数据,从2010-01-01到今天2014-07-09的4年多的日间交易数据。数据类型为xts格式的时间序列,数据包括7个列,以日期做索引列,其他6列分别为 开盘价(Open), 最高价(High), 最低价(Low), 收盘价(Close), 交易量(Volume), 调整价(Adjusted)。

3.2 实现简单的蜡烛图

直接使用quantmod包的chartSeries()函数,我们可以画出可视化效果还不错的蜡烛图。

简单的蜡烛图


> chartSeries(IBM)

ibm_1

带指标的蜡烛图


> chartSeries(IBM,TA = "addVo(); addSMA(); addEnvelope();addMACD(); addROC()")

ibm_2

非常简单的2个函数,就可以实现股票数据的可视化。当然,这个功能是封装好的通用的函数,如果我们要自定策略模型,就需要自己写代码来实现了,比如 自定义的支持量化机(SVM)分类器模型,不过我们今天不讲太复杂的模型,而是实现均线模型。

3.3 自定义均线图

通过自定义的方式,我们就可以脱离quantmod包了。

我们需要自定义均线指标:

  • 日期时间序列为索引
  • 收盘价做为价格指标
  • 不考虑成交量及其他维度字段
  • 取2010-01-01至2012-01-01,形成趋势的数据
  • 画出价格曲线,5日均线,20日均线,60日是均线

R语言程序实现


#移动平均
> 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<-IBM['2010/2012']$Close
> title<-"Stock_IBM" #图片标题
> sDate<-as.Date("2010-1-1") #开始日期
> eDate<-as.Date("2012-1-1") #结束日期

> ldata<-ma(cdata,c(5,20,60))  #选择滑动平均指标
> drawLine(ldata,title,sDate,eDate) #画图

maline

通过自己封装的移动平均函数和可视化函数,就实现了与交易软件中类似的日K线图和多条均线结合的可视化输出。

3.4 一条均线的交易策略

基于上面的定义的均线函数,我们就可以设计自己的交易策略模型了。

模型设计思路:

  • 1. 以股价和20日均线的交叉,进行交易信号的判断。
  • 2. 当股价上穿20日均线则买入(红色),下穿20日均线卖出(蓝色)。

画出股价和20日均线图


> ldata<-ma(cdata,c(20))  #选择滑动平均指标
> drawLine(ldata,title,sDate,eDate) #画图

line1_1

以散点覆盖20日均线,红色点为买入持有,蓝色点为卖出空仓。


# 均线图+散点
> drawPoint<-function(ldata,pdata,titie,sDate,eDate){
+   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+geom_point(aes(x=Index,y=Value,colour=Series),data=fortify(pdata,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)
+   g
+ }

# 散点数据
> genPoint<-function(pdata,ldata){} #代码省略
> pdata<-genPoint(pdata,ldata)
> head(pdata)
       Index Series    Value
1 2010-01-04   down 128.7955
2 2010-01-05   down 128.7955
3 2010-01-06   down 128.7955
4 2010-01-07   down 128.7955
5 2010-01-08   down 128.7955
6 2010-01-11   down 128.7955

> drawPoint(ldata,pdata,title,sDate,eDate) #画图

line1_2

用股价和20日均线价格做比较,把股价大于均线的部分用蓝色表示,股价小于均线的部分用红色表示。我们看到图中,蓝色点和红色点在20日均线上交替出现,我们可以在每次红色出现的第一个点买入股票,然后在蓝色的第一个点卖出股票,直观看上去的感觉还是不错的。

我们要找出这些交易信号点,做量化的统计,看看到底能不能赚钱。


#交易信号
> Signal<-function(cdata,pdata){} #代码省略
> tdata<-Signal(cdata,pdata)
> tdata<-tdata[which(as.Date(row.names(tdata)) head(tdata)
            Value op
2010-01-04 132.45  B
2010-01-22 125.50  S
2010-02-17 126.33  B
2010-03-09 125.55  S
2010-03-11 127.60  B
2010-04-08 127.61  S

# 交易记录
> nrow(tdata)
[1] 72

一共有72条交易记录,买卖各占一半。

接下来,我们要利用交易信号数据,进行模拟交易。我们设定交易参数,以$10W为本金,满仓买入或卖出,手续为0,传入交易信号。


#模拟交易
#参数:交易信号,本金,持仓比例,手续费比例
> trade<-function(tdata,capital=100000,position=1,fee=0){} #代码省略
> result1<-trade(tdata,100000)

# 查看每笔交易
> head(result1$ticks)
            Value op     cash amount     asset     diff
2010-01-04 132.45  B     0.25    755 100000.00     0.00
2010-01-22 125.50  S 94752.75      0  94752.75 -5247.25
2010-02-17 126.33  B     5.25    750  94752.75     0.00
2010-03-09 125.55  S 94167.75      0  94167.75  -585.00
2010-03-11 127.60  B   126.55    737  94167.75     0.00
2010-04-08 127.61  S 94175.12      0  94175.12     7.37

# 盈利的交易
> head(result1$rise)
            Value op     cash amount    asset     diff
2010-03-11 127.60  B   126.55    737 94167.75     0.00
2010-04-08 127.61  S 94175.12      0 94175.12     7.37
2010-07-22 127.47  B   108.79    633 80797.30     0.00
2010-08-12 128.30  S 81322.69      0 81322.69   525.39
2010-09-09 126.36  B   120.40    632 79979.92     0.00
2010-11-16 142.24  S 90016.08      0 90016.08 10036.16

# 亏损的交易
> head(result1$fall)
            Value op     cash amount     asset     diff
2010-01-04 132.45  B     0.25    755 100000.00     0.00
2010-01-22 125.50  S 94752.75      0  94752.75 -5247.25
2010-02-17 126.33  B     5.25    750  94752.75     0.00
2010-03-09 125.55  S 94167.75      0  94167.75  -585.00
2010-04-09 128.76  B    51.56    731  94175.12     0.00
2010-04-12 128.36  S 93882.72      0  93882.72  -292.40

通过模拟交易,我们就能精确地算出每笔交易的盈利情况了。你相信么,有56笔交易其实是亏损的,16笔交易是有盈利的。

查看最后的资金情况。


> tail(result1$ticks,1)
            Value op     cash amount    asset     diff
2011-12-21 181.47  S 96363.76      0 96363.76 -3063.87

最后,资金剩余96363.76元,也就是我们亏了3636.24元。

为什么最后会亏损呢?中间的大波段应该赚到了足够多的钱。通过资金曲线我们可以找到亏损的原因。

画出资金曲线


# 股价+现金流量
> drawCash<-function(ldata,adata){
+   g<-ggplot(aes(x=Index, y=Value),data=fortify(ldata[,1],melt=TRUE))
+   g<-g+geom_line()
+   g<-g+geom_line(aes(x=as.Date(Index), y=Value,colour=Series),data=fortify(adata,melt=TRUE))
+   g<-g+facet_grid(Series ~ .,scales = "free_y")
+   g<-g+scale_y_continuous(labels = dollar)
+   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)
+   g
+ }

# 现金流量
> adata<-as.xts(result1$ticks[which(result1$ticks$op=='S'),]['cash'])
> drawCash(ldata,adata)

line1_3

我们把股价和现金流量并排放置,从2010-09开始均线策略开始大幅赚钱,到2011-10到达最高点,并且超过了本金,然后开始下滑,直截到2012-01亏损3859.86元。这是由于我们把赚到利润继续投资,增大了头寸,以至于2011年底的震荡市让模型失效,从而赔了更多的钱。

这样就完成一条20日均线的交易策略模型,并用IBM的股票做了测试。

3.5 二条均线的交易策略

一条均线模型,在大的趋势下是可以稳定赚钱的,但由于一条均线对于波动非常敏感性,如果小波动过于频繁,不仅会增加交易次数,而且会让模型失效。然后,就有二条均线的策略模型,可以减低对波动的敏感性。

二条均线策略模型,与一条均线模型思路类似,以5日均线价格替换股价,是通过5日均线和20日均线交叉来进行信号交易的。

我们首先画出股价,5日均线和20日均线图。


> ldata<-ma(cdata,c(5,20))  #选择滑动平均指标
> drawLine(ldata,title,sDate,eDate) #画图

line2_1

以散点覆盖20日均线,红色点为买入持有,紫色点为卖出空仓。


# 散点数据
> pdata<-genPoint(pdata,ldata)
> head(pdata)
       Index Series    Value
1 2010-01-04   down 128.7955
2 2010-01-05   down 128.7955
3 2010-01-06   down 128.7955
4 2010-01-07   down 128.7955
5 2010-01-08   down 128.7955
6 2010-01-11   down 128.7955
> drawPoint(ldata,pdata,title,sDate,eDate) #画图

line2_2

用5日均线和20日均线价格做比较,把5日大于均线的部分用紫色表示,股价小于均线的部分用红色表示。我们看到图中,紫色点和红色点在20日均线上交替出现,同样地,我们可以在每次红色出现的第一个点买入股票,然后在紫色的第一个点卖出股票,直观看上去的与一条均线模型类似,都是赚钱的。

我们要找出这些交易信号点,做量化的统计,看看到底能不能赚钱。


> tdata<-Signal(cdata,pdata)
> tdata<-tdata[which(as.Date(row.names(tdata)) head(tdata)
            Value op
2010-01-04 132.45  B
2010-01-26 125.75  S
2010-02-18 127.81  B
2010-03-10 125.62  S
2010-03-16 128.67  B
2010-04-12 128.36  S

# 交易记录
> nrow(tdata)
[1] 36

一共有36条交易记录,买卖各占一半,比一条均线模型少了36笔交易。

利用交易信号数据,进行模拟交易。我们设定交易参数,以$10W为本金,满仓买入或卖出,手续为0,传入交易信号。


#模拟交易
> result2<-trade(tdata,100000)

# 查看每笔交易
> head(result2$ticks)
            Value op     cash amount     asset     diff
2010-01-04 132.45  B     0.25    755 100000.00     0.00
2010-01-26 125.75  S 94941.50      0  94941.50 -5058.50
2010-02-18 127.81  B   106.48    742  94941.50     0.00
2010-03-10 125.62  S 93316.52      0  93316.52 -1624.98
2010-03-16 128.67  B    30.77    725  93316.52     0.00
2010-04-12 128.36  S 93091.77      0  93091.77  -224.75

# 盈利的交易
> head(result2$rise)
            Value op      cash amount     asset     diff
2010-09-10 127.99  B     75.34    649  83140.85     0.00
2010-11-18 144.36  S  93764.98      0  93764.98 10624.13
2010-12-07 144.02  B      2.66    638  91887.42     0.00
2011-02-23 160.18  S 102197.50      0 102197.50 10310.08
2011-03-28 161.37  B    124.70    582  94042.04     0.00
2011-05-20 170.16  S  99157.82      0  99157.82  5115.78

# 亏损的交易
> head(result2$fall)
            Value op     cash amount     asset     diff
2010-01-04 132.45  B     0.25    755 100000.00     0.00
2010-01-26 125.75  S 94941.50      0  94941.50 -5058.50
2010-02-18 127.81  B   106.48    742  94941.50     0.00
2010-03-10 125.62  S 93316.52      0  93316.52 -1624.98
2010-03-16 128.67  B    30.77    725  93316.52     0.00
2010-04-12 128.36  S 93091.77      0  93091.77  -224.75

通过模拟交易,我们精确地算出每笔交易的盈利情况了,有26笔交易是亏损的,16笔交易是有盈利的。

查看最后的资金情况。


> tail(result2$ticks,1)
            Value op    cash amount   asset     diff
2011-12-19 182.89  S 96828.9      0 96828.9 -3581.33

最后,资金剩余96828.9元,亏了3171.1元。

查看资金曲线。


> adata<-as.xts(result2$ticks[which(result2$ticks$op=='S'),]['cash'])
> drawCash(ldata,adata)

line2_3

我们可以发现,虽然最后资金也是赔了3171.1,比一条均线策略模型赔的小一点,但二条均线策略模型有3次高于本金的情况,而且最差的情况也比一条均线最差的情况要好。

3.6 对比两个模型的盈利情况

我们再进一步对比两个模型的盈利情况,找出两个模型中所有赚钱的交易。


# 盈利的交易
> rise<-merge(as.xts(result1$rise[1]),as.xts(result2$rise[1]))
> names(rise)<-c("plan1","plan2")

# 查看数据情况
> rise
            plan1  plan2
2010-03-11 127.60     NA
2010-04-08 127.61     NA
2010-07-22 127.47     NA
2010-08-12 128.30     NA
2010-09-09 126.36     NA
2010-09-10     NA 127.99
2010-11-16 142.24     NA
2010-11-18     NA 144.36
2010-12-07     NA 144.02
2010-12-08 144.98     NA
2011-02-22 161.95     NA
2011-02-23     NA 160.18
2011-03-25 162.18     NA
2011-03-28     NA 161.37
2011-05-16 168.86     NA
2011-05-20     NA 170.16
2011-06-21 166.22     NA
2011-06-23     NA 166.12
2011-08-02 178.05     NA
2011-08-04     NA 171.48
2011-09-14 167.24     NA
2011-09-16     NA 172.99
2011-09-22 168.62     NA
2011-09-23 169.34     NA
2011-10-18 178.90     NA
2011-10-21     NA 181.63

plan1是一条均线模型,plan2是二条均线模型。plan1比plan2多了6次交易,显然多的这几次交易是由于对波动敏感性引起的,反而减少了趋势行情收益。

最后,我们画一下盈利部分的交易区间


> # 均线图+交易区间
> drawRange<-function(ldata,plan,titie="Stock_2014",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+geom_rect(aes(NULL, NULL,xmin=start,xmax=end,fill=plan),ymin = yrng[1], ymax = yrng[2],data=plan)
+   g<-g+scale_fill_manual(values =alpha(c("blue", "red"), 0.2))
+   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
+ }

#盈利区间
> plan<-comPlan(ldata,result1,result2){} # 代码省略
> drawRange(ldata,plan,title,sDate,eDate) #画图

plan1的盈利区间。
line3_1

plan1和plan2同时存在的盈利区间。
line3_2

从盈利区间我们可以看到,印证一条均线对波动敏感性的问题,二条均线模型是对一条均线模型的优化,这样我们就一个完整均线模型的实例研发。

3.7 模型优化

如果从交易的角度讲,上面的模型还不能算完成,因为还有很多的赔钱交易,要进行更多地优化,减少最大回撤,在更确定的时机做多,反向做空等。模型优化的问题,会在后面的文章中再进行详细的介绍。

看起来均线模型是如此的简单,但实盘交易时真能在趋势行情中跑赢双均线(优化)模型,也真不是一件容易的事情。二条均线打天下,不说东方不败,也是独孤求败。

######################################################
看文字不过瘾,作者视频讲解,请访问网站:http://onbook.me/video
######################################################

转载请注明出处:
http://blog.fens.me/finance-stock-ma/

打赏作者

This entry was posted in R语言实践, 金融

  • 磊 白

    学习了,不错~

  • 海波

    楼主能否把省略的代码也给贴出来?

    • 不好意思,代码不公开,仅随本文视频一起发送。

  • BruceDai

    That’s awesome, but can you trade the stocks directly using R, not just simulation?

    • 正在写交易包CTPR,争取春节后开放,普通用户就可以方便地打通交易了。

      • BruceDai

        大牛啊,打算最近学学你的视频。我是硕士在芝加哥学的金融,学过一年R,MATLAB,VBA等,也有点儿C++基础,今年毕业的。在国内是用的金字塔,交易开拓者,文华等中低端自动化交易软件,也刚学。但是觉得这些软件的编程功能不行,在校的时候又不知道怎样用R来直接自动化交易,只有yahoo,FRED的数据下载来模拟一些简单的momentum策略,CAPM,Fama-French,Volatility Modeling之类的东西,没有直接交易的经验。所以想找到能直接用强大的R来做交易的方式,觉得你写的东西值得我学习,谢谢。我还不太懂,这个CTPR的话,能直接获取国内的期货数据吗?包括1分钟,甚至再高频一些的,tick的数据吗?

        • 过奖,多多交流。

          1. 我目前的自动交易程序是通过Java做的,CTPR就是把我们的JAVA交易程序再封装一层,高频可以支持tick数据,实时基本无延迟。

          2. Yahoo,Sina的数据,只是用来玩的,真正实盘交易差得远呢。

          3. 你已经毕业回国了吗?目前在哪个公司上班?我公司最近在招IT金融的精英人员,如果你在北京可以过来坐坐聊聊。

          • BruceDai

            谢谢,我毕业回国了,在上海工作,学着做期货的量化。

          • 加油!多多交流。

          • Lain

            请问如果之前的经历一直是互联网/游戏行业的数据分析师,主要工具也是R,金融方面知识是业余爱好有一些了解,未来可以往IT金融这方面发展吗?

          • 当然可以,只要你想学,能坚持就行。

          • liangxiaoyi

            Conan你好,你可以说是我迈出量化的引路人。跟你学习获益良多,目前已能基于R上的quantmod自己写些很简单的回测,主要数据来源是Yahoo。我想请问为什么说yahoo的数据只能是用来玩,是否代表无法真实用来做选股和回测?如果想做更可靠的系统,应该用什么数据?非常感谢Conan!

          • yahoo数据更新比较慢,不及时,有错误,这些是基本的问题。

            另外,行情没有复权,少财务数据,指标很少,无高频数据,所以只能是玩玩了。

          • liangxiaoyi

            Conan,那你推荐理想的数据源是什么?谢谢!

  • hou

    金融类需不要做交叉验证啊。

    • 金融策略一般都有自己的验证指标,比如收益率,最大回撤等。
      交叉验证不是必须的,从统计的角度是需要做的。

  • David

    博主的精彩展示令我大开眼界!
    我原先在sas上做交易策略的验证,最近在引入仿生算法时碰到麻烦,正考虑尝试R。对R的功能毫无所知,请多指教。信箱是我QQ号,方便的话加好友?

    • 你可以加Q群383275651,一起做跨学科的讨论。

  • dan

    请问CTPR这个程序可以在CRAN下载到吗?

    • 还没有开发完,最近在忙别的事情。

      • yfeng.lv

        CTPR用的是哪个券商或者第三方公司的交易接口?

  • David

    这个软件基本可以用来作为做空的参照,关键就是MA本来是趋势,加权MA效果可能好点,但买卖点也只能在半山腰

    • R完全是开放性的软件,写什么策略都行,本文只是一个入门的例子。

  • Xiaobei Joe

    我买了视频,代码一直没到,索性申请退款了

    • 非常抱歉,我也没有想到这种情况。可能由于管理员,最近休年假,时间没有安排好。我会进快联系,帮您退款的。

      • Xiaobei Joe

        谢谢张丹老师.钱退到了,我可能有些急,以为遇到骗子. 我又重新买了,希望代码尽快发来.

  • ben lam

    现在淘宝无法购买视频了,我想学习更详细的,希望丹哥可以继续发视频,感谢!

  • dalio

    张丹兄,淘宝无法购买视频了,请问还有什么别的渠道吗?谢谢。

  • Pingback: 均值回归,逆市中的投资机会 | 粉丝日志()

  • Pingback: R语言构建追涨杀跌量化交易模型 | 粉丝日志()

  • zheng zhu

    我购买了视频,问淘宝客服要代码,都没有回复。。。请问我我提供交易记录可以给我那部分代码吗?

    • 请稍等,我已经通知管理员处理了。会提供代码和ppt。

      • zheng zhu

        收到代码啦,非常棒!但是还有一个问题,您的分析里面使用的例子是IBM,如果我想要用国内A股或者中小板的数据来画图请问怎么用code来表示,比如北京君安,stock<-"IBM"里面的IBM应该换成什么啊?非常感谢老师能够解答!

        • Belen Green

          用股票代码,例如:中国石油,601857.SS (上海是ss,深圳是sz)

  • tonywyb

    我也遇到同样的问题,购买了视频但是淘宝客服没有回复。。。大神请也给我代码的ppt,跪谢大神

    • 是否已经处理了?

      • tonywyb

        已经收到啦,谢谢大神,不过我以为是全部的代码,原来还是这个ppt啊,自己研究研究吧

  • Belen Green

    丹哥,今天刚刚买了淘宝视频,也在备注里留下了电邮。代码和课件什么时候可以发过来?另外,你的书,高级篇我在微信读书里购买了,但是找不到工具篇。

  • orange

    想问要怎样在淘宝上搜能买到这个视频

  • Pingback: R语言构建配对交易量化模型 | 粉丝日志()

  • Pingback: 2014全球软件技术峰会WOT:R语言金融数据分析 | 粉丝日志()

  • Filber

    画图用PerformanceAnalytics,账号管理用blotter,交易策略用quantstrat,这几个完全可以实现绝大多数底层的dirty work了,感觉更多的精力可以放到策略优化和模型调整中.

    • 是的,是这样的。

      但你会发现,中国市场和国外市场的规则是不完全一样的,细节处理起来还是很麻烦的事情。

  • Pingback: 2016天善智能交流会第22场: R语言为量化而生 | 粉丝日志()

  • 汪揚

    已經買了,卻沒有人回覆