TMA三均线股票期货高频交易策略的R语言实现

全文参考:http://tecdat.cn/?p=4600 

原文出处:拓端数据部落公众号

趋势交易策略是至今应用最广泛以及最重要的投资策略之一,它的研究手段种类繁多,所运用的分析工具也纷繁复杂,其特长在于捕捉市场运动的大方向。股指期货市场瞬息万变,结合趋势分析方法,量化投资策略能够得到更有效的应用。

均线系统作为最古老的技术分析手段之一,至今仍在沿用,同时它也是运用最广泛的技术指标体系。最常用的移动平均线是简单移动平均线,而后在此基础上延伸出了很多类型的移动平均线,如指数移动平均(EMA),加

权移动平均(WMA),还有按成交量加权移动平均(VWMA)等。

由于均线的参数不同,均线所刻画的价格趋势也不相同,所以,单纯使用一条均线不能全面的刻画市场的趋势。对于日内高频交易来说,市场的趋势时短时长,因此需要采用多条不同周期的均线,从不同的角度来反映市场不同周期内的趋势。Triple Moving Average 策略(以下简称 TMA),顾名思义采用的是三条简单移动平均线

(SMA),选择不同周期的参数来刻画期指日内的短期,中期以及长期趋势。通常,三个参数的设定范围为短期(5 分钟~15 分钟),中期(20 分钟~40 分钟),长期(50 分钟~90 分钟)。

在 TMA 的基础上,我们设计了如下的指标:

Up Bound=Max (SMA(Fast),SMA(Middle),SMA(Slow) )

Dn Bound=Min ( SMA(Fast),SMA(Middle),SMA(Slow) )

指标采用 1 分钟收盘价作为价格时间序列,当收盘价第一次上穿 Up Bound时确认为买入时机,当收盘价第一次下穿 Dn Bound 时确认为卖出时机。

由于backtester_v4.2投资组合软件包中已经给出了SMA的方法,因此我们可以对其进行简单的修改,从而实现TMA策略。

通过getTMA可以得到不同窗口宽度下的收盘价:

通过getPosSignFromTMA我们可以通过三条均线得到的不同收盘价来采取不同的交易策略:

通过getPosSize我们可以得到某支股票的交易量

最终可以通过getInSampleOptResult得到三条均线不同组合下的最佳市盈率

有问题欢迎交流讨论 qq 570881451

部分源码

getOrders <- function(store, newRowList, currentPos, params) {

allzero <- rep(0,length(newRowList)) # used for initializing vectors

sma=numeric(0)

for(i in 1:3){

sma[i] <-as.numeric(last(SMA(close_prices,n=lookbacks[[i]]))) # TTR version # convert to vector from xts

}

smalist <- list(short=sma[1],medium=sma[2],long=sma[3])

return(smalist)

}

getPosSignFromTMA <- function(tma_list) {

getPosSize <- function(current_close,constant=1000) {

return(floor(constant/current_close))

}

getInSampleResult <- function() {

period=getInSamplePeriod('x4jr')

start=period[1]

end=period[2]

datalist=getData(directory="A2")

datalist <-lapply(datalist, function(x)x[start:end])

sMult=0.2

series=1:length(datalist)

params <-list(lookbacks=list(short=as.integer(10),medium=as.integer(20),long=as.integer(30)),sdParam=1,series=series)

results <- backtest(datalist, getOrders, params, sMult)

getInSampleOptResult <- function() {

period=getInSamplePeriod('x4jr')

medium <- seq(from=105,to=120,by=5)

short <- seq(from=100,to=110,by=5)

long <- seq(from=110,to=130,by=5)

time <- matrix(0,28,3)

numberComb <- 28

sMult <- 0.2 # slippage multiplier

rr=1

for(l in long)

for(m in medium)

for(s in short)

if(s< l){time[rr,]=c(as.integer(s),as.integer(m),as.integer(l));rr=rr+1}

pfolioPnLList <- vector(mode="list",length=numberComb)

count <- 1

bestPD <- 0

resultsMatrix=matrix(0,28,4)

for (i in 1:28) {

print(resultsMatrix[count,])

count <- count + 1

}

print(resultsMatrix[order(resultsMatrix[,4]),])

bsetPD=max(resultsMatrix[,4])

return(bsetPD)

#> bsetPD

#[1] 3.28


最受欢迎的见解

1.在python中使用lstm和pytorch进行时间序列预测

2.python中利用长短期记忆模型lstm进行时间序列预测分析

3.使用r语言进行时间序列(arima,指数平滑)分析

4.r语言多元copula-garch-模型时间序列预测

5.r语言copulas和金融时间序列案例

6.使用r语言随机波动模型sv处理时间序列中的随机波动

7.r语言时间序列tar阈值自回归模型

8.r语言k-shape时间序列聚类方法对股票价格时间序列聚类

9.python3用arima模型进行时间序列预测

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值