Python 熊猫';EMA与股票不匹配';艾玛?
我试图使用Python(带熊猫)计算英特尔(INTC)每日股票数据的20天指数移动平均值(EMA)。Pandas有很多方法可以做到这一点,我也尝试过stockstats,它在Pandas上运行,但它们不会返回与我从股票/金融网站获得的相同的EMA 我仔细检查了收盘价,它们是匹配的,但均线总是“错” 这是我正在使用的CSV: 它包含从2016年4月20日到2018年2月1日的英特尔股票(股票代码:INTC)的每日日期、月份名称、开盘、高点、低点、收盘、日平均值和成交量 当我看到像或这样的大型股票网站时,它们的数字与我的不匹配。他们彼此匹配,但我不匹配 例如Python 熊猫';EMA与股票不匹配';艾玛?,python,python-3.x,pandas,finance,stockquotes,Python,Python 3.x,Pandas,Finance,Stockquotes,我试图使用Python(带熊猫)计算英特尔(INTC)每日股票数据的20天指数移动平均值(EMA)。Pandas有很多方法可以做到这一点,我也尝试过stockstats,它在Pandas上运行,但它们不会返回与我从股票/金融网站获得的相同的EMA 我仔细检查了收盘价,它们是匹配的,但均线总是“错” 这是我正在使用的CSV: 它包含从2016年4月20日到2018年2月1日的英特尔股票(股票代码:INTC)的每日日期、月份名称、开盘、高点、低点、收盘、日平均值和成交量 当我看到像或这样的大型股票网
df2['Close'].ewm(span=20,min_periods=0,adjust=False,ignore_na=False).mean()
或者
或者
请给我2018年2月1日的均线指数,比如44.71美元、47.65美元、46.15美元等,而任何金融网站的实际20天均线指数为45.65美元。无论我在哪一天计算均线,我都得到了错误的数字。当我尝试5天均线时,这甚至是错误的
我已经阅读、观看并关注了有关该主题的教程,但它们的结果也与任何金融网站上已被接受/发布的EMA不符。制作教程和视频的人根本就不会在Panda计算完数字后互相核对。我需要我的号码来匹配
我怎样才能得出互联网上其他所有金融网站对EMAs的相同数据?我认为这与调整后的收盘价无关,因为我使用的是旧的/已结算的数据,我的收盘价和日期与它们相同。对数据框进行排序,使日期按递增顺序排列。 由于数据是按日期递减的,如果不先对日期进行排序,则
ewm
计算会以指数方式将最早的日期加权,而不是最晚的日期(应该如此)
屈服
ewm backward_ewm
Date
2018-01-26 45.370936 48.205638
2018-01-29 45.809895 48.008337
2018-01-30 46.093714 47.800794
2018-01-31 46.288599 47.696667
2018-02-01 46.418256 47.650000
这与2018-02-01的EWMA(20)为46.42的说法一致
我建议使用python计算技术指标。我发现它比熊猫带来的更准确,有更多的指标
使用TA计算20周期指数移动平均值,如下所示:
import pandas_ta as ta
data["EMA20"] = ta.ema(df2["Close"], length=20)
你试过ewma吗?@BUZZY不赞成使用ewm,但我试过了,没有更好的效果。你是个该死的巫师:)这很有魅力,非常感谢!我还在学熊猫(我相信你已经猜到了)。干杯
import pandas as pd
df = pd.read_csv('intc_data.txt', parse_dates=['Date'], index_col=['Date'])
df['backward_ewm'] = df['Close'].ewm(span=20,min_periods=0,adjust=False,ignore_na=False).mean()
df = df.sort_index()
df['ewm'] = df['Close'].ewm(span=20,min_periods=0,adjust=False,ignore_na=False).mean()
print(df[['ewm', 'backward_ewm']].tail())
ewm backward_ewm
Date
2018-01-26 45.370936 48.205638
2018-01-29 45.809895 48.008337
2018-01-30 46.093714 47.800794
2018-01-31 46.288599 47.696667
2018-02-01 46.418256 47.650000
import pandas_ta as ta
data["EMA20"] = ta.ema(df2["Close"], length=20)