我正在使用Joshua Ulrich实施的优秀R
软件包中的 SAR()
函数在 TTR
中对此进行测试。我不确定这是否是抛物线SAR的标准行为。如果是的话,我需要一些帮助来实施未来的盲人" SAR。
为了简单起见,我将使用短向量和整数值而不是实时序列数据。
L <- c(1:4, 5)
H <- c(2:5, 6)
ParSAR <- SAR(cbind(H, L))
cbind(L, H, ParSAR)
L H ParSAR
[1,] 1 2 1.000000
[2,] 2 3 1.000000
[3,] 3 4 1.080000
[4,] 4 5 1.255200
[5,] 5 6 1.554784
我只会在最后时间间隔更改一个值,其中 Low - High
范围现在为5 - 7,而不是5 - 6。 / p>
L <- c(1:4, 5)
H <- c(2:5, 7)
我们得到:
L H ParSAR
[1,] 1 2 0.5527864
[2,] 2 3 0.5817307
[3,] 3 4 0.6784614
[4,] 4 5 0.8777538
[5,] 5 7 1.2075335
预期的行为是抛物线SAR的所有历史都得到了显着改变吗?如果第1行上的1到4行的SAR值被第5行上的不同未来值修改,则会对先前行引入前瞻性偏差。
如果这是抛物线SAR的标准行为,我需要它进行回测,我将不得不为每一行重新计算它,总是屏蔽所有未来的数据(行)。
期望的结果是每行都有抛物线SAR值,因为我可以在特定时刻见证它,而不知道未来。
2016-06-18
user3666197的简化代码示例:
> SAR(cbind(c(2, 3, 4, 5, 6), c(1, 2, 3, 4, 5)), c(0.02, 0.2))
[1] 1.000000 1.000000 1.080000 1.255200 1.554784
> SAR(cbind(c(2, 3, 4, 5, 7), c(1, 2, 3, 4, 5)), c(0.02, 0.2))
[1] 0.5527864 0.5817307 0.6784614 0.8777538 1.2075335
答案 0 :(得分:1)
@ user3666197:
您的测试为两个简短示例提供了相同的结果,因为在这两种情况下都使用默认值initGap = 0.
。如上所述,R包装函数的情况并非如此:
# Gap for inital SAR
initGap <- sd(drop(coredata(HL[,1] - HL[,2])), na.rm=TRUE)
答案 1 :(得分:0)
轻微的code-review of Joshua ULRICH's pSAR implementation可能会在源代码中确认零前瞻性。
问题可能来自函数调用签名,但the R
-wrapper修复了这些问题。
#'@export
"SAR" <-
function(HL, accel=c(.02,.2)) {
# Parabolic Stop-and-Reverse (SAR)
# ----------------------------------------------
# HL = HL vector, matrix, or dataframe
# accel[1] = acceleration factor
# accel[2] = maximum acceleration factor
...
# Gap for inital SAR
initGap <- sd(drop(coredata(HL[,1] - HL[,2])), na.rm=TRUE)
# Call C routine
sar <- .Call("sar", HL[,1], HL[,2], accel, initGap, PACKAGE = "TTR")
reclass( sar, HL )
}
SAR()
实施使用已发布的 sar()
的调用界面:
SEXP sar ( SEXP hi, /* HIGH[]-s */ SEXP lo, /* LOW[]-s */ SEXP xl, /* [initial AF value, max AF value] */ SEXP ig /* initial GAP */ )
在任何for(){...}
扫描仪中都没有窥视未来(零预测)(所有扫描仪都只是回顾)。
测试两个给定数据集的输出:
|>>> sar( ( 2, 3, 4, 5, 6 ), ( 1, 2, 3, 4, 5 ), ( 0.02, 0.2 ) )
[1.0, 1, 1.08, 1.2552, 1.5547840000000002]
|
|>>> sar( ( 2, 3, 4, 5, 7 ), ( 1, 2, 3, 4, 5 ), ( 0.02, 0.2 ) )
[1.0, 1, 1.08, 1.2552, 1.5547840000000002]
在Joshua ULRICH实施的pSAR算法中,有零预测偷看。
Q.E.D.
强> 从一开始就注意到,
sar()
功能被证明是正确实施的pSAR技术指标。 R包装器是问题所在,因为它决定调用底层的,正确工作的函数sar()
的参数。 在一个案例中,呼叫签名加载了具有前瞻性偏见的参数,该函数不应归咎于此类行为,而是指责用户。 {{1} } 强>
Q.E.D.
答案 2 :(得分:0)
抛物线SAR的R实现具有前瞻性偏见。
initGap值是所有时间HL数据的标准偏差:
initGap <- sd(drop(coredata(HL[, 1] - HL[, 2])), na.rm = TRUE)
参考文献:https://github.com/joshuaulrich/TTR/issues/23
对我原始示例的巨大影响是由于数据样本短和使用的极值。