我正在学习使用R.我有兴趣提取股票数据并计算股票数据的各种技术指标。我的测试基准是Google财经。也就是说,我用GF的结果检查我的结果。
在尝试实施某种MACD分析时,我注意到了一些事情。这些可能是我对文档的误解。我尝试了很多变化,在某些情况下我无法与Google财经的数据达成一致。
library(quantmod)
为我MACD()
提供了macd
和signal
列。
library(fTrading)
给了我cdsTA()
和cdoTA()
,它们分别返回cdsTA
和cdoTA
。
我的测试股票是IBM,希望这个链接能够提供一个包含价格,交易量,慢速随机指标和MACD的图表以及直方图。
将IBM的价格数据加载到R并为值8,17,9生成上述3个函数的值,并为MACD()
设置percent=FALSE
,我得到以下输出。
MACD(close, 8, 17, 9, maType="EMA", percent=FALSE)
cdsTA(close, lag1 = 8, lag2 = 17, lag3 = 9)
cdoTA(close, lag1 = 8, lag2 = 17, lag3 = 9)
date close macd signal cdsTA cdoTA
2011-02-07 164.17 3.187365 3.208984 3.208984 -0.7673435
2011-02-08 166.05 3.246812 3.216549 3.216549 -0.7996041
2011-02-09 164.65 3.052187 3.183677 3.183677 -1.0496306
2011-02-10 164.09 2.780047 3.102951 3.102951 -1.3332292
2011-02-11 163.85 2.496591 2.981679 2.981679 -1.5867962
2011-02-14 163.22 2.168977 2.819138 2.819138 -1.8408138
2011-02-15 162.84 1.846701 2.624651 2.624651 -2.0507546
2011-02-16 163.40 1.640518 2.427824 2.427824 -2.1262626
2011-02-17 164.24 1.550798 2.252419 2.252419 -2.0854783
2011-02-18 164.84 1.517145 2.105364 2.105364 -1.9968608
如果你参考上面的谷歌财务图表,cdsTA和macd列是相同的,并且与谷歌的EMA数据一致。 MACD()
对macd al的价值也非常接近GF的价值。所以我得到了
macd - signal = divergence。
然而,cdoTA已经过时了。我做错了什么?
答案 0 :(得分:3)
你没有做错任何事。 cdoTA
代码未将lag1
或lag2
传递给cdsTA
,因此它只使用默认值12和26。
> cdoTA
function (x, lag1 = 12, lag2 = 26, lag3 = 9)
{
cdo = macdTA(x, lag1 = lag1, lag2 = lag2) -
cdsTA(x, lag3 = lag3) # no lag1 or lag2, so...
if (is.timeSeries(x))
colnames(cdo) <- "CDO"
cdo
}
> args(cdsTA) # default arg values are used
function (x, lag1 = 12, lag2 = 26, lag3 = 9)
NULL
您可以定义自己的函数CDOTA
:
CDOTA <- function (x, lag1 = 12, lag2 = 26, lag3 = 9) {
cdo = macdTA(x, lag1 = lag1, lag2 = lag2) -
cdsTA(x, lag1 = lag1, lag2 = lag2, lag3 = lag3)
if (is.timeSeries(x))
colnames(cdo) <- "CDO"
cdo
}
或者只使用TTR::MACD
的结果自行减法。
require(quantmod)
getSymbols("IBM", source="google")
ibm <- merge(Cl(IBM), MACD(Cl(IBM), 8, 17, 9, "EMA", FALSE))
ibm$macdOsc <- ibm$macd - ibm$signal
tail(ibm)
# IBM.Close macd signal macdOsc
# 2011-02-15 162.84 1.8361263 2.643950 -0.8078238
# 2011-02-16 163.40 1.6248017 2.440120 -0.8153187
# 2011-02-17 164.24 1.5319154 2.258479 -0.7265640
# 2011-02-18 164.84 1.4965394 2.106091 -0.6095520
# 2011-02-22 161.95 1.1140192 1.907677 -0.7936578
# 2011-02-23 160.18 0.6253874 1.651219 -1.0258316