记录从交易所爬取技术指标的过程 - V2EX
请不要在回答技术问题时复制粘贴 AI 生成的内容
particlec
0.01

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

  •  
  •   particlec 1 day ago 1907 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  
       1 day ago
    技术指标肯定要自己算的,输入一样,输出也会一样的,https://ta-lib.org/functions/
    particlec
        2
    particlec  
    OP
       1 day ago
    @FarAhead 有很多隐藏规则和配置参数,单纯的函数不够的
    param
        3
    param  
       1 day ago
    如果不同交易所的技术指标都一样,就你自己算的不一样,说明你自己算得不对
    iorilu
        4
    iorilu  
       1 day ago
    啥交易所呢
    particlec
        5
    particlc  
    OP
       1 day ago
    @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  
       1 day ago
    感觉是你对指标的某个基础知识没了解导致的,我接了很多平台,还用 A 平台缓存的数据,直接上传到 B 平台上跑,也没发现在基础 K 线和指标上有任何不同。
    cc9910
        7
    cc9910  
       1 day ago
    一样的啊, 像 macd 那些都是标准公式, 你看交易所指标那不是有个些参数吗, 就是传参多少跟 k 线那样
    particlec
        8
    particlec  
    OP
       1 day ago
    @ykrank
    @cc9910
    我想和交易所图片显示的指标基本一模一样,所以需要一些调整,如果你对这个没有需求,有很多公开的库
    janda
        9
    janda  
       10h 24m ago
    直接用现有开源的方案可以实现吗: https://chengzuopeng.github.io/stock-sdk/
    lisxour
        10
    lisxour  
       9h 39m ago
    没有什么所谓隐藏规则,你指标一样 + 参数一样,结果就是一样,你估计都不知道指标的参数能直接点开看的
    About     Help     Advertise     Blog     API     FAQ     Solana     3285 Online &nbs; Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 68ms UTC 11:45 PVG 19:45 LAX 04:45 JFK 07:45
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86