R语言动量交易策略分析调整后的数据

简介: R语言动量交易策略分析调整后的数据

用于动量策略中所谓的动量(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) - 1
position.score = iif(return < 0, NA, return)
return = prices / mlag(prices,60) - 1 + prices / mlag(prices,120) - 1
position.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

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


相关文章
|
4月前
|
数据采集 机器学习/深度学习 数据可视化
R语言从数据到决策:R语言在商业分析中的实践
【9月更文挑战第1天】R语言在商业分析中的应用广泛而深入,从数据收集、预处理、分析到预测模型构建和决策支持,R语言都提供了强大的工具和功能。通过学习和掌握R语言在商业分析中的实践应用,我们可以更好地利用数据驱动企业决策,提升企业的竞争力和盈利能力。未来,随着大数据和人工智能技术的不断发展,R语言在商业分析领域的应用将更加广泛和深入,为企业带来更多的机遇和挑战。
|
3月前
|
数据挖掘 C语言 C++
R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。
【10月更文挑战第21天】时间序列分析是一种重要的数据分析方法,广泛应用于经济学、金融学、气象学、生态学等领域。R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。本文将介绍使用R语言进行时间序列分析的基本概念、方法和实例,帮助读者掌握R语言在时间序列分析中的应用。
66 3
|
4月前
R语言基于表格文件的数据绘制具有多个系列的柱状图与直方图
【9月更文挑战第9天】在R语言中,利用`ggplot2`包可绘制多系列柱状图与直方图。首先读取数据文件`data.csv`,加载`ggplot2`包后,使用`ggplot`函数指定轴与填充颜色,并通过`geom_bar`或`geom_histogram`绘图。参数如`stat`, `position`, `alpha`等可根据需要调整,实现不同系列的图表展示。
|
4月前
|
数据采集 数据可视化 数据挖掘
R语言在金融数据分析中的深度应用:探索数据背后的市场智慧
【9月更文挑战第1天】R语言在金融数据分析中展现出了强大的功能和广泛的应用前景。通过丰富的数据处理函数、强大的统计分析功能和优秀的可视化效果,R语言能够帮助金融机构深入挖掘数据价值,洞察市场动态。未来,随着金融数据的不断积累和技术的不断进步,R语言在金融数据分析中的应用将更加广泛和深入。
|
5月前
|
机器学习/深度学习 数据采集 数据可视化
R语言在数据科学中的应用实例:探索与预测分析
【8月更文挑战第31天】通过上述实例,我们展示了R语言在数据科学中的强大应用。从数据准备、探索、预处理到建模与预测,R语言提供了完整的解决方案和丰富的工具集。当然,数据科学远不止于此,随着技术的不断发展和业务需求的不断变化,我们需要不断学习和探索新的方法和工具,以更好地应对挑战,挖掘数据的潜在价值。 未来,随着大数据和人工智能技术的普及,R语言在数据科学领域的应用将更加广泛和深入。我们期待看到更多创新的应用实例,为各行各业的发展注入新的动力。
|
8月前
|
数据可视化 数据挖掘 API
【R语言实战】聚类分析及可视化
【R语言实战】聚类分析及可视化
|
8月前
|
机器学习/深度学习 数据可视化
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为2
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为
|
5月前
|
数据采集 存储 数据可视化
R语言时间序列分析:处理与建模时间序列数据的深度探索
【8月更文挑战第31天】R语言作为一款功能强大的数据分析工具,为处理时间序列数据提供了丰富的函数和包。从数据读取、预处理、建模到可视化,R语言都提供了灵活且强大的解决方案。然而,时间序列数据的处理和分析是一个复杂的过程,需要结合具体的应用场景和需求来选择合适的方法和模型。希望本文能为读者在R语言中进行时间序列分析提供一些有益的参考和启示。
|
5月前
|
资源调度 数据挖掘
R语言回归分析:线性回归模型的构建与评估
【8月更文挑战第31天】线性回归模型是统计分析中一种重要且实用的工具,能够帮助我们理解和预测自变量与因变量之间的线性关系。在R语言中,我们可以轻松地构建和评估线性回归模型,从而对数据背后的关系进行深入的探索和分析。
|
5月前
|
机器学习/深度学习 数据采集
R语言逻辑回归、GAM、LDA、KNN、PCA主成分分类分析预测房价及交叉验证
上述介绍仅为简要概述,每个模型在实施时都需要仔细调整与优化。为了实现高度精确的预测,模型选择与调参是至关重要的步骤,并且交叉验证是提升模型稳健性的有效途径。在真实世界的房价预测问题中,可能还需要结合地域经济、市场趋势等宏观因素进行综合分析。
98 3