pandas 从订单中获取蜡烛

r6l8ljro  于 2023-05-12  发布在  其他
关注(0)|答案(2)|浏览(86)

我想根据订单创建OHLC蜡烛。我有一个Pandas系列,以日期为指数,中间价为价值。

2020-08-04 18:06:40.207934746+00:00    3.9415
2020-08-04 18:06:40.453107131+00:00    3.9415
2020-08-04 18:06:41.009450726+00:00    3.9415
2020-08-04 18:06:41.206957872+00:00    3.9415
2020-08-04 18:06:41.534236063+00:00    3.9415
2020-08-04 18:06:42.207130934+00:00    3.9415
2020-08-04 18:06:42.764421770+00:00    3.9415
2020-08-04 18:06:43.202200290+00:00    3.9415
2020-08-04 18:06:43.451386494+00:00    3.9440
2020-08-04 18:06:43.962340203+00:00    3.9440

我试着和石斑鱼做点什么:

mid_price.groupby(pd.Grouper(freq=interval)).agg({
                                    "open":  "first",
                                    "high":  "max",
                                    "low":  "min",
                                    "close":  "last"
                                })

但我有一个错误:不支持嵌套重命名

z31licg0

z31licg01#

您可以创建一个新的df,因为行和列的数量(以及列本身)将不同。Pandas提供了一个烛台函数,您可以使用此片段创建一个

ohlc_df = df['price'].resample('1D').ohlc()

创建一个新的DF,字段打开高,低,关闭。

  • edit:我想我实际上记得遇到了同样的错误,如果我能正确地记住它是在agg中抛出的,并且它与在进行groupby或重新采样时创建新列有关 *
9nvpjoqh

9nvpjoqh2#

您可以使用DataFrame重采样函数,并传递蜡烛的time_frame和关闭蜡烛的基准时间

def candle_timeframe_converter(orders: pd.DataFrame, time_frame: str, base: str):
try:
    candles_dataframe = pd.DataFrame()
    candles_dataframe['High'] = orders['price'].resample(time_frame, base=base).max()
    candles_dataframe['Low'] = orders['price'].resample(time_frame, base=base).min()
    candles_dataframe['Open'] = orders['price'].resample(time_frame, base=base).first()
    candles_dataframe['Close'] = orders['price'].resample(time_frame, base=base).last()
    candles_dataframe['Timestamp'] = orders['timestamp'].resample(time_frame, base=base).first()
    return candles_dataframe.dropna()
except Exception as e:
    return e

注意DataFrame列的名称取决于你的数据,如果需要的话,最后你可以删除任何非数字数据。

相关问题