MACD с Python Pandas на индексе 0 всегда равен 0

Я пытаюсь построить индикатор MACD, используя Python Pandas. Проблема, с которой я столкнулся, заключается в том, что я пытаюсь рассчитать короткие и длинные скользящие средние.

exp1 = close.y.ewm(span=12, adjust=False).mean()
exp2 = close.y.ewm(span=26, adjust=False).mean()

close — это мой фреймворк данных с двумя столбцами для цен закрытия индексов и акций. Я получаю биржевую TIME_SERIES_INTRADAY информацию из Alpha Vantage API.

Теперь по какой-то причине я всегда получаю один и тот же результат в первом индексе как для exp1, так и для exp2

exp1

печать серии exp1

exp2

введите здесь описание изображения

Как видите, индекс 0 в обоих рядах идентичен, а более поздние данные отличаются. Поэтому, когда я пытаюсь рассчитать MACD, последняя точка графика всегда равна 0.

macd = exp1 - exp2

введите здесь описание изображения

Я думал, что это может быть нормальным для MACD, но на каждом графике MACD, который я видел, последняя точка между MACD и одиночной линией не равна 0 (как видно на картинке из Yahoo Finance).

введите здесь описание изображения

Поэтому я не уверен, что я делаю неправильно.


person Kipras Bielinskas    schedule 05.06.2020    source источник
comment
Вопрос про MACD, или про поведение ewm в пандах?   -  person Roy2012    schedule 05.06.2020


Ответы (1)


То, что ты делаешь, прекрасно. Странное поведение, которое вы видите для первой точки данных, является результатом того, что ваш EWM предполагает бесконечную историю*, тогда как на практике у нас этого нет. В результате EWM для времени 0 (1743,67500 в вашем случае) является значением ряда в момент времени 0 (по сути, среднее значение X равно X). В результате EWM с диапазоном 26 для времени 0 идентичен EWM с диапазоном 12 для времени 0, а ваш MACD для времени 0 равен 0.

В контексте MACD вы (обычно) ищете пересечения между MACD и стоимостью акции (или инструмента). MACD и значение встретятся в момент времени 0, но это не пересечение, потому что до момента времени 0 ничего нет.

Простое решение состоит в том, чтобы построить график MACD, начиная с дня N (например, дня 15). То есть, если вас интересует MACD за период, начинающийся 1 июня, создайте фрейм данных, который рассчитывает MACD, начиная с 1 мая или 15 мая, но отображайте данные только за 1 июня и далее.

* Примечание. документация pandas об EWM говорится, что «... есть предположение, что ????0 - это не обычное значение, а скорее экспоненциально взвешенный момент бесконечного ряда до этого момента».

person Roy2012    schedule 05.06.2020
comment
У меня было ощущение, что что-то вроде этого будет проблемой. Но как мне это решить? Нужно ли как-то переупорядочивать индексы в порядке убывания, чтобы ewm корректно видел историю? - person Kipras Bielinskas; 05.06.2020
comment
Обновил пост. См. абзац, начинающийся с простого решения. - person Roy2012; 06.06.2020