均线模型量化股票交易Word下载.docx

上传人:b****6 文档编号:17382861 上传时间:2022-12-01 格式:DOCX 页数:36 大小:271.04KB
下载 相关 举报
均线模型量化股票交易Word下载.docx_第1页
第1页 / 共36页
均线模型量化股票交易Word下载.docx_第2页
第2页 / 共36页
均线模型量化股票交易Word下载.docx_第3页
第3页 / 共36页
均线模型量化股票交易Word下载.docx_第4页
第4页 / 共36页
均线模型量化股票交易Word下载.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

均线模型量化股票交易Word下载.docx

《均线模型量化股票交易Word下载.docx》由会员分享,可在线阅读,更多相关《均线模型量化股票交易Word下载.docx(36页珍藏版)》请在冰豆网上搜索。

均线模型量化股票交易Word下载.docx

首先画出股价和20日均线图

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

用股价和20日均线价格做比较,把股价大于均线的部分用蓝色表示,股价小于均线的部分用红色表示。

我们看到图中,蓝色点和红色点在20日均线上交替出现,我们可以在每次红色出现的第一个点买入股票,然后在蓝色的第一个点卖出股票。

找出交易信号点,并以100000本金做模拟交易。

为简化操作假定在信号点满仓买入或卖出,手续费为0。

运算结果显示,亏损的有11笔而盈利的只有3笔,一年下来一共亏损了17038元。

似乎一条均线模型是失败的,因为它不仅没能盈利反而带来的亏损。

下面就从股价和模拟现金投入来进行简单的分析亏损原因。

该图示,上半红色部分为日收盘价,下半蓝色部分为模拟交易的现金流,对比可见,阿里股价在14年年底开始走低,而根据一条均线模型进行的投资策略比较合理的预测了股市的走势并进行了股票的买入卖出,在一定程度上是减少了亏损。

2.4两条均线的交易策略

一条均线模型,在大的趋势下是可以进行稳定投资的,但由于一条均线对于波动非常敏感性,如果小波动过于频繁,不仅会增加交易次数,而且会让模型失效。

然后,就有二条均线的策略模型,可以减低对波动的敏感性。

二条均线策略模型,与一条均线模型思路类似,以5日均线价格替换股价,是通过5日

均线和20日均线交叉来进行信号交易的。

画出股价、5日均线和20日均线图

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

以同样的条件进行两条均线交易策略的模拟交易。

根据运算结果,虽然依旧亏损了11笔

盈利3笔,但最终带来了总盈利7408元。

2.5两种策略的简单分析

策略一在模拟交易中一共进行了30次交易,最终亏损10000元左右,而策略二只进行了

20次交易,最终带来盈利7000左右。

很明显两条均线的交易策略能更好的追踪股价趋势,带给投资者回报。

看起来均线模型是如此的简单,但实盘交易时真能在趋势行情中跑赢双均线(优化)模型,

也真不是一件容易的事情。

参考文献:

 [1]常宁,徐国祥.金融高频数据分析的现状与问题研究.财经研究,2004,(3):

31-39

    [2]武振,郑丕谔.基于遗传神经网络的股价波动预测.天津大学学报,2004, 6(4):

307—310 

   [3]马超群,张明良.ACD族计量模型的分类与比较分析.金融经济,2005,(8)86-87

     [4]蒋学雷,陈敏,王国明等.股票市场的流动性度量的动态ACD模型.统计研究,2004,(4):

42-44

   [5]王晶,王玉玲,向东进,阮曙芬.自回归条件持续期(ACD)模型研究统计与决策2006(6) 

 [6]Economist.2007a. AheadoftheTape–AlgorithmicTrading.Economist. June23,2007.‐. 2007b.    Dodgy Tickers–Stock Exchanges. Economist.March 10, 2007.

 [7]M.Kearnsand L. Ortiz.The Penn‐Lehmanautomated trading  project.IEEEIntelligentSystems,2003. Toappear. 

   [8] Domowitz,I., andH. Yegerman. 2005.“The Costof  AlgorithmicTrading:

A FirstLook at  ComparativePerformance.” Editedby Brian R.Bruce, Algorithmic Trading:

Precision,Control,Execution.InstitutionalInvestor.

 

附表一:

R语言代码

#加载必须的函数包

library(plyr)library(quantmod) library(TTR) library(ggplot2) library(scales)

library(reshape2)

#设置存储位置

setwd("

E:

/Statistical modeling/"

#下载数据

download<

-function(stock,from="2013-01-01"

){df<

-getSymbols(stock,from=from,env=environment(),auto.assign=FALSE)#下载数据names(df)<

-c("

Open"

,"

High"

"

Low","

Close","

Volume"

Adjusted")write.zoo(df,(stock,".csv",sep="

"

),sep=","

quote=FALSE)#保存到本地 }

#本地读数据

read<

-function(stock){

as.xts(read.zoo((stock,"

.csv"

sep="

),header=TRUE,sep="

,", format="

%Y-%m-%d"

))

stock<

-"

BABA"

download(stock,from='

2013-01-01')BABA<

-read(stock)

#定义移动平均函数

ma<

-function(cdata,mas=c(5,20,60)){ldata<

-cdata for(minmas){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,(titie,"

.png",sep="

"))elseg

#选取数据并运行

cdata<

-BABA['

2014/2015'

]$Close title<

-"Stock_BABA"

#图片标题sDate<

-as.Date("

2014-9-19")#开始日期eDate<-as.Date("2015-10-23"

) #结束日期

ldata<

-ma(cdata,c(5,20,60))#选择滑动平均指标

p0<

-drawLine(ldata,title,sDate,eDate)#画图ggsave(p0,(title,".png"

,sep="

"))ﻩ#存图

#画出股价和20日均线图

ldata1<

-ma(cdata,c(20))#选择滑动平均指标p11<

-drawLine(ldata1,title,sDate,eDate)#画图

###以散点覆盖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=pdata[,3],colour=compare),data=pdata)

g<

-g+scale_x_date(labels=date_format("

%Y-%m"

),breaks=date_breaks("

2months"

),limits= c(sDate,eDate))g<

-g+xlab("

)+ylab("

Price")+ggtitle(title) g

##定义获取散点数据函数

getPoint<-function(ldata){data<-fortify(ldata)n<

-nrow(data)

data<

-data.frame(data,compare=vector(length=n))v1<

-data[,2] v2<-data[,3]dist<

-(v2-v1)

data$compare[which(dist<0)]<

-c("

down")data$compare[which(dist>=0)]<

up"

) pdata<-data

#运行并获取数据

pdata<

-getPoint(ldata1)

p1<

-drawPoint(ldata1,pdata,title,sDate,eDate)

##定义找出交易信号点函数

Signal<

-function(cdata,pdata){n<

-nrow(pdata)pdata1<

-data.frame(pdata,Sigs=vector(length=n),comp=vector(length=n),p=vector(length=n))pdata1$comp[which(pdata1$compare=="

up")]<

-1pdata1$comp[which(pdata1$compare=="

down"

)]<

-0for(iin2:

(n-1)){pdata1$p[i]<

-(pdata1$comp[i]-pdata1$comp[i-1])

}pdata1$p[1]<

-pdata1$p[2]pdata1$Sigs[which(pdata1$p<0)+1]<

-c("

B")pdata1$Sigs[which(pdata1$p>

0)+1]<

S"

)temp<

-pdata1[-c(1,which(pdata1$p==0)+1),]x<-c(4,6,7)Signals<

-temp[,-x]

#运行并获取数据

tdata<

-Signal(cdata,pdata)

###模拟交易

###利用交易信号数据,进行模拟交易。

设定交易参数,以$10W为本金,满仓买入或卖出,手续为0,###传入交易信号。

###参数:

交易信号,本金,持仓比例,手续费比例

#规定数据格式以及小数点位数

options(scipen=4) options(digits=4)

##定义模拟交易函数

trade<

-function(tdata,capital){n=nrow(tdata) cash<

-vector(length=n)amount<

-vector(length=n)asset<

-vector(length=n)diff<

-vector(length=n)

t<-data.frame(tdata,cash,amount,asset,diff)

if(t[1,4]=="S")t[1,5]<

-capitalelset[1,5]<-(capital%%t[1,2]) if(t[1,4]=="S")t[1,6]<

-0elset[1,6]<

-floor(capital/t[1,2]) t[1,7]<-capitalt[1,8]<-0for(i in2:

n){ if(t$Sigs[i]=="B"){ t$amount[i]<-floor(t$cash[i-1]/t[,2][i])+amount[i-1]t$cash[i]<

-t$cash[i-1]%%t[,2][i]t$asset[i]<

-t$amount[i]*t[,2][i]+t$cash[i]t$diff[i]<-t$asset[i]-t$asset[i-1]

} else{t$amount[i]<

-0t$cash[i]<-t$amount[i-1]*t[,2][i]+t$cash[i-1] t$asset[i]<

-t$cash[i]t$diff[i]<

-t$asset[i]-t$asset[i-1]

t

#定义数据,运行

capital=100000result1<-trade(tdata,capital)rise<

-length(which(result1$diff>

0))fall<

-length(which(result1$diff<0))

###画出资金曲线

##定义画出股价+现金流量对比函数

drawCash<

-function(result,ldata){

n<

-which(result1$Sigs=='

S'

) m<

-c(1,5)xx<

-result[n,m]

colnames(xx)<-c("

Time"

"cash"

)xx<

-melt(xx,id="

Time")

yy<

-fortify(ldata)k<-c(1,2) yy<

-yy[,k]

colnames(yy)<-c("

"close"

) yy<

-melt(yy,id="

Time") zz<

-rbind(yy,xx)g<

-ggplot(aes(Time,value),data=zz)g<-g+geom_line(aes(group=1,colour=variable))g<

-g+facet_grid(variable~.,scales="

free_y")

g<-g+scale_x_date(labels=date_format("

%Y-%m"

),breaks=date_breaks("

2month"

),limits=c(sDate,eDate))g<

-g+xlab("

")+ylab("Price"

)+ggtitle(title)

g

#运行

p2<

-drawCash(result1,ldata1)

ggsave(p2,("

close+cash","

.png"

sep=""

))ﻩ#存图

###一条均线模型,在大的趋势下是可以稳定赚钱的,但由于一条均线对于波动非常敏感性,

###如果小波动过于频繁,不仅会增加交易次数,而且会让模型失效。

然后,就有二条均线的

###策略模型,可以减低对波动的敏感性。

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

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

#选择5日和20日滑动平均指标

ldata2<-ma(cdata,c(5,20))

#画图

p33<-drawLine(ldata2,title,sDate,eDate)

#这步是为了将数据框与之前的函数格式对应

ldata2<-ldata2[,c(2,3)]

#获取散点图

pdata2<-getPoint(ldata2)

#画出散点图

p3<

-drawPoint(ldata2,pdata2,title,sDate,eDate)

#找出交易信号

tdata2<

-Signal(cdata,pdata2)

#模拟交易

result2<

-trade(tdata2,capital)rise2<

-length(which(result2$diff>

0))fall2<

-length(which(result2$diff<

0))

#画出股价现金图

p4<

-drawCash(result2,ldata2)

附表二:

阿里股票数据

Index

Open

High

Low

Close

Volume

Adjusted

2014/9/19

92.699997

99.699997

89.949997

93.889999

271879400

93.889999

2014/9/22

92.699997

92.949997

89.5

89.889999

89.889999

2014/9/23

88.940002

90.480003

86.620003

87.169998

87.169998

2014/9/24

88.470001

90.57

87.220001

90.57

90.57

2014/9/25

91.089996

91.5

88.5

88.919998

88.919998

2014/9/26

89.730003

90.459999

88.660004

90.459999

2014/9/29

89.620003

89.699997

88.019997

88.75

88.75

2014/9/30

89

90.879997

88.459999

88.849998

88.849998

2014/10/1

88.699997

88.940002

86.040001

86.099998

86.099998

2014/10/2

86.269997

88.199997

85.611

87.059998

87.059998

2014/10/3

88.099998

89.940002

87.650002

88.099998

88.099998

2014/10/6

89.150002

89.650002

88.059998

88.309998

88.309998

2014/10/7

87.949997

89.699997

87.059998

87.669998

87.669998

2014/10/8

88

88.5

87.059998

88.300003

88.300003

2014/10/9

88.510002

90.349998

88

88.790001

88.790001

2014/10/10

88.25

88.739998

85.239998

85.879997

85.879997

2014/10/13

86.849998

86.889999

84.919998

85.120003

85.120003

2014/10/14

85.809998

85.879997

83.220001

84.949997

84.949997

2014/10/15

84.040001

86.489998

82.809998

85.599998

85.599998

2014/10/16

84.980003

89.175003

84.014999

88.849998

88.849998

2014/10/17

90.400002

90.900002

87.669998

87.910004

87.910004

2014/10/20

88

8

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1