V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
marine2c
V2EX  ›  程序员

行情高频数据显示

  •  
  •   marine2c · 2020-11-12 09:03:15 +08:00 · 3555 次点击
    这是一个创建于 1508 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我现在用的是 zeromq 通过 socket 接收到的行情数据,因为行情数据更新太频繁,太快了肉眼也查看不到,需要把频率控制在 100 毫秒刷新页面一次,请问有什么好的设计么,就是如果两个数据之间间隔小于 100 毫秒就丢弃。

    25 条回复    2020-11-15 22:12:25 +08:00
    jones2000
        1
    jones2000  
       2020-11-12 10:10:32 +08:00
    收到到本地以后, 自己发快照数据, 如 100ms 发一次变动品种的快照数据。
    jones2000
        2
    jones2000  
       2020-11-12 10:12:16 +08:00   ❤️ 1
    另外高频数据一般不是用来展示的,浪费, 界面更不上数据变动的。 一般做量化交易,跑实时策略用的。
    marine2c
        3
    marine2c  
    OP
       2020-11-12 10:16:41 +08:00
    @jones2000 界面总得有实时行情显示吧,如果你说每 100ms 发一次不就变成定时任务了嘛。
    l00t
        4
    l00t  
       2020-11-12 12:35:42 +08:00
    100ms 刷一次不是你自己说的嘛。你都想 100ms 刷一次了你说到底是实时还是定时?
    marine2c
        5
    marine2c  
    OP
       2020-11-12 13:03:29 +08:00
    @l00t 我的意思是消息来驱动,如果两个消息到达之间的间隔小于 100ms 则把消息丢弃,当然也可能会更长则显示。
    kanezeng
        6
    kanezeng  
       2020-11-12 13:05:41 +08:00
    感觉需求没有描述得很清楚。
    如果是界面上只显示一个最新行情,那就每次接收到数据检查一下是否有变动,有变动再做后续处理比如更新显示。
    如果时要画曲线图,也是每次接收到数据检查一下是否有变动,有变动再增加一条变动记录。
    如果没变动就都丢弃呗
    AlohaV2
        7
    AlohaV2  
       2020-11-12 13:08:49 +08:00
    自己维护一个 per instrument order book / price book,存一下上次更新的时间,下次来行情的时候检查一下呗
    imn1
        8
    imn1  
       2020-11-12 13:40:03 +08:00
    这个其实是两个步骤,数据还是要及时的,不应降频,显示上控制频率就好了
    marine2c
        9
    marine2c  
    OP
       2020-11-12 13:46:22 +08:00
    @imn1 是的,数据是一直会接收的,关键是怎么显示降频,有什么好办法吗
    WispZhan
        10
    WispZhan  
       2020-11-12 13:52:02 +08:00
    ReactiveX,Rx 系列库
    SmiteChow
        11
    SmiteChow  
       2020-11-12 17:00:26 +08:00
    那要看你刻度单位,秒的话就按秒更新,以此类推
    angryfish
        12
    angryfish  
       2020-11-12 18:34:28 +08:00 via iPhone
    才用订阅模式。来一次就推一次,不要主动拉。然后,如果数值不变。不用推。
    Yoock
        13
    Yoock  
       2020-11-12 21:02:54 +08:00 via iPhone
    降维,算涨速和量比
    mimi888
        14
    mimi888  
       2020-11-12 21:17:53 +08:00 via Android
    楼主接美股的数据吗?
    BingoXuan
        15
    BingoXuan  
       2020-11-12 21:22:22 +08:00 via Android
    zmq poll 获取数据,写到缓存里面,时间到了就 publish 出去,页面 subscribe 就好了
    jones2000
        16
    jones2000  
       2020-11-12 22:54:18 +08:00
    @marine2c 你直接对照市面上主流的高频软件 UI 上面是怎么更新的不就可以了。 用网路工具看下,他的发包频率, 这些东西不是新出来的,5,6年前就有高频数据,都有成熟的解决方案的。
    pelloz
        17
    pelloz  
       2020-11-12 23:04:36 +08:00
    弄个实现 throttle 或 debounce 的 js 库,手动限制下就好
    mepwang
        18
    mepwang  
       2020-11-12 23:16:47 +08:00 via iPhone
    高频数据降低频率给人看的话,简单的抽取数据做显示会有遗漏,不如漏掉了这一秒中间的最高价 /最低价等,最好做成 bar 数据
    raycool
        19
    raycool  
       2020-11-13 01:17:47 +08:00
    数据都有时间戳,判断时间戳,100ms 内的直接丢弃不推送 UI 显示组件
    marine2c
        20
    marine2c  
    OP
       2020-11-13 07:48:33 +08:00 via iPhone
    @mimi888 港股
    marine2c
        21
    marine2c  
    OP
       2020-11-13 07:53:37 +08:00 via iPhone
    其实是这样的,我订阅后就必须通过 socket 不断拉数据,我写的是一个 while true 拉数据,不然推送那边会有积压的,至于显不显示是我需要处理的,就是显示的频率肯定要低于拉的频率的,请问各位大佬这样怎么设计。
    treblex
        22
    treblex  
       2020-11-13 13:19:16 +08:00
    之前看过 okex 的文档,他们的做法是在建立链接之后 发送一条消息,告诉服务器要订阅的内容和更新频率,不知道服务端好不好实现
    yuandong
        23
    yuandong  
       2020-11-13 14:30:53 +08:00
    用 Rx 组件可以对短时间内多次发生的事件限流,比如 RxJava 或者 Rx.Net 等, 以.Net 为例, 可以用 Observable.Throttle(TimeSpan.FromMilliseconds(100)).Subscribe 这种类似的写法实现。
    hurricane1260
        24
    hurricane1260  
       2020-11-13 14:49:25 +08:00
    看看股票交易终端的分时行情怎么做的呗
    mimi888
        25
    mimi888  
       2020-11-15 22:12:25 +08:00 via Android
    @marine2c 港股我也在做,港股现在的 api 基本都是用回调函数,如 sp native api 和富途 api,你这个我还没用过,有兴趣的话,可以私信你联系发式,我们交流一下。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1081 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:26 · PVG 02:26 · LAX 10:26 · JFK 13:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.