从订单簿中获取蜡烛

问题描述 投票:0回答:2

我想根据订单创建 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

我试着用 pd.Grouper 做一些事情:

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

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

python pandas pandas-groupby quantitative-finance
2个回答
0
投票

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

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

创建一个新的 df,字段开高低收。

edit:我想我实际上记得遇到过同样的错误,如果我没记错的话,它被扔进了 agg,它与在执行 groupby 或 resample 时创建新列有关


0
投票

您可以使用 DataFrame 重采样功能,并传递蜡烛的时间帧和收盘蜡烛的基准时间

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 列的名称取决于您的数据,最后您可以根据需要删除任何非数字数据。

© www.soinside.com 2019 - 2024. All rights reserved.