TTR:MACD дает другой результат, чем я получаю в Python и диаграмме

У меня есть следующие данные о ценах на акции:

2017-06-15 10:00:00  958.4334
2017-06-15 11:00:00  955.7800
2017-06-15 12:00:00  958.2800
2017-06-15 13:00:00  959.2200
2017-06-15 14:00:00  962.4900
2017-06-15 15:00:00  964.0000
2017-06-15 15:59:00  963.3500
2017-06-16 09:00:00  997.3500
2017-06-16 10:00:00  995.0000
2017-06-16 11:00:00  992.7600
2017-06-16 12:00:00  990.7200
2017-06-16 13:00:00  994.6800
2017-06-16 14:00:00  996.0500
2017-06-16 15:00:00  987.6100
2017-06-16 15:59:00  987.5000
2017-06-19 09:00:00  999.1700
2017-06-19 10:00:00 1001.2700
2017-06-19 11:00:00  995.5200
2017-06-19 12:00:00  994.3350
2017-06-19 13:00:00  995.2199
2017-06-19 14:00:00  990.9221
2017-06-19 15:00:00  995.1300
2017-06-19 15:59:00  994.3400
2017-06-20 09:00:00  995.5200
2017-06-20 10:00:00 1003.5100
2017-06-20 11:00:00  998.8129
2017-06-20 12:00:00  996.2800
2017-06-20 13:00:00  997.2100
2017-06-20 14:00:00  998.0000
2017-06-20 15:00:00  992.5800
2017-06-20 15:59:00  992.8000
2017-06-21 09:00:00  993.9500
2017-06-21 10:00:00  995.2700
2017-06-21 11:00:00  996.4000
2017-06-21 12:00:00  994.2800
2017-06-21 13:00:00  996.1000
2017-06-21 14:00:00  998.7450
2017-06-21 15:00:00 1001.7900
2017-06-21 15:59:00 1002.9800
2017-06-22 09:00:00 1001.4100
2017-06-22 10:00:00 1004.0700
2017-06-22 11:00:00 1003.1500
2017-06-22 12:00:00 1003.4800
2017-06-22 13:00:00 1003.1600
2017-06-22 14:00:00 1003.1800
2017-06-22 15:00:00 1001.3900
2017-06-22 15:59:00 1001.5600
2017-06-23 09:00:00  999.8699
2017-06-23 10:00:00 1001.5800
2017-06-23 11:00:00 1001.0700
2017-06-23 12:00:00 1002.9800
2017-06-23 13:00:00 1003.2400
2017-06-23 14:00:00 1002.4300
2017-06-23 15:00:00 1003.7400
2017-06-23 15:59:00 1003.0500
2017-06-26 09:00:00 1006.2000
2017-06-26 10:00:00  997.3500
2017-06-26 11:00:00  999.3300
2017-06-26 12:00:00  999.1000
2017-06-26 13:00:00  997.0600
2017-06-26 14:00:00  995.8336
2017-06-26 15:00:00  993.9900
2017-06-26 15:59:00  993.5500
2017-06-27 09:00:00  992.7550
2017-06-27 10:00:00  993.7600
2017-06-27 11:00:00  990.6700
2017-06-27 12:00:00  986.5500
2017-06-27 13:00:00  981.1099
2017-06-27 14:00:00  982.5499
2017-06-27 15:00:00  977.4100
2017-06-27 15:59:00  976.7800
2017-06-28 09:00:00  971.4600
2017-06-28 10:00:00  982.5200
2017-06-28 11:00:00  980.9100
2017-06-28 12:00:00  986.4372
2017-06-28 13:00:00  987.6710
2017-06-28 14:00:00  986.7977
2017-06-28 15:00:00  990.0300
2017-06-28 15:59:00  991.0000
2017-06-29 09:00:00  982.5200
2017-06-29 10:00:00  977.7710
2017-06-29 11:00:00  972.6600
2017-06-29 12:00:00  970.3100
2017-06-29 13:00:00  969.1600
2017-06-29 14:00:00  973.4720
2017-06-29 15:00:00  975.9100
2017-06-29 15:59:00  975.3100
2017-06-30 09:00:00  977.5800
2017-06-30 10:00:00  978.6400
2017-06-30 11:00:00  978.7299
2017-06-30 12:00:00  974.9700
2017-06-30 13:00:00  975.7700
2017-06-30 14:00:00  975.7000
2017-06-30 15:00:00  968.0000
2017-06-30 15:59:00  969.0000

Я пытался рассчитать MACD, используя TTR::MACD следующим образом (приведенный выше датафрейм называется amz.xts):

macd -> MACD(amz.xts, nFast = 20, nSlow = 40, nSig = 10, maType = 'EMA')

Результатом стал ряд десятичных чисел, которые в основном находятся в диапазоне от 0,0 до 1,5

Тогда как когда я использовал оболочку Python Talib чтобы сделать то же самое, результат был между 0,0 ~ 25,0, и подавляющее большинство было между 10,0 ~ 20,0, и это были также те же данные, которые были показаны в моем программном обеспечении для трейдинга.

код Python:

import talib as ta

# m is macd
# s is signal
# h is histogram
m,s,h = ta.MACD(data, fastperiod=20, slowperiod=40, signalperiod=10)

Я не сомневаюсь, что программное обеспечение для торговли было неверным, и, учитывая, что Python дал тот же результат, я бы хотел сказать, TTR::MACD делал что-то другое. Я также думаю, что результат от python и программного обеспечения для торговли имел смысл, потому что цена действительно высока. (выше 900 долларов за акцию).

Я делаю что-то не так или просто они используют другой алгоритм? (в чем я очень сомневаюсь.)

1 ответ

Решение

Я не проверял функцию Python, но TTR::MACD() определенно правильно. Может быть, это так percent=FALSE аргумент?

library(TTR)

xx <- rep(c(1, rep(0, 49)), 4)

fast <- 20
slow <- 40
sig <- 10

macd <- MACD(xx, fast, slow, sig, maType="EMA", percent=FALSE)

macd2 <- EMA(xx, fast) - EMA(xx, slow)
macd2 <- cbind(macd2, EMA(macd2, sig))

par(mar=c(2, 2, 1, 1))

matplot(macd[-1:-40, ], type="l", lty=1, lwd=1.5)
matlines(macd2[-1:-40, ], type="l", lty=3, lwd=3, col=c("green", "blue"))

Другие вопросы по тегам