原文链接:http://tecdat.cn/?p=18686

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

用于动量策略中所谓的动量(Momentum),是指某一对象所具有的一种倾向于保持其原有属性或特征的性质,也可以简单理解成一种惰性(Inertia)。股票的动量,简单地说就是涨的还会接着涨,跌的还会接着跌;过去涨得越猛,未来涨的也就越猛;过去跌得越狠,未来也会跌的越狠

下面,本文将尝试将动量策略应用于调整后的数据(历史价格,股息和拆分数据,以预测公司的未来或获得市场见解):

#*****************************************************************
# 加载一天结束时的历史数据
#*****************************************************************# 股票代码
tickers = '
AGG
DBC
EEM
EFA
'getSymbols.extra(tickers, src = 'yahoo', from = '1970-01-01', env = data, set.symbolnames = T, auto.assign = T)#*****************************************************************
# 构建另一个不含股利的价格调整后的回测环境#*****************************************************************for(i in data$symbolnames) data.price[[i]] = adjustOHLC(data[[i]], symbol.name=i, adjust='split', use.Adjusted=F)#*****************************************************************
# 调整价格
#*****************************************************************
for(i in data$symbolnames) data[[i]] = adjustOHLC(data[[i]], use.Adjusted=T)
prep(data, align='keep.all')

我们构建了两个环境:

  • 包含拆分和股息调整后的价格
  • 仅包含调整后的价格
#*****************************************************************
# 排名60天变化率#******************************************************************
return = prices / mlag(prices,60) - 1
position.score = iif(return < 0, NA, return)
data$weight[period.ends0,] = ntop(position.score[period.ends1,], 1)#*****************************************************************
# 60/120天的排名变化率
#******************************************************************
return = prices / mlag(prices,60) - 1 + prices / mlag(prices,120) - 1
position.score = iif(return < 0, NA, return)data$weight[period.ends0,] = ntop(position.score[period.ends1, , 1)#*****************************************************************
# 创建报表
#*****************************************************************
plot(models)

mom60    mom120
Period  Jan2002 - Mar2015   Jan2002 - Mar2015
Cagr    18.05   15.47
Sharpe  0.89    0.76
DVR 0.85    0.7
R2  0.95    0.92
Volatility  21.26   22.21
MaxDD   -33.49  -51.75
Exposure    94.36   94.36
Win.Percent 63.76   62.42
Avg.Trade   1.69    1.49
Profit.Factor   2.24    2
Num.Trades  149 149
models$mom60 weight  entry.date  exit.date   nhold   entry.price exit.price  return
SPY 100 2013-06-28  2013-07-31  33  155.04  163.06  5.17
XLV 100 2013-07-31  2013-08-30  30  49.88   48.12   -3.53
XLV 100 2013-08-30  2013-09-30  31  48.12   49.66   3.20
FXI 100 2013-09-30  2013-10-31  31  35.92   36.40   1.34
EEM 100 2013-10-31  2013-11-29  29  41.16   41.05   -0.27
XLV 100 2013-11-29  2013-12-31  32  54.24   54.64   0.75
SPY 100 2013-12-31  2014-01-31  31  180.35  173.99  -3.53
XLV 100 2014-01-31  2014-02-28  28  55.16   58.59   6.22
IYR 100 2014-02-28  2014-03-31  31  65.72   65.81   0.14
IYR 100 2014-03-31  2014-04-30  30  65.81   67.81   3.04
EEM 100 2014-04-30  2014-05-30  30  40.42   41.62   2.97
EEM 100 2014-05-30  2014-06-30  31  41.62   42.62   2.40
IYR 100 2014-06-30  2014-07-31  31  70.41   70.33   -0.11
FXI 100 2014-07-31  2014-09-30  61  39.96   37.80   -5.41
UUP 100 2014-09-30  2014-10-31  31  22.87   23.09   0.96
XLV 100 2014-10-31  2014-11-28  28  67.02   69.35   3.48
XLV 100 2014-11-28  2014-12-31  33  69.35   68.38   -1.40
IYR 100 2014-12-31  2015-01-30  30  76.84   81.23   5.71
IYR 100 2015-01-30  2015-02-27  28  81.23   79.12   -2.60
FXI 100 2015-02-27  2015-03-30  31  43.76   44.74   2.24

接下来,我们考虑以下3种设置:

  • “已调整”-拆分和股息调整后的价格数据。信号和损益仅从调整后的数据时间序列中得出。
  • “实际”-仅使用拆分后的调整数据,尚未对股息进行调整。信号和损益仅从唯一的拆分调整后的数据时间序列中得出。
  • “混合”-使用“实际”时间序列生成信号,使用“调整”时间序列进行损益计算。
#*****************************************************************
# 辅助函数
#******************************************************************return = prices / mlag(prices,60) - 1position.score = iif(return < 0, NA, return)return = prices / mlag(prices,60) - 1 + prices / mlag(prices,120) - 1position.score = iif(return < 0, NA, return)models[[paste0('mom120',name)]] =run(data, clean.signal=F, commission = commission, trade.summary=T, silent=T)models#*****************************************************************
# 安装
#******************************************************************all.models = c(all.models, strategy(prices.adj, data, 'Adjusted'))#*****************************************************************
# 创建报表
#*****************************************************************plot(models

print(plotbt.strateg(models, make.plot=F,
mom60Adjusted    mom60Actual mom60Hybrid
Period  Jan2002 - Mar2015   Jan2002 - Mar2015   Jan2002 - Mar2015
Cagr    18.05   15.02   17.22
Sharpe  0.89    0.76    0.85
DVR 0.85    0.73    0.82
R2  0.95    0.96    0.96
Volatility  21.26   21.33   21.33
MaxDD   -33.49  -35.99  -33.74
Exposure    94.36   92.44   92.44
Win.Percent 63.76   62.33   63.01
Avg.Trade   1.69    1.49    1.67
Profit.Factor   2.24    1.98    2.15
Num.Trades  149 146 146
plotbt(models, plotX = T, log = 'y'

print(plotstrategy)
mom120Adjusted   mom120Actual    mom120Hybrid
Period  Jan2002 - Mar2015   Jan2002 - Mar2015   Jan2002 - Mar2015
Cagr    15.47   13.61   15.66
Sharpe  0.76    0.69    0.77
DVR 0.7 0.64    0.73
R2  0.92    0.92    0.94
Volatility  22.21   22.08   22.07
MaxDD   -51.75  -49.93  -47.15
Exposure    94.36   92.47   92.47
Win.Percent 62.42   60.96   61.64
Avg.Trade   1.49    1.37    1.54
Profit.Factor   2   1.9 2.02
Num.Trades  149 146 146

经调整后的数据表现优于实际数据和混合数据。


最受欢迎的见解

1.用机器学习识别不断变化的股市状况—隐马尔科夫模型(HMM)的应用

2.R语言GARCH-DCC模型和DCC(MVT)建模估计

3.R语言实现 Copula 算法建模依赖性案例分析报告

4.R语言COPULAS和金融时间序列数据VaR分析

5.R语言多元COPULA GARCH 模型时间序列预测

6.用R语言实现神经网络预测股票实例

7.r语言预测波动率的实现:ARCH模型与HAR-RV模型

8.R语言如何做马尔科夫转换模型markov switching model

9.matlab使用Copula仿真优化市场风险

拓端tecdat|R语言动量交易策略分析调整后的数据相关推荐

  1. 拓端tecdat|R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险

    最近我们被客户要求撰写关于冠心病风险的研究报告,包括一些图形和统计输出. 相关视频:R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险 逻辑回归Logistic模型原理和R语言分类预测冠 ...

  2. 拓端tecdat|R语言线性回归和时间序列分析北京房价影响因素可视化案例

    最近我们被客户要求撰写关于北京房价影响因素的研究报告,包括一些图形和统计输出. 目的 房价有关的数据可能反映了中国近年来的变化: 人们得到更多的资源(薪水),期望有更好的房子 人口众多 独生子女政策: ...

  3. 拓端tecdat|R语言向量误差修正模型 (VECMs)分析长期利率和通胀率影响关系

    最近我们被客户要求撰写关于向量误差修正模型的研究报告,包括一些图形和统计输出. 向量自回归模型估计的先决条件之一是被分析的时间序列是平稳的.但是,经济理论认为,经济变量之间在水平上存在着均衡关系,可以 ...

  4. 拓端tecdat|R语言用LOESS(局部加权回归)季节趋势分解(STL)进行时间序列异常检测

    最近我们被客户要求撰写关于LOESS(局部加权回归)的研究报告,包括一些图形和统计输出. 这篇文章描述了一种对涉及季节性和趋势成分的时间序列的中点进行建模的方法.我们将对一种叫做STL的算法进行研究, ...

  5. 量化交易陷阱和R语言改进股票配对交易策略分析中国股市投资组合

    最近我们被客户要求撰写关于量化交易的研究报告,包括一些图形和统计输出. 计算能力的指数级增长,以及量化社区(日益增长的兴趣使量化基金成为投资者蜂拥而至的最热门领域. 量化交易陷阱和R语言改进股票配对交 ...

  6. Python编写动量交易策略

    目录 1. 概念介绍 2.计算动量 2.1 作差法求动量 2.2 作除法求动量 3.定义求动量与作图函数 4. 绘制K线图与动量图 5. 动量交易策略的制定 1. 概念介绍 动量交易策略,即Momen ...

  7. 拓端tecdat荣获掘金社区入驻新人奖

    2021年7月,由掘金发起了"入驻成长礼"颁奖活动.本次活动邀请到知名开发者.服务机构代表等业界人士. 据了解,掘金社区"新入驻创作者礼"主要对已经积累了一定历 ...

  8. 什么是动量效应和动量交易策略?

    有效市场假说是金融学领域中最基础的理论之一,该假说认为资产价格包含了与其相关的所有信息,未来资产价格变动无法根据资产过去的价格信息进行预测. 然而,自上世纪八十年代以来,大量实证研究表明市场中存在很多 ...

  9. 拓端tecdat荣获2022年度51CTO博主之星

    相信技术,传递价值,这是51CTO每一个技术创作者的动力与信念,2022 年度,拓端tecdat 作为新锐的数据分析咨询公司,在51CTO平台上,不断的输出优质的技术文章,分享前沿创新技术,输出最佳生 ...

  10. python中tushare数据可以导出嘛_Python与交易策略分析tushare/baostock库介绍(附代码)...

    前言:金融数据中最典型的就是资产价格的涨跌情况.想要分析金融资产的投资策略,第一步就是历史数据的获取.tushare正是为导入历史金融资产数据而开发,它大大方便了用Python进行金融资产交易策略的探 ...

最新文章

  1. 感悟Windows7
  2. 1056 Mice and Rice (25 分)【难度: 一般 / 知识点: 模拟】
  3. 返岗上班应该注意什么?五个细节必须牢记
  4. c windows控制台输出颜色文字
  5. 复习Javascript专题(一):基本概念部分
  6. ASP.NET Core 导入导出Excel xlsx 文件
  7. after不显示_web前端入门到实战:css实现单行、多行文本超出显示省略号
  8. 对于以太网口作为下一条路由的理解
  9. python程序员工资-均薪3万?Python程序员就业各岗位薪资一览,你拖后腿了吗?...
  10. 转:基于Spark的电影推荐系统(包含爬虫项目、web网站、后台管理系统以及spark推荐系统)
  11. 分享一款思维导图工具-幕布(附在线工具合集、Android进阶知识体系)
  12. [多媒体] 10大开源视频剪辑软件
  13. unity不规则碰撞_Unity中的刚体和碰撞器
  14. html5 橡皮擦效果,javascript – HTML5 Canvas:globalCompositeOperation(橡皮擦)
  15. 10-25 查询选修张老师讲授所有课程的学生
  16. Mac finder 文件剪切方法 怎么剪切/移动 剪切快捷键
  17. 计算机启动慢,win7开机速度慢怎么办_win7开机启动慢怎么解决-win7之家
  18. python编写赛车_90%的人说Python程序慢,5大神招让你的代码像赛车一样跑起来
  19. Quantopian 入门系列一
  20. 一次回三线城市面试软件开发的经历

热门文章

  1. 内存不足时Android 系统如何Kill进程
  2. win32 sdk绘制ListBox控件
  3. VMware esxi在线增加Linux LVM硬盘不需重新启动
  4. 使用MySQL中的对象数组查询JSON列
  5. EMNLP 2017 北京论文报告会笔记
  6. 数据--第49课 - 线性索引查找
  7. 强化学习_Deep Q Learning(DQN)_代码解析
  8. webpack多页面构建优化不完全指北
  9. 区块链应用 | 区块链的火爆会一直持续吗?
  10. Linux 安装python 模块及库