Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

OG-REQ-0001 服务端未收盘数据实时更新功能 #31

Open
zillionare opened this issue Jul 20, 2022 · 0 comments
Open

OG-REQ-0001 服务端未收盘数据实时更新功能 #31

zillionare opened this issue Jul 20, 2022 · 0 comments
Assignees
Labels

Comments

@zillionare
Copy link
Owner

zillionare commented Jul 20, 2022

在omicron<2.0.0.a35中,以月线为例,获取未收盘的数据需要:

  1. 从influxdb中取当月的周线
  2. 从influxdb中取当周的日线
  3. 从redis中取当天所有的分钟线,将其合成为日线
  4. 将2和3合成为未收盘的周线
  5. 将1和4合成为未收盘月线。
    上述过程在_get_day_level_bars中可以看到。
    显然,上述过程时比较耗时的。如果有一个监控条件,当股价击穿月线时买入,以分钟为单位进行检测,则每分钟就要重复一次上述计算。如果要同时监控上百支股票,可以想见,进程算力将几乎消耗殆尽,不再有能力做别的事。

提议中的feature将有以下功能:

  1. 未收盘数据使用hash保存,key为"bars:unclosed:{frame_type.value}", field key为证券代码。
  2. 每当omega获取到最新的分钟线并写入到redis之后,调用服务端update_unclosed函数。如果是分钟级的数据(比如5分钟),则在遇到09:36, 09:41的分钟线数据传来时,还要将bars:unclosed:5m中对应code的数据先写入到bars:5m:{code} hash中,其field key分别为 09:35, 09:40,...,再将unclosed_5m中对应的code的数据清空,接着执行以下逻辑。
  3. update_unclosed函数接受参数为:frame_type(str), min_frame(datetime)
  4. update_unclosed根据frame_type和frame,读取现有帧数据,并使用min_frame对应的分钟数据进行合成。合成逻辑如下:
    a. 如果frame对应的数据为空,则直接拷贝min_frame过去,但要修改时间为frame
    b. 否则,修改close为min_frame的close, high = max(frame_high, min_frame_high), low = min(frame_low, min_frame_low), volume = add(frame_volume, min_frame_volume), amount = add(frame_amount, min_frame_amount), open和factor保持不变。
  5. 当某个日线级别的周期结束后,从redis中清除其对应的unclosed数据。这个清除时间一般是每天执行calibration的时间。
  6. omega启动时,需要重建 bars:5m:{code}(其它分钟级类推)和bars:unclosed:{frame_type:value}的数据。重建过程可以简单地清空相关cache,再依次重建。这部分逻辑可以使用python来写。
@zillionare zillionare self-assigned this Jul 20, 2022
@zillionare zillionare changed the title OG-REQ-0001 服务端未收盘数据实时更新功能 []: # Language: markdown []: # Path: NewIssue.md OG-REQ-0001 服务端未收盘数据实时更新功能 Jul 20, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant