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

从 efinance 到 TickFlow:斩获 GitHub 3.4k ⭐ 后,我又开发了免费、稳定、全面的股票、ETF 行情数据服务

  •  
  •   alex0618 · 11 小时 29 分钟前 · 502 次点击

    📌 太长不看


    前言

    2021 年,我发布了 efinance,一个专注从东方财富获取股票、ETF 、期货、基金等数据的 Python 库。至今累计获得 3.4k ⭐。开发难度不大,但它的火爆说明了量化研究者对高质量数据的需求非常大。

    当时接口没有严格限流,efinance 上手简单、数据齐全,受到广泛好评。可惜到 2025 年上半年,东方财富开始限制匿名接口调用,频繁访问会被阻断,需要验证或审核。通过后又可能被拉入“小黑屋”,反复循环。

    AI 的快速发展降低了量化研究门槛,参与人数激增,导致数据提供方带宽成本上升,限流在所难免。但限流并不能阻挡大家的热情,自此,efinance 仓库收到越来越多关于数据稳定性的问题反馈。可见,一个稳定且价格合理的数据源,已经成为量化研究者的刚需。


    TickFlow 的诞生

    为了解决这一痛点,我和团队启动了新项目 TickFlow,提供覆盖 A 股行情、K 线、财务数据的 API 。目标是:

    • 低延迟、高可用
    • 让开发者专注策略本身,而非数据抓取

    开发过程中,有几十位 GitHub 网友作为早期用户,他们见证了 TickFlow 从 0 到 1 的成长。解决他们的需求,也能覆盖大部分量化研究者的需求。

    定价与服务

    TickFlow 区分两类用户:

    1. 免费用户:只需要日 K 级别历史数据
    2. 高级用户:需要实时行情、分钟级 K 线及全市场覆盖

    免费用户无需注册和 API key ;高级用户需注册获取 API key ,以保障流量和权限管理。


    产品对比

    特性 TickFlow Tushare Akshare
    数据稳定性 ✅ 可靠 ✅ 可靠 ❌ 完全爬虫,易中断
    日 K 线 全量历史,免费层支持不复权、等差/等比复权,可批量获取 全量历史,免费层仅不复权 全量历史,复权依赖数据源
    分钟 K 线 近一年历史 + 当日实时 j 近十几年历史+高价订阅实时 K 线 仅近几天分钟级
    实时行情 全量 A 股、ETF 、指数 需付费且昂贵 ❌ 无可靠实时行情
    接入门槛 5 分钟上手,文档齐全,SDK + API 接入
    数据完整性 历史 K 线、财务、除权因子 免费版有限,高阶贵 数据缺失多,零散
    开发体验 免费套餐长期可用,按需升级 免费版受限,高阶贵 稳定性差,维护成本高

    TickFlow 的优势:低门槛、稳定、免费套餐可长期使用、高阶功能按需升级。


    快速体验

    TickFlow 提供官方 Python SDK,支持 A 股、ETF 、美股、港股、国内期货等。

    完整文档https://docs.tickflow.org

    安装

    # 安装完整版(支持 DataFrame 与进度条)
    pip install "tickflow[all]" --upgrade
    
    # 安装基础版
    pip install tickflow
    

    支持 Python 3.9+,推荐 3.10+。


    初始化客户端

    免费服务(无需注册)

    from tickflow import TickFlow
    
    tf = TickFlow.free()  # 免费服务
    
    # 获取日 K 线
    df = tf.klines.get("600000.SH", period="1d", count=100, as_dataframe=True)
    print(df.tail())
    
    # 获取标的信息
    instruments = tf.instruments.batch(symbols=["600000.SH", "000001.SZ"])
    print(instruments)
    

    特点

    • ✅ 无需注册
    • ✅ 提供历史日 K 线( 1d 、1w 、1M 、1Q 、1Y )
    • ✅ 标的信息、交易所、标的池查询
    • ❌ 不提供实时行情
    • ❌ 不提供分钟级 K 线

    完整服务(需注册 API key )

    1. 获取 API Key
      登录 tickflow.org,在控制台生成 API key 。

    2. 配置认证

    方式一:直接传入

    from tickflow import TickFlow
    
    tf = TickFlow(api_key="your-api-key")
    

    方式二:环境变量( Windows / Linux / Mac )

    # Linux / Mac
    export TICKFLOW_API_KEY="your-api-key"
    
    # Windows CMD
    set TICKFLOW_API_KEY=your-api-key
    
    from tickflow import TickFlow
    
    tf = TickFlow()  # 自动读取环境变量
    
    1. 发起第一个请求
    quotes = tf.quotes.get(symbols=["600000.SH", "000001.SZ"])
    for q in quotes:
        print(f"{q['symbol']}: {q['last_price']}")
    

    完整服务特点

    • ✅ 实时行情数据
    • ✅ 分钟级 K 线( 5m 、15m 、30m 、60m 、4h )
    • ✅ 日内分时数据
    • ✅ 高调用频率支持

    标的代码与支持市场

    统一格式:**代码.市场后缀**,示例:

    • 股票:600000.SH(浦发银行)、000001.SZ(平安银行)
    • ETF:510300.SH(沪深 300 ETF )
    • 指数:000001.SH(上证指数)
    • 期货:au2604.SHF(上期所黄金主力合约)
    后缀 市场 说明
    SH 上海证券交易所 沪市 A 股、ETF 、债券等
    SZ 深圳证券交易所 深市 A 股、创业板、ETF 等
    BJ 北京证券交易所 北交所股票
    SHF 上海期货交易所 上期所期货
    DCE 大连商品交易所 大商所期货
    ZCE 郑州商品交易所 郑商所期货
    CFX 中国金融期货交易所 股指/国债期货
    INE 上海国际能源交易中心 原油等期货
    GFE 广州期货交易所 广期所期货
    US 美股 美国证券市场
    HK 港股 香港联交所

    支持 A 股、国内期货,部分美股、港股接口已支持格式,但暂无数据。


    基础用法示例

    K 线

    # 单标的获取日 K 线
    klines = tf.klines.get("600000.SH", period="1d", count=10000, as_dataframe=True)
    print(klines.tail(5))
    
    # 批量获取多标的
    symbols = ["600000.SH", "000001.SZ", "600519.SH"]
    dfs = tf.klines.batch(symbols, period="1d", count=10000, as_dataframe=True, show_progress=True)
    print(list(dfs.keys()))
    

    日内分时 K 线

    # 单标的 1 分钟 K 线
    df = tf.klines.intraday("600000.SH", period="1m", as_dataframe=True)
    print(df.tail())
    
    # 批量
    dfs = tf.klines.intraday_batch(["600000.SH", "000001.SZ"], as_dataframe=True, show_progress=True)
    print(dfs["600000.SH"].tail())
    

    实时行情

    # 按标的查询
    quotes = tf.quotes.get(symbols=["600000.SH", "000001.SZ"], as_dataframe=True)
    
    # 按标的池查询
    quotes_a = tf.quotes.get(universes=["CN_Equity_A"], as_dataframe=True)
    quotes_etf = tf.quotes.get(universes=["CN_ETF"], as_dataframe=True)
    

    异步使用

    import asyncio
    from tickflow import AsyncTickFlow
    
    async def main():
        async with AsyncTickFlow(api_key="your-api-key") as tf:
            df = await tf.klines.get("600000.SH", as_dataframe=True)
            print(df.tail())
    
            tasks = [tf.klines.get(s, as_dataframe=True) for s in ["600000.SH", "000001.SZ"]]
            results = await asyncio.gather(*tasks)
    
    asyncio.run(main())
    

    结语

    TickFlow 提供低延迟、稳定、易用的行情数据服务,适合量化研究者快速上手:

    • 免费服务:历史日 K ,直接用,无需注册
    • 完整服务:实时行情、分钟级 K 线,高并发支持

    无论你是初学者还是专业量化团队,TickFlow 都能帮助你专注策略开发,而非数据抓取。

    官网:https://tickflow.org
    文档:https://docs.tickflow.org

    8 条回复    2026-03-14 19:01:29 +08:00
    somebodybbb
        1
    somebodybbb  
       11 小时 24 分钟前
    有 WS 订阅推送吗?
    alex0618
        2
    alex0618  
    OP
       11 小时 19 分钟前
    @somebodybbb 现在还没有。后续 1-2 个月会考虑支持。
    somebodybbb
        3
    somebodybbb  
       11 小时 16 分钟前
    @alex0618 需要港和 A 的实时 WS 推送,加油
    monmon
        4
    monmon  
       10 小时 15 分钟前
    赞啊大佬!
    azhangbing
        5
    azhangbing  
       10 小时 0 分钟前 via iPhone
    我来支持群主 最近也在做量化
    zenoor
        6
    zenoor  
       6 小时 13 分钟前 via iPhone
    免费版有最基础的 pe pb roe 指标吗
    kuhung
        7
    kuhung  
       5 小时 53 分钟前
    强的 支持越多越好
    alex0618
        8
    alex0618  
    OP
       5 小时 17 分钟前
    @zenoor 没有的。免费版分两种,一种有实时行情快照和实时日 K (需注册)。另一种只有历史日 K ,无需注册即可调用。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   1678 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 16:18 · PVG 00:18 · LAX 09:18 · JFK 12:18
    ♥ Do have faith in what you're doing.