我想根据订单创建 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"
})
但是我有一个错误:不支持嵌套重命名器
您可以创建一个新的 df,因为行数和列数(以及列本身)将不同。 Pandas 提供了烛台功能,您可以使用此代码段创建一个功能
ohlc_df = df['price'].resample('1D').ohlc()
创建一个新的 df,字段开高低收。
edit:我想我实际上记得遇到过同样的错误,如果我没记错的话,它被扔进了 agg,它与在执行 groupby 或 resample 时创建新列有关
您可以使用 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 列的名称取决于您的数据,最后您可以根据需要删除任何非数字数据。