我正在尝试找出在R中编写此公式的最有效方法。我可以使用循环来实现它。但这并不是最有效的。
效率比率指标的公式:
ER = Direction / Volatility
Direction = ABS (Close – Close[n])
Volatility = n ∑ (ABS(Close – Close[1]))
波动率是最近n次价格变动的绝对值之和(平仓–先前平仓)
n =回溯期,例如:n = 10
R代码:
library(quantmod)
getSymbols("SPY")
prices <- Ad(SPY)
ER <- function(prices, n=10)
{
direction <- abs((prices - lag(prices,n)))
volatility <-
efficiencyRatio <- direction/volatility
return(efficiencyRatio)
}
我正在寻找帮助来填充ER函数中的“波动性”变量。
谢谢。
我认为您可以如下计算波动率:
# silly example
y <- 1:10
volatility <- length(y) * sum(sapply(2:(length(y)),
function(i) abs(y[i]-y[i-1])))
您可以分解该函数,以sapply(2:10, function(i) abs(y[i]-y[i-1]))
计算出9 1s,这对于给定向量是有意义的。将这些总和乘以天数。
如果要将其扩展到大于n的向量,以获得移动平均值,可以使用
volatility <- function(y, n) {
sapply((n+1):length(y),
function(rollSpot) {
n * sum(sapply((rollSpot-(n-1)):rollSpot,
function(i) abs(y[i]-y[i-1])))
})
}
rollSpot变量对移动平均线进行索引:您正在回顾多少个周期。当前实施包括当前期间和前n-1个期间。如果要包括前n个句点,可以减少(rollSpot-(n-1)):rollSpot
到(rollSpot-n):(rollSpot-1)
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句