V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ghostwind
V2EX  ›  程序员

[求问] 股票实时的周线和月线是怎么做的

  •  
  •   ghostwind · 277 天前 · 3109 次点击
    这是一个创建于 277 天前的主题,其中的信息可能已经有所发展或是发生改变。

    众所周知,交易所来的数据都是 tick 级别的数据,之后都需要合成自己的 1min,5min 的数据,但是在周线的合成上有点卡住了.主要是考虑到服务重启之后数据怎么处理.数据怎么落地 在设计这个系统的时候有点卡住了.想请教下大家都有没有类似的需求.. 简单来说就是要做一个实时的行情系统,包括分时,5 分钟,1 天..周,月这些维度的设计

    不知道怎么弄,想请教下大家,谢谢了

    23 条回复    2024-02-22 11:00:01 +08:00
    jones2000
        1
    jones2000  
       277 天前
    只算 1 分钟,5 分钟, 日线,就可以了,其它周期都可以通过这几个基础周期合并下就能算出来。行情服务器一般都是双路采集, 一路断了,还是有另外一路。 如果真的 2 路都断了,基本就是重大事故了,需要有人来背锅了。 交易所有提供回放当天数据接口, 回放补齐就可以了。
    phrack
        2
    phrack  
       277 天前 via iPhone
    挺巧我也在弄这些数据,个人用。

    所有的 bar 不都是从 tick 来的吗? 1 minute bar 就把这一分钟里面的 tick 全部取出来,算一下就有 ohlc 数据了呀。一周的不应该也是一样的吗?
    ghostwind
        3
    ghostwind  
    OP
       276 天前
    @jones2000 谢谢大佬回复, 想比如说在交易的时候,我需要实时推送某个品种月线数据,
    那这个时候是把所有的日线数据都读进来重新计算的么,这时候实时的周线月线又怎么处理呢?
    另外请教下这些数据一般存在哪里
    iyiluo
        4
    iyiluo  
       276 天前
    做过类似的,分钟数据合成日线。其实逻辑都一样,明白 k 线的生成规则就行,开、收、最高、最低,就四个值,做一下时间片分割,然后对每个时间片遍历一遍就出来了
    iyiluo
        5
    iyiluo  
       276 天前
    可以参考一下股票软件的设计,底层需要落地的交易数据有 tick ,1 分钟、5 分钟、日线,其他周期的 k 线图都是从这四种数据算出来的,周线和月线用日线数据遍历一遍就出来了
    crazyweeds
        6
    crazyweeds  
       276 天前
    数据这块确实麻烦,小弟不才,大概搞了一个月才搞定,只要服务起来就能最终一致,细节确实多。总之呢,服务一定是会重启的,所以设计之初我就考虑到了服务宕机、网络故障等逻辑。
    不过目前高可用还差一点,代理高可用了,但是行情节点还没有。
    Hariz
        7
    Hariz  
       276 天前
    @phrack 请问一下个人用数据从哪里来的,哪里买的吗?还是某个券商那里?
    Sawyerhou
        8
    Sawyerhou  
       276 天前
    @ghostwind 举例,以实时日线更新月线,初始化预计算上个交易日月线 OHLCV ,实时更新 O1=O0,H1=max(H0,P),L1=min(L0,P),C1=P,V1=V0+V ,其他字段、级别类似
    jones2000
        9
    jones2000  
       276 天前
    @ghostwind 推送一般只推动最新一个周期的, 启动的时候你只需要读取最新一个周期需要的数据, 然后新的数据过来,合并下就可以。 日线级的数据存关系型数据库,tick 级的存 Hadoop
    nealot
        10
    nealot  
       276 天前
    富途的 OpenAPI 其实挺慷慨的 (除了美股要付费)

    可以查询 8 年的分钟级 K 线 (以前好像是 2 年)

    普通投资者有了这些数据都不用去采集了
    phrack
        11
    phrack  
       276 天前 via iPhone
    @Hariz interactive broker 那里买的,不少券商应该都有行情数据
    huxianguang
        12
    huxianguang  
       276 天前
    @Hariz cXEldUZGMUExNTc4OTc2Mg==
    cloud107202
        13
    cloud107202  
       276 天前
    tick 先处理成 snapshot. snapshot 携带日内的累计性质数值,最关键的是成交量与成交额

    对于日级别以上的 K ,用 snapshot 触发最新一根周期 K 线的数值变更(最高、最低价、成交量、成交额),这里带一点日期逻辑,比如周 K 线里面,归属于当周就是处理归并到最近一根周 K 线,周一当天这种新的一周开始,就创建全新一根周 K.

    分钟级别的没弄过,粗看用 tick 直接搞搞就好
    declandragon
        14
    declandragon  
       276 天前
    以前看到别人的都是小单位的数据,使用 echarts 实现图表, 另外提供大单位的切换按钮,是需要这种效果吗?
    iorilu
        15
    iorilu  
       276 天前
    没必要吧, 很多软件可以直接取啊

    tushare
    akshare
    ghostwind
        16
    ghostwind  
    OP
       276 天前
    可能不是传统股票的
    @iorilu
    ghostwind
        17
    ghostwind  
    OP
       276 天前
    感谢回复...那如果针对月线的话,比如现在有 5000 只股票,等于我需要把当月所有的日线都查询下来 5000*22 天 10W 条数据都在启动的时候加载吧
    @jones2000
    ghostwind
        18
    ghostwind  
    OP
       276 天前
    @crazyweeds 这块是挺麻烦的.我也是一个人弄.......也没有参考的
    ghostwind
        19
    ghostwind  
    OP
       276 天前
    @declandragon 是类似的...但是如果切换到大单位,应该是服务端重算一遍的吧,不然本地的数据如果日线没有算全的话,不同客户端会不一致
    xsen
        20
    xsen  
       276 天前
    #13 楼的已经说的很清楚,
    对于大级别 k 线已经结束的,处理完之后当历史数据存储起来就可以
    有新的数据过来,只需要重新计算最新一根 k 线
    jones2000
        21
    jones2000  
       276 天前
    @ghostwind 对,可以开并行同时,按单个股票查,只要数据库能顶住,就可以。
    willem1993
        22
    willem1993  
       276 天前
    18 年做过期货的,常用的 K 线我都是用 tick 算好存到数据库的,自定义分钟的 K 线,用最大公约数的 K 线再计算的
    ghostwind
        23
    ghostwind  
    OP
       275 天前
    @willem1993 这里最大公约数的 K 线不知道我理解的对不对,,比如说 保存的是 1min 5min 1H 的 K 线,,这个时候如果我需要 3H 的 K 线 这个时候就是用 1min 5min 1H 和需要 3 H 的最大公约数,把 1H 的 K 线全部取出来,再进行计算返回是吗?那这样的话对于单个品种,比如一些主力合约,如果查询长周期 超过 5 年的数据... 5*250*4 ,差不多是 db 里面一次性查询 5000 条数据,这种情况下怎么保证快速返回呢
    @jones2000 真的感谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   990 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 20:12 · PVG 04:12 · LAX 12:12 · JFK 15:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.