首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用L2存储L2刻度数据

用L2存储L2刻度数据
EN

Stack Overflow用户
提问于 2020-07-19 12:45:32
回答 1查看 187关注 0票数 0

序言:

  • I使用L2滴答数据。出价/报价不一定在级别
  • 的数量上保持平衡,级别的数量可以从0到20不等。
  • 希望每次更新

H19时将整本书保存到磁盘上,我相信我希望使用numpy数组来执行脱机数据,理想情况下,它是写到磁盘上的每个x更新或计时器上。H 212F 213

如果我们假设一本示例书如下所示:

代码语言:javascript
复制
array([datetime.datetime(2017, 11, 6, 14, 57, 8, 532152),                       # book creation time
       array(['20171106-14:57:08.528', '20171106-14:57:08.428'], dtype='<U21'), # quote entry (bid)
       array([1.30699, 1.30698]),                                               # quote price (bid)
       array([100000., 250000.]),                                               # quote size (bid)
       array(['20171106-14:57:08.528'], dtype='<U21'),                          # quote entry (offer)
       array([1.30709]),                                                        # quote price (offer)
       array([100000.])],                                                       # quote size (offer)
       dtype=object)

Numpy不喜欢数组的锯齿状,虽然我很高兴(足够)使用np.pad将时间/价格/大小降到20倍,但我不想为图书的创建时间创建数组。

我能/应该以不同的方式去做吗?最后,我想加入一个交易列表,所以我想要一种列商店的方法。其他人怎么做到的?它们是否存储多行?还是多列?

编辑:

我想要做这样的事情:

代码语言:javascript
复制
with h5py.File("foo.h5", "w") as f:
    f.create_dataset(data=my_np_array)

然后,在我的hdf5 tickdata和交易数据之间执行一个asof连接。

EDIT2:

在KDB中,条目如下所示:

代码语言:javascript
复制
q)t:([]time:2017.11.06D14:57:08.528;sym:`EURUSD;bid_time:enlist 2017.11.06T14:57:08.528 20171106T14:57:08.428;bid_px:enlist 1.30699, 1.30698;bid_size:enlist 100000. 250000.;ask_time:enlist 2017.11.06T14:57:08.528;ask_px:enlist 1.30709;ask_size:enlist 100000.)
q)t
time                          sym    bid_time                                        bid_px          bid_size      ask_time                ask_px  ask_size
-----------------------------------------------------------------------------------------------------------------------------------------------------------
2017.11.06D14:57:08.528000000 EURUSD 2017.11.06T14:57:08.528 2017.11.06T14:57:08.428 1.30699 1.30698 100000 250000 2017.11.06T14:57:08.528 1.30709 100000  
q)first t
time    | 2017.11.06D14:57:08.528000000
sym     | `EURUSD
bid_time| 2017.11.06T14:57:08.528 2017.11.06T14:57:08.428
bid_px  | 1.30699 1.30698
bid_size| 100000 250000f
ask_time| 2017.11.06T14:57:08.528
ask_px  | 1.30709
ask_size| 100000f

EDIT3:

我是否应该放弃嵌套列的概念,并有120个列(20*(bid_times+bid_prices+bid_sizes+ask_times+ask_prices+ask_sizes)?似乎太过分了,而且很难处理.

EN

回答 1

Stack Overflow用户

发布于 2022-03-29 11:31:48

对于任何一个在2年后都会遇到这种情况的人来说,我最近重新研究了这段代码,并将h5py替换为pyarrow+parquet。

这意味着我可以创建一个带有嵌套列的模式,并轻松地将其读入熊猫DataFrame中:

代码语言:javascript
复制
    import pyarrow as pa

    schema = pa.schema([
        ("Time", pa.timestamp("ns")),
        ("Symbol", pa.string()),
        ("BidTimes", pa.list_(pa.timestamp("ns"))),
        ("BidPrices", pa.list_(pa.float64())),
        ("BidSizes", pa.list_(pa.float64())),
        ("BidProviders", pa.list_(pa.string())),
        ("AskTimes", pa.list_(pa.timestamp("ns"))),
        ("AskPrices", pa.list_(pa.float64())),
        ("AskSizes", pa.list_(pa.float64())),
        ("AskProviders", pa.list_(pa.string())),
    ])

在将数据流到磁盘方面,我使用pq.ParquetWriter.write_table跟踪打开的文件句柄(每个符号一个),这样我就可以追加到文件中,只在完成时关闭(从而写入元数据)。

而不是流吡箭头表,而是流常规Python字典,在达到给定大小(例如1024行)时创建一个Pandas DataFrame,然后将其传递给ParquetWriter编写。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62980473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档