При вычислениях с помощью pandas.dataframe.ewm этой проблемы нет. (загрузка одних и тех же близких данных)
Эта ошибка уменьшается по мере продвижения по шкале, поэтому я предполагаю, что формула такая: правильный, но что не так с расчетом инициализации EMA? Кто-нибудь знает об этом?
Выходное значение EMA, которое я рассчитал с помощью BackTrader.ind.ema, выглядит следующим образом:


и вывод ema4, который я рассчитал с помощью Pandas.dataframe.ewm, равен следующим образом:

Ниже класс, который я пишу backtrader
class BaseStrategy(bt.Strategy):
"""base strategy"""
_name = "base"
params = (("printlog", False),)
class EMaCrossStrategy(BaseStrategy):
params = (
("emaperiod", {"ema1": 13, "ema2": 30, "ema3": 60, "ema4": 120})
)
def __init__(self):
self.ema1 = bt.ind.EMA(self.dataclose, period=self.p.emaperiod["ema1"])
self.ema2 = bt.ind.EMA(self.dataclose,period=self.p.emaperiod["ema2"])
self.ema3 = bt.ind.EMA(self.dataclose,period=self.p.emaperiod["ema3"])
self.ema4 = bt.ind.EMA(self.dataclose,period=self.p.emaperiod["ema4"])
Ниже приведен код, который я пишу, используя pandas.dataframe.ewm:
import pandas as pd
def calculate_ema(day_count: int, close: pd.DataFrame):
"""
calculate ema
:param day_count:
:param close:
:return:
"""
result = close.ewm(span=day_count, adjust=False).mean()
result = result.iloc[day_count:]
return result.dropna(axis=0, how='any').round(2)
Подробнее здесь: https://stackoverflow.com/questions/792 ... rs-ema-and
Мобильная версия