Python 开盘、上盘、下盘、收盘5分钟的股票数据

Python 开盘、上盘、下盘、收盘5分钟的股票数据,python,pandas,dataframe,finance,stock,Python,Pandas,Dataframe,Finance,Stock,我有一个数据框,其中包含具有以下列的股票数据: time ticker price 0 2020-04-02 09:30:35 EV 33.860 1 2020-04-02 09:00:00 AMG 60.430 2 2020-04-02 09:30:35 AMG 60.750 3 2020-04-02 09:00:00 BLK 455.350 4 2020-04-02 09:30:35 BLK 451.514 ... ... ... ...

我有一个数据框,其中包含具有以下列的股票数据:

            time    ticker  price
0   2020-04-02 09:30:35 EV  33.860
1   2020-04-02 09:00:00 AMG 60.430
2   2020-04-02 09:30:35 AMG 60.750
3   2020-04-02 09:00:00 BLK 455.350
4   2020-04-02 09:30:35 BLK 451.514
... ... ... ...
502596  2020-04-02 13:00:56 TLT 166.450
502597  2020-04-02 13:00:56 VXX 47.150
502598  2020-04-02 13:00:56 TSLA 529.800
502599  2020-04-02 13:00:56 BIDU 103.500
502600  2020-04-02 13:00:56 ON  12.700
它的股票价格数据每20秒就有几百只股票。我已将时间列转换为日期时间格式

从这里开始,我需要将数据分成5分钟的间隔,然后绘制数据,我使用:

out = df.groupby("ticker")\
        .apply(lambda x: x.set_index("time")\
                          .resample("5T")\
                          .first()\
                          .reset_index())\
        .reset_index(drop=True)

dffinal = out.dropna(axis=0)

def plot_tick(data, ticker):
    ts = data[data["ticker"]==ticker].reset_index(drop=True)
    ts.plot(x="time", y="price",title=ticker,figsize=(20,20),kind='line')

plot_tick(dffinal, "A")
图表显示的很好,但问题是我需要每个股票每5分钟间隔的高、低、开盘和收盘价格。我需要这个来制作一个烛台图,一旦我有了高、低、开和闭的列,我就可以很容易地做这个

开盘价和收盘价分别为5分钟时段开始和结束时的价格。“高”和“低”列分别是区间内的最高价格和区间内的最低价格

所以我在寻找这样的结果:

         time          ticker   price        open close high low
0   2020-04-02 09:00:00 A   72.6700
6   2020-04-02 09:30:00 A   72.1400
7   2020-04-02 09:35:00 A   72.5400
8   2020-04-02 09:40:00 A   72.4000
9   2020-04-02 09:45:00 A   72.3338
... ... ... ...
38895   2020-04-02 12:40:00 ZUMZ    17.6000
38896   2020-04-02 12:45:00 ZUMZ    17.6300
38897   2020-04-02 12:50:00 ZUMZ    17.6000
38898   2020-04-02 12:55:00 ZUMZ    17.7400
38899   2020-04-02 13:00:00 ZUMZ    17.560
很明显,有开的,有关的,有高的,有低的

IIUC,在groupby中,您可以通过“ticker”完成,但也可以使用“time”,频率为5分钟。在agg方法中,可以使用“因为熊猫>0.25”,第一个表示打开,最后一个表示关闭,最大值表示高,最小值表示低

要使用plotly打印烛台,可以执行以下操作:

import plotly.figure_factory

def plot_tick(data, ticker):
    ts = data[data["ticker"]==ticker].reset_index(drop=True)
    fig = plotly.figure_factory.create_candlestick(ts.open, ts.high, ts.low, 
                                                   ts.close, dates=ts.time)
    fig.show()

plot_tick(df_f, 'ticker1')
IIUC,在groupby中,您可以通过“ticker”完成,但也可以使用频率为5分钟的“time”。在agg方法中,可以使用“因为熊猫>0.25”,第一个表示打开,最后一个表示关闭,最大值表示高,最小值表示低

要使用plotly打印烛台,可以执行以下操作:

import plotly.figure_factory

def plot_tick(data, ticker):
    ts = data[data["ticker"]==ticker].reset_index(drop=True)
    fig = plotly.figure_factory.create_candlestick(ts.open, ts.high, ts.low, 
                                                   ts.close, dates=ts.time)
    fig.show()

plot_tick(df_f, 'ticker1')

非常感谢,这为创建正确的数据框做了很多工作,但由于某些原因,烛台图被弄乱了。知道为什么吗?谢谢。@dergky不确定是否会这样做,我从来没有打印过烛台,但提供的打印代码并不是真正用于烛台的,它似乎是一个常规的线条打印,所以您是否使用任何特定的函数来打印烛台?@我正在尝试使用Plotly来做。。。我要试一下Matplotlib@dergky对于plotly,它似乎对我有效,请看我的编辑在Jupyter笔记本中尝试了这一点,结果更好,但仍然很有趣。。。你用的是什么IDE?它在Spyder中不起作用,我的Pycharm被弄乱了。谢谢你,这是为了创建正确的数据帧,但由于某种原因,烛台图表被弄乱了。知道为什么吗?谢谢。@dergky不确定是否会这样做,我从来没有打印过烛台,但提供的打印代码并不是真正用于烛台的,它似乎是一个常规的线条打印,所以您是否使用任何特定的函数来打印烛台?@我正在尝试使用Plotly来做。。。我要试一下Matplotlib@dergky对于plotly,它似乎对我有效,请看我的编辑在Jupyter笔记本中尝试了这一点,结果更好,但仍然很有趣。。。你用的是什么IDE?它在Spyder中不起作用,我的Pycharm也被弄乱了