全文下载链接:http://tecdat.cn/?p=29653
最近咱们被客户要求撰写对于量化交易的钻研报告,包含一些图形和统计输入。
咱们将利用每日数据制订简略的交易策略,将涵盖以下内容。
- 一个简略的介绍性交易。
- 它每天只依据前一天的价格行为做出交易决定 – 咱们用这个例子来介绍前瞻性的偏见
- 布林线是一个应用挪动平均线(和挪动标准差)的规范技术剖析指标的例子
- 一个应用布林线的简略的均线回复型交易策略 指标作为策略的构件(但与之不同)。门路依赖性。止损、盈利指标和持有期是引入门路依赖的交易策略构建的例子。
- 滑点 – 咱们回顾一下什么是滑点,咱们探讨在交易策略中思考滑点的问题 – 应用价差的策略,它是两个价格工夫序列的线性组合
简略的策略:模拟
策略
- 如果收盘价高于开盘价,则在第二天买入
- 否则,在第二天卖出
咱们心愿这个策略在什么时候能发挥作用?
- 如果有间断多日价格向同一方向挪动的状况
- 每一天的方向与之前的变动不同,对该策略来说都是亏损的一天,所以这样的日子不应该有大的价格稳定。
测试该策略
从当初开始,咱们将重复使用实用工具脚本 “utilities.R “ 中的函数。在这种状况下,咱们将应用。
- getLogReturns(prices),从调整后的价格中计算出对数回报。
- getEquityLog(log_ret,pos),从对数收益和仓位向量中计算出股权曲线。
实用功能
getLogReturns <- function(prices) {
# 返回调整后价格的对数收益
# 假如输出中存在调整后的价格列
log_ret <- ROC(Ad(prices),type='continuous')
log_ret[1] <- 0
return(log_ret)
}
getEquityCurve <- function(returns,pos,type='log') {
# 股票曲线的简略回报
if (type=='log')
return(exp(cumsum(returns*pos)) - 1)
else
cat ('Type not supported','\n')
}
股票曲线
咱们应用滞后函数将工夫序列挪动一个地位,因而咱们应用前一天的价格来做决定
pos <- ifelse(Cl(prices)-Op(prices)>0,1,-1)
pos <- Lag(pos)
pos[1] <- 0
正确的股票曲线
替换地位
留神到这个策略在所有四个股票上都体现不佳,但在其中三个股票上体现特地差。这表明对策略进行了显著的扭转:做齐全相同的事件,即替换多头和空头交易,如下所示
pos <- ifelse(Cl(prices)-Op(prices)>0,1,-1)
切换式股票曲线
点击题目查阅往期内容
【视频】量化交易陷阱和 R 语言改良股票配对交易策略剖析中国股市投资组合
左右滑动查看更多
01
02
03
04
挪动标准差和布林带
相似于挪动平均线,咱们当初引入挪动(滚动)标准差
咱们应用挪动平均线和挪动标准差来定义布林带,而后将在咱们的下一个交易策略示例中应用
图表系列
> library(quantmod)
> getSymbols('AAPL')
这应用包中的 BBands 函数 TTR quantmod 在 chartSeries 中联合了 xts 和 TTR 性能
策略代码
咱们将应用与雷同的循环、收益和权利曲线计算
- 扭转的是地位向量的计算
pos <- long + short
pos <- lag(pos)
参数
这个策略的参数是什么?
bbands <- BBands(prices,n=50,sd=2)
两个显著的数字参数是。
- n 是回溯期,和
- sd 是标准偏差的乘数
例子
plot(equity,main='Equity curve')
该策略须要一个参数,即持有期。当且仅当持有期过后,咱们退出交易
通过在计数小于持有期时留在交易中来实现。
run <- function(prices,n,sd,hold) {bbands <- lag(BBands(prices,n=n,sd=sd))
pos <- rep(0,length=nrow(prices)) # all zeroes
下一个例子 – 止损
- 止损限度了某项交易的损失
- 咱们将掂量一笔交易的简略回报
- 如果它太负,咱们将退出交易
getTradeReturn <- function(prices,entry,exit,short=FALSE) {prices <- as.numeric(prices)
> prices
Adjusted
1970-01-02 100
1970-01-03 110
1970-01-04 100
1970-01-05 150
1970-01-06 200
1970-01-07 100
> getTradeReturn(prices,entry=1,exit=2)
[1] 0.1
> getTradeReturn(prices,entry=1,exit=2,short=T)
[1] -0.09090909
> getTradeReturn(prices,entry=1,exit=4)
[1] 0.5
titStr <- paste("stoploss=", stoploss,":",sum(stopOuts),"stop outs")
plotEquity(prices,pos,stopOuts,titStr); return(pos)
}
利差
- 两个系列的加权组合(通常是差别)。
策略能够尝试利用价差中的均值反转;对于一对股票,这被称为成对交易
- 与协整实践无关
价差例子
咱们将看一下规范普尔 500 指数和道琼斯工业指数
pdf('different_screens.pdf')
plot.zoo(prices,col=cols,xlab=xlab,ylab=paste(tickers,ylab),main="")
dev.off()
当初,惊人的相似性是不言而喻的
例子:寻找权重
lookback <- 50
spread <- close1 - positionRatio*close2
- 点差 = x – positionRatio * y
- 当咱们卖出 y 的仓位比例单位时,买入一个单位的 x
点差例子
plot.zoo(cbind(spread,0,0.5,-0.5),screen=c(2,2,2,2),main="Spread")
一个价差策略
创立价差的目标是创立一个安稳的工夫序列,也就是一个具备恒定平均值和标准差的工夫序列。
如果咱们胜利了,咱们就能够在价差远远低于其平均值时买入价差(做多便宜产品,做空低廉产品),在价差高于其平均值时卖出价差。
间断积分实践正是解决安稳的工夫序列的线性组合,但咱们不会去钻研数学。
接下来咱们将看到一个简略的基于布林线的价差交易策略想法。
例子:RSI 策略
- RSI 是一个规范的指标,在 TTR 软件包中实现。
- 它的数值在 0 到 100 之间,较高(较低)的数值示意市场最近在回升(降落)。
# RSI 策略
pos <- long + short
pos <- Lag(pos); pos[is.na(pos)] <- 0
return(pos)
}
样本内和样本外回测
resultsIn <- backtest(prices[startIn:endIn,],params) # in-sample
resultsOut <- backtest(prices[startOut:endOut,],params) # out-of-sample
绘制图
#dev.new(width=10, height=5) # prevent elongation of plots
grid.arrange(plot1,plot2,ncol=2)
dev.off()
- 从样本内后果中筛选参数并不总是容易的
-
- 数据集的漂移可能导致良好的参数组合在样本内和样本外期间有所不同
点击文末 “浏览原文”
获取全文残缺代码数据资料。
本文选自《R 语言金融市场量化交易:布林带、价差策略、RSI 交易策略,回测 COMP 226》。
点击题目查阅往期内容
【视频】量化交易陷阱和 R 语言改良股票配对交易策略剖析中国股市投资组合
应用 R 语言对 S&P500 股票指数进行 ARIMA + GARCH 交易策略
R 语言量化交易 RSI 策略:应用反对向量机 SVM
R 语言资产配置: 季度战术资产配置策略钻研
R 语言动量交易策略剖析调整后的数据
TMA 三均线股票期货高频交易策略的 R 语言实现
R 语言工夫序列:ARIMA / GARCH 模型的交易策略在外汇市场预测利用
R 语言基于 Garch 稳定率预测的区制转移交易策略
r 语言多均线股票价格量化策略回测
应用 R 语言对 S&P500 股票指数进行 ARIMA + GARCH 交易策略
Python 基于粒子群优化的投资组合优化钻研
R 语言 Fama-French 三因子模型理论利用:优化投资组合
R 语言动量和马科维茨 Markowitz 投资组合 (Portfolio) 模型实现
Python 计算股票投资组合的危险价值(VaR)
R 语言 Markowitz 马克维茨投资组合实践剖析和可视化
R 语言中的狭义线性模型(GLM)和狭义相加模型(GAM):多元(平滑)回归分 PYTHON 用 RNN 神经网络 LSTM 优化 EMD 教训模态合成交易策略剖析股票价格 MACD
R 语言深度学习:用 keras 神经网络回归模型预测工夫序列数据
【视频】CNN(卷积神经网络)模型以及 R 语言实现回归数据分析
Python TensorFlow 循环神经网络 RNN-LSTM 神经网络预测股票市场价格工夫序列和 MSE 评估准确性
数据分享 |PYTHON 用 KERAS 的 LSTM 神经网络进行工夫序列预测天然气价格例子
Python 对商店数据进行 lstm 和 xgboost 销售量工夫序列建模预测剖析
Matlab 用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类
RNN 循环神经网络、LSTM 长短期记忆网络实现工夫序列长期利率预测
联合新冠疫情 COVID-19 股票价格预测:ARIMA,KNN 和神经网络工夫序列剖析
深度学习:Keras 应用神经网络进行简略文本分类剖析新闻组数据
用 PyTorch 机器学习神经网络分类预测银行客户散失模型
PYTHON 用 LSTM 长短期记忆神经网络的参数优化办法预测工夫序列洗发水销售数据
Python 用 Keras 神经网络序列模型回归拟合预测、准确度检查和后果可视化
Python 用 LSTM 长短期记忆神经网络对不稳固降雨量工夫序列进行预测剖析
R 语言中的神经网络预测工夫序列:多层感知器(MLP)和极限学习机(ELM)数据分析报告
R 语言深度学习:用 keras 神经网络回归模型预测工夫序列数据
Matlab 用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类
R 语言 KERAS 深度学习 CNN 卷积神经网络分类辨认手写数字图像数据(MNIST)
MATLAB 中用 BP 神经网络预测人体脂肪百分比数据
Python 中用 PyTorch 机器学习神经网络分类预测银行客户散失模型
R 语言实现 CNN(卷积神经网络)模型进行回归数据分析
SAS 应用鸢尾花 (iris) 数据集训练人工神经网络 (ANN) 模型
【视频】R 语言实现 CNN(卷积神经网络)模型进行回归数据分析
Python 应用神经网络进行简略文本分类
R 语言用神经网络改良 Nelson-Siegel 模型拟合收益率曲线剖析
R 语言基于递归神经网络 RNN 的温度工夫序列预测
R 语言神经网络模型预测车辆数量工夫序列
R 语言中的 BP 神经网络模型剖析学生问题
matlab 应用长短期记忆(LSTM)神经网络对序列数据进行分类
R 语言实现拟合神经网络预测和后果可视化
用 R 语言实现神经网络预测股票实例
应用 PYTHON 中 KERAS 的 LSTM 递归神经网络进行工夫序列预测
python 用于 NLP 的 seq2seq 模型实例: 用 Keras 实现神经网络机器翻译
用于 NLP 的 Python:应用 Keras 的多标签文本 LSTM 神经网络分类