二条均线打天下

用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语言实践, 金融

0 0 votes
Article Rating
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

53 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
磊 白

学习了,不错~

Conan Zhang

🙂

海波

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

Conan Zhang

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

BruceDai

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

Conan Zhang

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

BruceDai

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

Conan Zhang

过奖,多多交流。

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

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

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

BruceDai

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

Conan Zhang

加油!多多交流。

Lain

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

Conan Zhang

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

liangxiaoyi

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

Conan Zhang

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

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

liangxiaoyi

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

hou

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

Conan Zhang

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

David

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

dan

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

Conan Zhang

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

yfeng.lv

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

Conan Zhang

基于标准 期货CTP封装的。

David

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

Conan Zhang

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

Xiaobei Joe

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

Conan Zhang

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

Xiaobei Joe

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

Conan Zhang

好的, 🙂

ben lam

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

Conan Zhang

淘宝已经恢复

dalio

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

Conan Zhang

淘宝已经恢复了。

[…] 两条均线打天下 […]

[…] 上图中有3条曲线,黑色线是平安银行向前复权后的每日股价,红色线为20日均线,蓝色线为60日均线。关于均线的介绍,请参考文章 两条均线打天下。图中还有一条红色的水平线虚线,是这10年的股价平均值等于7.14元。这10年间,平安银行股价起起落落,每次上涨都会持续一段时间,那么在我们可以上涨中段追入买进,在大幅下跌之前卖出,就是追涨杀跌法。 […]

zheng zhu

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

Conan Zhang

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

zheng zhu

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

Belen Green

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

Conan Zhang

🙂

tonywyb

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

Conan Zhang

是否已经处理了?

tonywyb

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

Conan Zhang

🙂

Belen Green

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

orange

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

[…] 在市场无趋势性机会时,可以通过配对交易避免股市系统风险,获取Alpha绝对收益。趋势性的交易策略,可以参考文章 两条均线打天下。 […]

[…] R语言金融数据分析,PPT下载,主要内容来自我的一篇博文:二条均线打天下 […]

Filber

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

Conan Zhang

是的,是这样的。

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

[…] Conan Zhang on 二条均线打天下 […]

汪揚

已經買了,卻沒有人回覆

53
0
Would love your thoughts, please comment.x
()
x