• 请不要在回答技术问题时复制粘贴 AI 生成的内容
particlec
0.01D
V2EX  ›  程序员

记录从交易所爬取技术指标的过程

  •  
  •   particlec · May 24 · 2125 views

    最近在优化一个量化策略,需要用到交易所图表里的一些指标,比如 smc

    1 、官方 api

    一开始我想得很简单:我联系了该交易所的工作人员询问技术指标的 api 。

    他说交易指标是没有单独 api 的,建议我拉取 k 线自己计算

    2 、自己算

    于是我打算自己算,于是找到了 py 相关的库 smartmoneyconcepts ,但是我发现自己拉取 k 线算的和交易所有很大的出入,完全不一样,根本用不了啊

    2 、网站爬

    于是我决定还是从交易所网页上爬取

    我发现点击交易指标时候,是没有新的接口调用的,说明是前端渲染的

    实际就是 前端渲染的 canvas ,那就有很有可能获取到 js

    最终发现了 F12 → Sources → Page ,通过 search 搜索到了对应算法 78686-fa6ec3f3500b6300.js ,通过 gpt 把这个 6000 多行的算法转化成了 py ,以为这样就结束了,但是最坑的来了!

    3 、坑

    一样的算法但是计算指标算出来就是不一样!

    算出结果还是和交易所的不吻合,然后我打印发现交易所给的公开 k 线 api 和网页上实时的 api 相同时间数据不一样(有比如)!!!

    如果你用交易所公开的 api 永远算不出相同的指标!

    下面是细节,相同的时间戳 k 线值不一样~!

    公开 K 线接口返回的是: Open: 0.5316 High: 0.5354 Low : 0.5251 Close: 0.5274

    但网页图表接口返回的是:

    Open: 0.5311 High: 0.5349 Low : 0.5263 Close: 0.5316

    然后我把公开接口换成了内部接口,我改成模拟网页请求,requests.Session(),这样算法一样,数据一样总一样了吧

    但问题还没完全结束。

    因为 SMC 这种指标不是只看最后几根 K 线,它还会记住前面的结构。 比如前面哪里形成了高点、低点,哪里有 OB ,哪些 OB 已经失效,当前 K 线有没有临时结构。这些都是隐藏的规则

    所以我又发现一个细节:网页如果只加载 limit=1000 根 K 线,那 Python 也要按 1000 根去算。 如果我自己多拉 60 天、90 天,历史起点不一样,后面的结构也会跟网页不一样。

    后面又对齐了几个小隐藏的规则,比如:

    1. 网页用 limit=1000 ,Python 也用 1000 根
    2. OB 的 ATR 处理要和网页一致
    3. BOS / CHoCH 在网页上显示的是一条结构线,不是单根 K 线

    最后基本对齐了:

    K 线对齐 Order Block 对齐 BOS / CHoCH 基本对齐

    也就是说,最后 Python 算出来的 SMC ,已经和交易所图上的 SMC 完全一致了。哇!

    这次最大的收获是:

    以后这个交易所网页上的基本所有的技术指标,就算官方不给 API ,也可以用类似方法,还原出来。

    10 replies    2026-05-26 10:05:35 +08:00
    FarAhead
        1
    FarAhead  
       May 24
    技术指标肯定要自己算的,输入一样,输出也会一样的,https://ta-lib.org/functions/
    particlec
        2
    particlec  
    OP
       May 24
    @FarAhead 有很多隐藏规则和配置参数,单纯的函数不够的
    param
        3
    param  
       May 25
    如果不同交易所的技术指标都一样,就你自己算的不一样,说明你自己算得不对
    iorilu
        4
    iorilu  
       May 25
    啥交易所呢
    particlec
        5
    particlec  
    OP
       May 25
    @param 实际做起来很多坑很多

    k 线都不一样,内部实时接口和公开接口 k 线有略微差距,很多交易所都是

    指标的隐藏规则,有些指标需要历史数据,取多少根 k 线呢? 100k ? 1000K ?还是 2000k

    使用 last price 还是 mark price 价格呢?

    用 close 收盘价确认,不是 high/low 刺破价格呢?

    交易所为了数据看起来连贯,会把技术指标单根 K 线,合并成为结构线,多个指标合并处理

    你使用那个版本的参数呢?比如 smc 算法很多参数,该交易所的是 Swing Length = 50 、Internal Length = 5....


    @iorilu gate 交易所
    ykrank
        6
    ykrank  
       May 25
    感觉是你对指标的某个基础知识没了解导致的,我接了很多平台,还用 A 平台缓存的数据,直接上传到 B 平台上跑,也没发现在基础 K 线和指标上有任何不同。
    cc9910
        7
    cc9910  
       May 25
    一样的啊, 像 macd 那些都是标准公式, 你看交易所指标那不是有个些参数吗, 就是传参多少跟 k 线那样
    particlec
        8
    particlec  
    OP
       May 25
    @ykrank
    @cc9910
    我想和交易所图片显示的指标基本一模一样,所以需要一些调整,如果你对这个没有需求,有很多公开的库
    janda
        9
    janda  
       May 26
    直接用现有开源的方案可以实现吗: https://chengzuopeng.github.io/stock-sdk/
    lisxour
        10
    lisxour  
       May 26
    没有什么所谓隐藏规则,你指标一样 + 参数一样,结果就是一样,你估计都不知道指标的参数能直接点开看的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4645 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 56ms · UTC 10:02 · PVG 18:02 · LAX 03:02 · JFK 06:02
    ♥ Do have faith in what you're doing.