- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图了解“获胜百分比”如何影响交易策略的返回。
我下载了标准普尔的价格并计算每日返回。然后,我随机选择这些返回的 x% 并说我正确预测了它的方向,因此返回为正。对于剩下的 1-x%,我说我错了,返回是负数。我重复这个过程 1000 次并收集年化几何返回。
我以 0.01 的增量间隔将 x 从 0.5 更改为 0.6。
这是我的代码:
library(quantmod)
library(multicore)
getSymbols("^GSPC", from = "1950-1-1")
ret <- ROC(GSPC)[-1,4]
set.seed(123)
winpct <- seq(0.5, 0.6, 0.01)
ret <- coredata(ret)
system.time(res <- simplify2array(mclapply(winpct, function(x) replicate(1000, drawsample(ret, x)))))
drawsample <- function(ret, winpct){
len = length(ret)
ret = abs(ret)
win = sample(1:len, round(winpct * len))
a = c(ret[win], -ret[-win])
return(prod(1 + a) ^ (252 / length(a)) - 1)
}
所用时间:
user system elapsed
18.904 0.842 5.580
我可以做进一步的优化来加快速度吗?
最佳答案
我做了以下两项调整:
1/使用 exp(sum(a))
而不是 prod(1+a)
。我认为您无论如何都想要这个,因为您已经使用 ROC(GSPC)[-1,6]
创建了一个日志返回系列。根据 rbenchmark
,这使我的速度提高了约 7%。
2/从c(-1,-1)
中采样得到ret
序列的长度,然后与ret序列相乘,得到有符号序列的返回。这让我又赚了 30%。
请注意,在我的代码中,我已将您的 a
重命名为 bin
。
drawsample2 <- function(ret, winpct){
len = length(ret)
win = sample(c(-1,1), len, replace=TRUE, prob = c((1-winpct), winpct))
ret <- abs(ret)
bin <- ret*win
return(exp(sum(bin))^(252/length(ret)) - 1)
}
针对您的 drawsample()
进行基准测试,我获得了约 37% 的加速。
bb <- benchmark(simplify2array(mclapply(winpct, function(x) replicate(1000, drawsample(ret, x)))),
simplify2array(mclapply(winpct, function(x) replicate(1000, drawsample2(ret, x)))),
columns =c('test', 'elapsed', 'relative'),
replications = 10,
order = 'elapsed')
在我的 MBP 上,以下是基准:
> bb
elapsed relative
2 17.254 1.000
1 27.734 1.607
关于r - 优化 R 代码 - S&P500 系列的抽样返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13909761/
我想从列表中抽取项目样本,但我想设置每个项目被包含的概率,而不是要抽取的项目总数(所以 random.sample( ) 不起作用)。我用下面的代码得到了我想要的效果(其中 p 是包含的概率,item
我正在使用 Google Analytics Reporting API,但即使指定日期范围内的 session 远少于 500K limit,我也会得到抽样结果。 .我一个月只有约 4K 次 ses
我是一名优秀的程序员,十分优秀!