我尝试通过 ccxt 数据计算 MACD 指标值(MACD 线 - MACD 信号)。 我在下面写了代码。问题是我的结果与交易视图 MACD 指标不一样。我的错误在哪里? 如果有人可以的话请帮忙。谢谢
import ccxt
import pandas as pd
def calculate_ema(data, window):
return data.ewm(span=window, adjust=False).mean()
# Calculating MACD line & MACD Signal
def calculate_macd(df, short_window=12, long_window=26, signal_window=9):
# Calculating EMA 12 & EMA 26`enter code here`
short_ema = calculate_ema(df['close'], short_window)
long_ema = calculate_ema(df['close'], long_window)
# Calculating MACD line
macd_line = short_ema - long_ema
# calculating MACD signal line
signal_line = calculate_ema(macd_line, signal_window)
return macd_line, signal_line
# connect to exchane
exchange = ccxt.binance()
symbol = 'BTC/USDT'
timeframe = '15m'
limit = 26
# Fetch_ohlcv
ohlcv = exchange.fetch_ohlcv(symbol, timeframe, limit=limit)
df = pd.DataFrame(ohlcv, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
print(df)
print()
macd_line, signal_line = calculate_macd(df)
# printing result
print("MACD Line:")
print(macd_line.tail())
print("\nSignal Line:")
print(signal_line.tail())
指数移动平均线需要一些运行时间。我通常使用至少最长平滑长度的运行周期的经验法则。
对于 MACD,长期平均值为 26,信号计算为 9,因此结果应在 35 个周期后收敛于普遍接受的值。它有助于用合理的东西(例如第一期的最后价格)来设定初始值。
维基文章讨论了找到最短运行时间的正确数学方法。