Как использовать функции MACD R пакетов?

Я учусь использовать R. Мне интересно получать биржевые данные и рассчитывать различные технические индикаторы на биржевых данных. Мой тестовый эталон — Google Finance. То есть я сверяю свои результаты с результатами GF.

Пытаясь реализовать какой-то анализ MACD, я заметил пару вещей. Вероятно, это мое неправильное толкование документации. Я испробовал множество вариантов и в некоторых случаях не могу согласиться с цифрами Google Finance.

library(quantmod) дает мне MACD(), который возвращает столбцы macd и signal.

library(fTrading) дает мне cdsTA() и cdoTA(), которые возвращают cdsTA и cdoTA соответственно.

Моя тестовая акция — IBM, и, надеюсь, эта ссылка откроет график с ценами, объемом, медленным стохастиком и MACD с гистограммой.

http://www.google.com//finance?chdnp=1&chdd=1&chds=1&chdv=1&chvs=Linear&chdeh=0&chfdeh=0&chdet=1298224745682&chddm=46920&chddi=86400&chls=CandleStick&q=NYSE:IBM&ntsp=0

Загрузка данных о ценах IBM в R и создание значений трех функций выше для значений 8, 17, 9 и для 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

Если вы обратитесь к приведенной выше финансовой диаграмме Google, столбцы cdsTA и macd идентичны и хорошо согласуются с цифрами EMA Google. Значение MACD() для macd al также довольно близко к значению GF. И поэтому я получаю

macd - сигнал = дивергенция.

Однако до cdoTA далеко. Что я делаю неправильно?


person Beast Of Bodmin    schedule 20.02.2011    source источник


Ответы (1)


Вы не делаете ничего плохого. Код 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
person Joshua Ulrich    schedule 24.02.2011
comment
Спасибо Джошуа. Это очень помогает. - person Beast Of Bodmin; 25.02.2011