繁体   English   中英

使用与 tradingview 不同的 talib 和 pandas 进行 Python EMA 计算

[英]Python EMA calculation using talib and pandas ewn different from tradingview

我正在尝试使用 Talib 和 pandas 获取 EMA,但它们与 tradingview 完全不同。 我不知道出了什么问题。

我的代码是这样的:

import pandas as pd
import requests
import talib

pd.set_option('display.width', 300)
pd.set_option("display.max_rows", None, "display.max_columns", None)

binance = requests.get('https://api.binance.com/api/v3/klines?symbol=BTCUSDT&interval=1d&limit=200')
e = binance.json()
df = pd.DataFrame(e, columns=['timestamp', 'open', 'high', 'low','close','volume','Kline Close time','Quote asset volume','Number of trades','Taker buy base asset volume','Taker buy quote asset volume','ignore'])
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')

# EMA 20 and 50 and 100 using pandas ewn
df['EMA20'] = df['close'].ewm(span=20,min_periods=20,adjust=False,ignore_na=False).mean()
df['EMA50'] = df['close'].ewm(span=50,min_periods=50,adjust=False,ignore_na=False).mean()
df['EMA100'] = df['close'].ewm(span=100,min_periods=100,adjust=False,ignore_na=False).mean()

# EMA 20 and 50 and 100 using talib
df["EMA20_talib"] = talib.EMA(df.close, 20)
df["EMA50_talib"] = talib.EMA(df.close, 50)
df["EMA100_talib"] = talib.EMA(df.close, 100)
df = pd.DataFrame(df,columns=['timestamp', 'open', 'high', 'low','close','EMA20','EMA50','EMA100','EMA20_talib','EMA50_talib','EMA100_talib'])
print(df.tail(1))

结果:

     timestamp         EMA20         EMA50        EMA100   EMA20_talib   EMA50_talib  EMA100_talib
199 2022-12-23  16954.726361  17406.537793  18459.035371  16954.726365  17404.356357  18333.684938

Tradingview EMA(EMA20:红色,EMA50:粉红色,EMA100:黄色)

交易观点EMA

如果您查看df.head(25) ,您会发现 EMA(20) 的第一个值也不匹配。 这意味着 TA-Lib 的 EMA 计算第一个值的方式与 pandas 不同。 但是 TA-Lib 有 3 种兼容模式:Classic/Metastock/Tradestation。 很少有指示器真正使用它们。 其中之一是 EMA,它有 2 个初始值计算变体:经典和“其他”(例如 Metastock)。 详情可查看其代码: https ://github.com/TA-Lib/ta-lib/blob/master/src/ta_func/ta_EMA.c#L285
如果您尝试另一种兼容模式 - 值将与 pandas 匹配。
您只需要添加:
talib.set_compatibility(1)
在调用talib.EMA()之前。

您也可以在此之后使用talib.set_compatibility(0)切换回兼容性

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM