楼主: zlxxfzm
3250 8

[交易策略] trend follower strategy 回测程序(R语言) [推广有奖]

  • 7关注
  • 0粉丝

硕士生

6%

还不是VIP/贵宾

-

威望
0
论坛币
364 个
通用积分
0.1200
学术水平
3 点
热心指数
3 点
信用等级
3 点
经验
1300 点
帖子
121
精华
0
在线时间
119 小时
注册时间
2015-4-15
最后登录
2021-4-27

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
一个用R语言写的trend follower strategy的案例,运行时将demoData.R放在工作目录下或者设置读取路径 trend follower strategy backtesting.txt (4.62 KB, 需要: 1 个论坛币) demoData.txt (2.88 KB, 需要: 1 个论坛币)


策略介绍:

The indicator will be generated by R’s lag() function. The signal will be to go long(short) if the price is higher(lower) than it was a year ago. In order to equalize risk across instruments, we are going to size our order with a lagging ten day ATR (that is, we use yesterday’s ATR to place our order sizes), and we will risk around 2 percent per trade. ATR stands for Average True Range and is
an indicator that can be found in the TTR package.

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Follower Strategy Strateg follow trend 策略回测

2.bmp (434.21 KB)

2.bmp

1.bmp (1.26 MB)

1.bmp

已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
fantuanxiaot + 80 精彩帖子
wwqqer + 2 + 2 + 2 鼓励原创

总评分: 论坛币 + 80  学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

本帖被以下文库推荐

沙发
hkmonte 发表于 2015-8-6 23:20:20 |只看作者 |坛友微信交流群
谢谢分享!

使用道具

藤椅
taoyuchina 发表于 2015-8-29 16:17:48 |只看作者 |坛友微信交流群
[victory][victory]

使用道具

板凳
snaggle 发表于 2015-8-29 21:23:26 |只看作者 |坛友微信交流群
感谢分享

使用道具

报纸
ysheva 发表于 2015-10-20 08:52:10 |只看作者 |坛友微信交流群
感谢分享

使用道具

地板
jjxm20060807 发表于 2015-10-20 23:00:47 |只看作者 |坛友微信交流群

谢谢分享

使用道具

7
hanzaihua 发表于 2016-1-11 15:46:38 |只看作者 |坛友微信交流群
如何赚论坛币啊。我下载不了

使用道具

8
going0802 发表于 2017-9-11 22:01:46 |只看作者 |坛友微信交流群
無法使用
出現以下錯誤訊息 ~~ 請問需要將yahoo改成google嗎 ? 現在yahoo抓不到資料
但我改了google後一樣不行 ..

> require(quantstrat)
Loading required package: quantstrat
Warning message:
In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE,  :
  there is no package called ‘quantstrat’
> require(quantmod)
Loading required package: quantmod
Loading required package: xts
Loading required package: zoo

Attaching package: ‘zoo’

The following objects are masked from ‘package:base’:

    as.Date, as.Date.numeric

Loading required package: TTR
Version 0.4-0 included new data defaults. See ?getSymbols.
> require(PerformanceAnalytics)
Loading required package: PerformanceAnalytics

Package PerformanceAnalytics (1.4.3541) loaded.
Copyright (c) 2004-2014 Peter Carl and Brian G. Peterson, GPL-2 | GPL-3
http://r-forge.r-project.org/projects/returnanalytics/


Attaching package: ‘PerformanceAnalytics’

The following object is masked from ‘package:graphics’:

    legend

> initDate = "1990-01-01"
> from = "2003-01-01"
> to = "2013-12-31"
> options(width = 70)
>
> setwd("C:/Users/going/Downloads")
> source("demoData.r")
Error in as.environment(pos) :
  no item called ".blotter" on the search list
In addition: Warning message:
In ls(.blotter) : ‘.blotter’ converted to character string
>
>
>
> # Trade sizing and initial equity settings
> tradeSize <- 10000
> initEq <- tradeSize * length(symbols)
> strategy.st <- "Clenow_Simple"
> portfolio.st <- "Clenow_Simple"
> account.st <- "Clenow_Simple"
> rm.strat(portfolio.st)
Error: could not find function "rm.strat"
> rm.strat(strategy.st)
Error: could not find function "rm.strat"
> initPortf(portfolio.st, symbols = symbols,
+           initDate = initDate, currency = 'USD')
Error: could not find function "initPortf"
> initAcct(account.st, portfolios = portfolio.st,
+          initDate = initDate, currency = 'USD', initEq = initEq)
Error: could not find function "initAcct"
> initOrders(portfolio.st, initDate = initDate)
Error: could not find function "initOrders"
> strategy(strategy.st, store=TRUE)
Error: could not find function "strategy"
>
>
> nLag = 252
> pctATR = 0.02
> period = 10
> namedLag <- function(x, k = 1, na.pad = TRUE, ...) {
+   out <- lag(x, k = k, na.pad = na.pad, ...)
+   out[is.na(out)] <- x[is.na(out)]
+   colnames(out) <- "namedLag"
+   return(out)
+ }
>
>
> add.indicator(strategy.st, name = "namedLag",
+               arguments = list(x = quote(Cl(mktdata)), k = nLag),
+               label = "ind")
Error: could not find function "add.indicator"
> add.indicator(strategy.st, name = "lagATR",
+               arguments = list(HLC = quote(HLC(mktdata)), n = period),
+               label = "atrX")
Error: could not find function "add.indicator"
> test <- applyIndicators(strategy.st, mktdata = OHLC(XLB))
Error: could not find function "applyIndicators"
> head(round(test, 2), 253)
Error in head(round(test, 2), 253) : object 'test' not found
>
>
> add.signal(strategy.st, name = "sigCrossover",
+            arguments = list(columns = c("Close", "namedLag.ind"),
+                             relationship = "gt"),
+            label = "coverOrBuy")
Error: could not find function "add.signal"
> add.signal(strategy.st, name = "sigCrossover",
+            arguments = list(columns = c("Close", "namedLag.ind"),
+                             relationship = "lt"),
+            label = "sellOrShort")
Error: could not find function "add.signal"
>
>
> # Long rules
> add.rule(strategy.st, name = "ruleSignal",
+          arguments = list(sigcol = "coverOrBuy",
+                           sigval = TRUE, ordertype = "market",
+                           orderside = "long", replace = FALSE,
+                           prefer = "Open", osFUN = osDollarATR,
+                           tradeSize = tradeSize, pctATR = pctATR,
+                           atrMod = "X"), type = "enter", path.dep = TRUE)
Error: could not find function "add.rule"
>
> add.rule(strategy.st, name = "ruleSignal",
+          arguments = list(sigcol = "sellOrShort",
+                           sigval = TRUE, orderqty = "all",
+                           ordertype = "market", orderside = "long",
+                           replace = FALSE, prefer = "Open"),
+          type = "exit", path.dep = TRUE)
Error: could not find function "add.rule"
> # Short rules
> add.rule(strategy.st, name = "ruleSignal",
+          arguments = list(sigcol = "sellOrShort",
+                           sigval = TRUE, ordertype = "market",
+                           orderside = "short", replace = FALSE,
+                           prefer = "Open", osFUN = osDollarATR,
+                           tradeSize = -tradeSize, pctATR = pctATR,
+                           atrMod = "X"), type = "enter", path.dep = TRUE)
Error: could not find function "add.rule"
> add.rule(strategy.st, name = "ruleSignal",
+          arguments = list(sigcol = "coverOrBuy",
+                           sigval = TRUE, orderqty = "all",
+                           ordertype = "market", orderside = "short",
+                           replace = FALSE, prefer = "Open"),
+          type = "exit", path.dep = TRUE)
Error: could not find function "add.rule"
>
> # Get begin time
> t1 <- Sys.time()
> out <- applyStrategy(strategy = strategy.st,
+                      portfolios = portfolio.st)
Error: could not find function "applyStrategy"
> # Record end time
> t2 <- Sys.time()
> print(t2 - t1)
Time difference of 0.006000042 secs
>
> updatePortf(portfolio.st)
Error: could not find function "updatePortf"
> dateRange <- time(getPortfolio(portfolio.st)$summary)[-1]
Error in time(getPortfolio(portfolio.st)$summary) :
  could not find function "getPortfolio"
> updateAcct(portfolio.st, dateRange)
Error: could not find function "updateAcct"
> updateEndEq(account.st)
Error: could not find function "updateEndEq"
>
> tStats <- tradeStats(Portfolios = portfolio.st, use = "trades",
+                      inclZeroDays = FALSE)
Error: could not find function "tradeStats"
> tStats[, 4:ncol(tStats)] <- round(tStats[, 4:ncol(tStats)], 2)
Error: object 'tStats' not found
> print(data.frame(t(tStats[,-c(1,2)])))
Error in t(tStats[, -c(1, 2)]) : object 'tStats' not found
> aggPF <- sum(tStats$Gross.Profits) / -sum(tStats$Gross.Losses)
Error: object 'tStats' not found
> aggCorrect <- mean(tStats$Percent.Positive)
Error in mean(tStats$Percent.Positive) : object 'tStats' not found
> numTrades <- sum(tStats$Num.Trades)
Error: object 'tStats' not found
> meanAvgWLR <- mean(tStats$Avg.WinLoss.Ratio[
+   tStats$Avg.WinLoss.Ratio < Inf], na.rm = TRUE)
Error in mean(tStats$Avg.WinLoss.Ratio[tStats$Avg.WinLoss.Ratio < Inf],  :
  object 'tStats' not found
>
> aggPF <- sum(tStats$Gross.Profits) / -sum(tStats$Gross.Losses)
Error: object 'tStats' not found
> ## [1] 3.663545
> aggCorrect <- mean(tStats$Percent.Positive)
Error in mean(tStats$Percent.Positive) : object 'tStats' not found
> ## [1] 36.00233
> numTrades <- sum(tStats$Num.Trades)
Error: object 'tStats' not found
> ## [1] 1134
> meanAvgWLR <- mean(tStats$Avg.WinLoss.Ratio[
+   tStats$Avg.WinLoss.Ratio < Inf], na.rm = TRUE)
Error in mean(tStats$Avg.WinLoss.Ratio[tStats$Avg.WinLoss.Ratio < Inf],  :
  object 'tStats' not found
> ## [1] 9.871333
>
> instRets <- PortfReturns(account.st)
Error: could not find function "PortfReturns"
> portfRets <- xts(rowMeans(instRets) * ncol(instRets),
+                  order.by = index(instRets))
Error in is.data.frame(x) : object 'instRets' not found
> portfRets <- portfRets[!is.na(portfRets)]
Error: object 'portfRets' not found
> cumPortfRets <- cumprod(1 + portfRets)
Error: object 'portfRets' not found
> firstNonZeroDay <- as.character(index(portfRets)[
+   min(which(portfRets != 0))])
Error in index(portfRets) : object 'portfRets' not found
>
> # Obtain symbol
> getSymbols("SPY", from = firstNonZeroDay, to = to)
Error in do.call(paste("getSymbols.", symbol.source, sep = ""), list(Symbols = current.symbols,  :
  object 'firstNonZeroDay' not found
> SPYrets <- diff(log(Cl(SPY)))[-1]
Error in has.Cl(x) : object 'SPY' not found
> cumSPYrets <- cumprod(1 + SPYrets)
Error: object 'SPYrets' not found
> comparison <- cbind(cumPortfRets, cumSPYrets)
Error in cbind(cumPortfRets, cumSPYrets) :
  object 'cumPortfRets' not found
> colnames(comparison) <- c("strategy", "SPY")
Error in colnames(comparison) <- c("strategy", "SPY") :
  object 'comparison' not found
> chart.TimeSeries(comparison, legend.loc = "topleft",
+                  colors=c("green", "red"))
Error in inherits(x, "xts") : object 'comparison' not found
>
> # Calculate risk metrics
> SharpeRatio.annualized(portfRets)
Error in inherits(x, "xts") : object 'portfRets' not found
> Return.annualized(portfRets)
Error in is.vector(R) : object 'portfRets' not found
> maxDrawdown(portfRets)
Error in is.vector(R) : object 'portfRets' not found
>
> SharpeRatio.annualized(portfRets)
Error in inherits(x, "xts") : object 'portfRets' not found
> ## [1] 0.6424366
> Return.annualized(portfRets)
Error in is.vector(R) : object 'portfRets' not found
> ## [1] 0.1392711
> maxDrawdown(portfRets)
Error in is.vector(R) : object 'portfRets' not found
> ## [1] 0.278221
>
> windows()
> chart.Posn(portfolio.st, "XLB")
Error: could not find function "chart.Posn"
> tmp <- namedLag(Cl(XLB), k = nLag)
Show Traceback

Rerun with Debug
Error in has.Cl(x) : object 'XLB' not found > add_TA(tmp$namedLag, col = "blue", on = 1)
Error in add_TA(tmp$namedLag, col = "blue", on = 1) :
  object 'tmp' not found
>

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jr
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-26 16:59