全部
文章&策略
学习干货
问答
官方
用户头像sh_***3272xs
2026-11-09 发布
摘要:面向准备将研究原型交付为行情看板的金融产品负责人,本文以“20只美股、每10秒刷新”为例,拆解免费股票API的数据范围、更新频率、额度、订阅和使用条件。结合AKShare、Alpha Vantage、Twelve Data与TickDB的官方说明,以及一次TickDB MCP调用记录,提供可填写的选型判断表和可运行的用量计算代码,帮助团队判断免费方案能用到哪一步、交付前还需补什么。 假设你准备把一个个人研究脚本,改成可供同事或客户查看的股票行情看板:先放20只美股,每10秒刷新一次。 最初的进展通常很快:取得Key,调用接口,页面出现价格。真正准备交付时,问题才陆续出现:20只股票都能取到吗?刷新一小时会消耗多少额度?试用结束后还能运行吗?自己电脑上能看的数据,能不能放到客户页面上? 选择免费股票API,先把自己的任务写成使用条件,再逐项判断免费方案是否满足。核心是数据、用量、持续时间和使用范围。某一项尚未确认,就把它留在交付待办里,别让“已接通”替代整个选型结论。 一、先认清“免费”具体免了什么 搜索“免费股票数据API”,会同时看到开源库、免费额度和商业服务试用。它们解决的起点不同,不能只按“有没有费用”排成一张榜。 免费形式 你实际得到什么 使用前最该确认什么 开源工具 可安装、阅读或修改的软件,以及获取数据的实现方法 上游数据来源、适用用途和接口维护要求 长期免费额度 满足特定条件时可持续使用的一部分服务资源 每分钟、每日、每标的或每端点如何计量 限时试用 一段时间内体验指定功能或样本 到期时间、试用标的和正式需求有多大差距 限定用途的访问 允许在某种场景中使用数据 个人研究、内部计算、内部展示和客户展示分别如何约定 这些条件可能叠加在同一个方案上。一个免费层可以既限每日额度,也限数据范围和使用场景。 下面用四个熟悉的入口说明区别。表中为2026年11月9日核对的官方说明,调用记录另列在后文。 入口 官方说明中的关键条件 放进选型表时怎样理解 AKShare Python开源财经数据接口库;项目说明主要用于学术研究,并提示商业风险 适合先核对研究所需数据与维护方式;软件开源不自动解决上游数据的使用条件 Alpha Vantage 常规免费服务为每日25次API请求;经验证的开源或教育项目有单独安排;实时及15分钟延迟美股数据列为付费内容 先确认所需数据时效是否可用,再计算调用量 Twelve Data Basic列出每分钟8个API credits、每日800个;用途标注为内部非展示 同时检查端点权重、日额度和展示用途;不能只数HTTP请求 TickDB 官网Free列为7天试用、指定标的、5个同时订阅、1个WebSocket连接和每分钟30次API请求 分别核对期限、目标标的、请求与订阅限制;试用体验不替代正式交付验收 这里最容易漏掉的是:免费取得软件、免费发起请求、免费使用某类数据,是三个不同问题。后面还要加上第四个问题——这些数据准备给谁使用。 图1:按项目逐项检查四类条件。某一项通过,不代表其他项已经满足。 二、把需求写具体,才算得出免费额度够不够 “支持股票行情”太宽。对于开头的看板,先写下六个条件: 对象:确定的20只美股,列出完整代码,不写“美股若干”。 数据:主交易时段的报价;需要哪个时间字段,允许多大的数据年龄。 频率:应用每10秒请求一次;接口更新频率另行确认。 运行时间:先测试1小时,随后按实际每日运行时长重新计算。 使用方式:先个人测试,交付同事或客户前分别确认条件。 失败处理:未取得新数据时显示过期状态,不能只留下旧价格。 “每10秒刷新页面”描述的是应用动作。数据源如果只提供日终数据,页面刷新得再快,也不会多出盘中信息。同样,换成WebSocket只是换了接收方式,数据范围和使用条件仍然要核对。 1. HTTP请求、额度单位、同时订阅要分开算 为说明计量区别,先做一个明确的假设:一个接口允许每次查询20只股票;每只股票每轮消耗1个额度单位;一小时内从第0秒开始每10秒查询一次,到3600秒前结束,共360轮。暂不计初始化、重试和其他接口。 由此得到: 计算对象 算法 结果 HTTP请求 每分钟6轮,每轮1次 每分钟6次 标的额度 每分钟6轮 × 20只 × 每只1单位 每分钟120单位 一小时请求 6 × 60 360次 一小时额度 120 × 60 7,200单位 一次请求能装下20只股票,只减少了请求次数;按标的计量时,20只股票仍分别消耗额度。Twelve Data的官方计量示例就按端点权重与标的数计算credits。其他服务采用什么规则,仍要看对应端点,不能套用这张演算表。 如果改成推送,并假设每只股票只占一个订阅单位,20只股票需要20个同时订阅。一个WebSocket连接可以承载多少订阅,是另一项限制;连接数不能当成标的数。 图2:假设计量演算。轮询与推送是两种方案;图中的数字不是TickDB收费规则或套餐承诺。 2. 用这段Python先算自己的项目 保存为budget.py,使用Python 3.10或以上版本运行python3 budget.py。仅使用标准库,无需Key,也不会发出网络请求。把开头的参数换成目标接口的真实计量规则。 from math import ceil import json symbols = 20 interval_seconds = 10 duration_minutes = 60 symbols_per_request = 20 credits_per_symbol = 1 channels_per_symbol = 1 polls_per_minute = 60 / interval_seconds requests_per_poll = ceil(symbols / symbols_per_request) result = { "requests_per_minute": polls_per_minute * requests_per_poll, "requests_in_test": polls_per_minute * requests_per_poll * duration_minutes, "credits_per_minute": polls_per_minute * symbols * credits_per_symbol, "credits_in_test": polls_per_minute * symbols * credits_per_symbol * duration_minutes, "concurrent_subscriptions_if_streaming": symbols * channels_per_symbol, } print(json.dumps(result, indent=2)) 本例本地运行输出为6次请求/分钟、360次请求/小时、120额度单位/分钟、7,200额度单位/小时;推送方案的假设需求为20个同时订阅。 计算器用于固定参数的规划估算。历史数据补齐、初始化和重试需另留预算;例如看板持续更新时又下载历史K线,两项任务可能共同消耗账户额度。 三、额度够了,还要检查数据是否适合任务 个人研究和行情看板对“有数据”的要求不同。 做历史研究,重点是目标日期范围、周期、复权口径和样本:免费返回最近100条,并不能完成需要多年日线的研究;只覆盖当前仍交易的股票,也需要检查是否符合历史样本设计。 做行情看板,重点则是目标证券、需要的交易时段和数据时间。至少保留两种时间: 行情时间:返回的数据对应哪个时点。 接收时间:自己的程序什么时候收到响应。 程序现在收到响应,并不代表主报价就在此刻更新。主交易时段、盘前和盘后也可能分字段返回,应用要明确展示哪一种。判断数据过期时,应先结合所需交易时段与市场状态,而不是休市期间一律按“超过10秒”报故障。 验收时,用自己的完整标的清单逐个核对:是否返回目标证券、必要字段是否有值、日期范围是否足够、时间与口径是否匹配。目录里出现某只股票,只能先确认产品身份;账户能否查询相应数据,还需实际调用。 四、从个人研究到产品上线,真正变化的是使用方式 把脚本交给同事,不一定会增加上游请求。如果后端统一获取并缓存,多个页面可能共用同一份输入;是否增加请求取决于实现方式。 但接收和使用数据的人发生了变化。个人研究、团队内部计算、内部看板、客户展示、对外提供数据接口,应在需求表中分开写。Twelve Data Basic标注“内部非展示”,就不能直接被当作客户行情页面的使用依据。 上线前,把“我们要商用”改成可以回答的问题: 数据用于哪些市场和字段?谁会看到?是否对客户收费?是否允许导出?是否把原始数据继续提供给第三方?需要保存多久? 将这些具体用途交给服务商确认,并保存适用条款或书面答复。安装了开源库、付费取得Key,或者成功返回一次行情,都没有代替这一步。 一张可直接填写的判断表 以下为开头项目的规划样例,未完成的地方如实留空。它不是已上线项目的验收报告。 检查项 本项目要求 目前记录 下一步 标的范围 指定20只美股 目前只验证了AAPL样本 补齐20只清单,按目标账户核对 数据与时段 主交易时段报价,页面保留行情时间 取得一条主报价时间记录 在目标交易时段检查更新情况 轮询容量 每10秒一轮,测试1小时 假设批量20只时为360次HTTP请求 确认批量能力及账户实际计量规则 推送容量 若用推送,按所选频道计算订阅需求 尚未运行WebSocket 核对频道与同时订阅限制 试用期限 测试后计划持续运行 需记录账户到期日 确定到期后的安排,避免原型突然中断 使用范围 个人测试后交付内部或客户看板 对外展示条件待确认 提交具体用途,保存答复 运行验收 目标时段持续更新,失败后有过期提示 尚未完成连续测试 记录成功、失败、缺失与恢复情况 不需要把所有项目都变绿才开始做原型。但若“客户展示条件”未确认,就先保持个人或已获许可的测试范围;若20个目标标的没有检查完,就别把一个样本写成覆盖承诺。 五、用TickDB做一次小范围接入检查 在这个任务中,TickDB的作用是提供研究原型和行情应用所需的数据接入路径。官方股票页列明A股、美股、港股的REST查询和WebSocket推送;这里选择已经连接的MCP,先核对证券,再取得一次报价,留下可检查的返回记录。 实际操作顺序 在支持MCP的客户端中,按TickDB当前配置说明连接服务,使用自己的Key;密钥保存在本地配置中,不贴进提问。 调用get_available_symbols,参数为market="US"、type="stock"、limit=1000、offset=0。本次目录页中找到AAPL,名称为Apple Inc.、市场为US。 按报价工具的证券代码格式,调用get_ticker,参数为symbols="AAPL.US"、type="stock"。本次目录和报价使用的代码写法不同,需核对市场与工具规范。 保存原始返回,再从中提取证券、行情时间、字段是否存在,并另记本机接收时间。 已连接MCP的读者也可以直接向助手发出这条任务: 使用已连接的TickDB MCP,先在US股票目录中确认Apple, 再查询AAPL.US的股票报价。保存完整原始JSON, 另列symbol、timestamp及last_price是否有值,记录接收时间。 不要把一次查询写成连续测试;权限不足时保留实际错误。 2026年11月9日,本次MCP调用返回的摘要如下。摘要从原始返回提取;未展示行情价格数值。 entry: TickDB MCP / get_ticker API code: 0 symbol: AAPL.US timestamp_ms: 1793998800000 main_quote_time_utc: 2026-11-06T21:00:00Z retrieved_at_utc: 2026-11-09T04:39:46Z has_last_price: true 返回同时包含扩展时段报价对象,上面只提取主报价的timestamp。准备展示盘前、盘后或其他时段数据时,应按目标字段分别处理,不能把主报价时间改写成本次取数时间。 同轮另用Python测试REST入口时,网关返回HTTP 403,错误为Cloudflare 1010;该入口本次未通过。MCP结果与REST失败均保留在取证记录中。所用账户的套餐等级未核验,不能据此判断免费账户也能取得相同样本。 需要继续做同类验证,可从TickDB股票API页面确认当前能力、接入入口和使用条件。这里先完成一个样本的身份与返回检查;20只股票的连续更新、目标账户权限及看板用途,仍按上面的判断表逐项完成。 最后,先决定免费方案可以承担哪一段工作 如果任务是个人历史研究,且所需样本、数据口径和用途条件都满足,免费工具可能已经够用。 如果任务是验证页面、字段和交互,有限额度或限时试用也可以承担原型阶段。此时应记录到期日与尚未满足的条件,方便交接。 如果准备让团队或客户持续使用,就按正式运行时长、完整标的清单和真实用途重新验收。不要只看剩余请求次数:数据范围、持续时间、订阅容量和使用条件,任何一项都可能改变方案选择。 现在就把项目的标的数、刷新频率、每日运行时长和使用对象填进判断表,先解决其中最影响交付的一项未知。这样选出来的免费股票API,才有明确的适用范围。
浏览7
评论0
收藏0
用户头像sh_***174w0d
2026-11-09 发布
K线形态中的多空力量密码 在起伏不定、惊心动魄的股市战场上,K线绝不仅仅是一根根枯燥的价格记录线,而是买方(多头)与卖方(空头)真金白银激烈交锋的直观留痕。K线的实体长短、上下影线的穿刺伸展,本质上都是多空力量消长与资金心理博弈的直接体现。 对于广大投资者而言,读懂基础K线形态,是透视主力意图、规避高位砸盘风险、精准捕捉低位起飞时机的“基本功”。本文将为大家深度拆解六种最为核心的基础K线形态,带你穿透盘面迷雾,看清多空博弈的底层逻辑! 看懂K线形态,就能秒懂市场多空强弱。 多头主导与看涨/支撑形态 当买方资金汹涌入场占领高地,或者股价触底时下方展现出极其扎实的接盘托底力量,盘面上往往会亮起代表看涨或强支撑的信号。主要包括以下三种典型形态: **1.**光头大阳线:极强的多头启动信号 形态特征:没有上影线,实体饱满充沛。 多空逻辑:代表买方力量极强,以雷霆之势直接消化了盘中所有的抛压,空方无力阻拦。价格从开盘一路高歌猛进直至最高点收盘,上涨几乎没有任何阻力。 操作策略:若这根大阳线出现在连续回调或长期横盘之后,即为明确的行情启动信号,投资者应当择机上车,果断拥抱主升浪。 **2.**长下影线:低位强承接与见底信号 形态特征:股价下杀到低位,留下长长的下影线。 多空逻辑:表明股价盘中向低位下探时,下方有大量买盘疯狂接盘,直接托住价格,导致股价砸不下去。 操作策略:如果当天同步放出巨量,这基本属于明确的见底信号,后续大概率会迎来反弹,属于需要重点留意的极佳抄底观测点。 **3.**上影线短、下影线长:支撑扎实与持仓信号 形态特征:上影线短,下影线长。 多空逻辑:盘中虽然经历短暂下探,但很快被多头强势拉回,说明下方的承接力度很强,底部支撑扎实,股价稳定性高,多头稳稳掌控盘面节奏。 操作策略:属于典型的防守稳固形态,有持仓的拿稳,不用过度担心行情风险。 💡 分析师避坑指南:如何区分**“长下影线”与“上影线短、下影线长”****?** 很多新手容易混淆这两者。核心区别在于位置与量能:“长下影线”侧重于低位、伴随巨量的剧烈逆转,属于强烈的反转“见底信号”;而“上影线短、下影线长”则更侧重于盘中的日常稳固支撑,反映出股价整体稳定性极高,是坚守的“持仓信号”。 空头占优与警示/抛压形态 股市交易,安全第一。当盘面上方抛压巨大、空头肆虐占据主动时,冲高回落的K线形态往往蕴含着巨大的调整风险。投资者需重点防范以下两种形态: **1.**长上影线:高位巨量抛压与回调预警 形态特征:带有很长的上影线,冲高严重受阻。 多空逻辑:股价向上冲刺时,上方卖盘突然集中涌出,硬生生把价格砸了下来,说明上方存在巨大的抛压与阻力,多头反攻惨遭溃败。 操作策略: ⚠️ 风控预警:在此高位敏感位置千万别盲目追高!后市大概率要发生剧烈回调,最稳妥的做法是观望等待,把资金安全放在第一位。 **2.**上影线长、下影线短:上攻乏力与防套预警 形态特征:上影线长,下影线短。 多空逻辑:空方占据市场主动,股价一冲高就被卖盘砸回,上方全是抛压,多头力量大打折扣,显现出极度的上攻乏力。 操作策略: ⚠️ 风控预警:后续大概率会进入长时间的调整期,此时千万别硬冲进场接刀子,盲目进场很容易直接套在山顶! 💡 分析师避坑指南:如何区分**“长上影线”与“上影线长、下影线短”****?** “长上影线”往往代表高位资金集中出逃砸盘形成的冲高回落预警,重点在于防范随后的回调;而“上影线长、下影线短”则代表多头反抗失败、空头彻底主导的动能衰竭过程,预示着后续大概率将进入阴跌或震荡调整期。 多空平衡与变盘观望形态 当市场处于多空力量势均力敌、双方战术休战的微妙时刻,价格通常失去单边方向,进入敏感的观察期。 十字星:方向不明的休战信号 形态特征:实体极小几乎看不见,同时带有上下影线。 多空逻辑:表明多空双方博弈了一整天,双方不分胜负,力量旗鼓相当。在此阶段,行情方向极度不明朗,买卖双方都在等待新的消息面或大资金破局。 操作策略:此时最聪明的做法就是观望不动,绝不盲目赌方向,耐心地等方向明朗再操作。 总结与六大K线形态实战速查表 为了方便大家快速记忆与实战对照,我们将上述六种K线形态的核心要素提炼如下: 核心速查表 K线形态名称 形态结构特征 多空力量对比 实战操作策略 长上影线 长上影线 冲高时卖盘集中涌出砸下价格,上方压力巨大 切勿盲目追高,大概率回调,观望等待 长下影线 股价下杀低位,长下影线 下方大量买盘疯狂接盘托价,跌不下去 若同步放出巨量属见底信号,大概率反弹,重点留意 光头大阳线 无上影线,实体饱满 买方极强,消化抛压,上涨几乎无阻力 出现在连续回调或长期横盘后为行情启动信号,择机上车 上影线长、下影线短 上影线长,下影线短 空方占主动,冲高即砸回,上方全是抛压,上攻乏力 大概率进入调整,千万别硬冲,防止套在山顶 上影线短、下影线长 上影线短,下影线长 盘中短暂下探后被多头强势拉回,承接强,支撑扎实 股价稳定性高,有持仓的拿稳,不用过度担心 十字星 实体极小几乎看不见,带上下影线 多空博弈整天,双方不分胜负 行情方向不明,最聪明做法是观望不动,等方向明朗 结语: 股市交易绝非靠凭空感觉盲目猜测。看懂K线背后的每一个信号灯,本质上是在看清主力资金的真实动向与多空力量的转化。牢记形态、看清多空、顺势而为,唯有坚持理性严谨的分析与果断执行的交易纪律,才能在波谲云诡的市场中立于不败之地!
浏览371
评论0
收藏0
用户头像sh_*219t3e
2026-09-23 发布
亲测最好用的AI编写量化策略工具,可以让 AI 直接生成同花顺Supermind上可运行的策略代码,代码质量远高于直接使用 DeepSeek、GPT等平台。 😃Supermind AI工具入口:https://easyquant.ai/ 大家可以直接向AI描述策略,然后一键生成可运行的完整策略代码,也可以把它当做一个API 查询工具。
浏览856
评论26
收藏0

高股息 增加牛熊市加减仓和持股时间调整等。内含策略代码

用户头像想知道能涨停吗
2025-02-12 发布
社区分享来的策略,增加了部分功能,判断牛熊市场对默认持仓日期和每日开仓数进行调整。策略中有每个指标调整值回测率的记录,方便调试。 在2024年2月6日至2025年1月31日之间,回测收益率超过100%,最大到过120左右。 目前存在问题:1、 24年2月起大盘大跌,目前还没有增加对大盘暴跌不开仓并清仓的处理能力,后期会逐步完善。 2、只进行回测和模拟,没有进入实盘,具体实盘收益不清楚。 从社区取得收获分享给社区。策略提供参考,有错误或优化建议请提出,在此表示感谢。
浏览2332
评论12
收藏20
策略回测收益图
用户头像想知道能涨停吗
2026-11-08 发布
五福V7.5优化参数回测截图。
浏览30
评论0
收藏0
用户头像mx_****08999
2026-11-07 发布
新用户免费一周。 DeepTick 给的免费额度,足够你把「实时行情 + 策略告警 + 断线看门狗」整条链路跑通、把阈值调到能用。 全文代码可直接复制,改三个地方(AppKey、群地址、标的)就能跑自己的行情。 一周额度到期也不用心疼——重新注册一个账号就能接着试,具体做法写在第四节最后。 先看结果:这是程序实际跑起来的界面。1 分钟收盘价曲线叠 MA5 和 MA20,下方成交量柱,右上角绿点实时显示"WS 推送正常 / 延迟 / 每分钟条数"——数据一断,这个点就变黄。 说明:本方案完全由AI完成,不懂代码也可以,直接让AI熟悉这篇文章即可完成工具的调试, 推荐workbuddy。 -- 一、先说三个盯盘时最难受的时刻 第一个,是半夜那个你没看见的插针。 币是 7×24 的,A 股收盘了美股开盘,美股收盘了期货夜盘还在跑。人一天能真正集中注意力盯盘的时间,撑死四小时。剩下的二十小时里,行情照样在动,插针照样插。第二天早上看到那根长长的下影线,除了骂一句,没什么可做的。 第二个,是你看不出"速度"。 同一根 K 线,慢慢跌 3% 和五分钟内砸 3%,含义完全不同。但屏幕上只是一条线,你的眼睛分辨不出斜率。等你反应过来"这跌得有点快",往往已经走完了一半。 第三个,也是最危险的:数据断了你不知道。 很多自建盯盘脚本的通病是——进程还在,日志还在滚,但其实 WebSocket 半小时前就断了。你以为在看实时行情,其实在看半小时前的最后一口价格。没有告警的监控,比没有监控更危险,因为它给你一种虚假的安全感。 这三个问题,靠"更努力地盯"解决不了,只能靠机器。下面这套东西,就是干这个的。 二、为什么数据源选 DeepTick 做实时告警,卡脖子的从来不是策略逻辑,是数据。三条路摆在面前: 方案 真实成本 直接对接各家交易所 API 币所、券商、期货商三套协议,字段名全不一样,还得自己处理限频和断线,写一个月起步 爬行情网页 延迟几十秒,结构说改就改,随时挂 DeepTick 一个 Key、一套字段,REST + WebSocket 都有,接进来半天,新用户还免费一周 我用下来,它有几个点是真的省事: 1. 一个 Key 同时管 REST 和 WebSocket。 REST 放请求头 deeptoken,WebSocket 放握手头,同一个字段名。不用维护两套凭证,也不用研究 OAuth 流程。 2. 推送而不是轮询,这是"实时告警"的前提。 轮询 1 秒一次,你永远比市场慢 1 秒,而且请求数很快打满限额。WebSocket 是服务端主动推,实测单标的 45~66 条/分钟,延迟 0.5~3 秒(含上游推送节奏)。这个量级做分钟级策略判断完全够。 3. 市场代码是统一的。 不管币、美股、A 股还是贵金属,都是一套 代码.市场 的写法: ZECUSDT.CR 加密 · Zcash/USDT BTCUSDT.CR 加密 · 比特币 AAPL.US 美股 · 苹果 600519.SH A股 · 贵州茅台 XAUUSD.MT 贵金属 · 伦敦金 加一个标的,只是 YAML 里多两行,不是多写一个适配器。 4. 新用户有一周免费额度,够把整条链路验证完。 一周时间,足够你验证策略触发准不准、推送能不能到群、断线会不会自动恢复。先白跑一周,确认这套东西真的替你省了事,再决定要不要付费——不用一上来就充钱试错。 **5. 错误码给得清楚,排障不用猜。**​4002 是免费套餐的白名单限制,4004 是订阅被拒(没有该标的权限),8008 是 K 线周期参数不合法。看一眼就知道是账号权限问题还是代码问题,不用抓包。 一个实测的坑先提醒:权限是按账号开通的。我拿同一个 Key,ZECUSDT.CR 的订阅正常,BTCUSDT.CR 返回 4004。接新标的之前,先用一行 curl 验证一下,别急着写进配置——否则你会在日志里看到一条条无效重连。 三、这套工具由三块组成 ┌──────────────────────────────┐ │ DeepTick 行情源 │ │ REST /api/v1/quote │ │ WS wss://.../ws/v1 │ └──────────────┬───────────────┘ │ ┌──────────────▼───────────────┐ │ ① 行情接入层 app/feed.py │ │ · WS 订阅 + 25s 心跳 │ │ · 55s 静默主动重建 │ │ · 指数退避重连(1→60s) │ │ · REST 兜底补数 │ └──────────────┬───────────────┘ │ 每条报价 ┌──────────────▼───────────────┐ │ ② 策略引擎 strategy.py │ │ 价格/涨跌幅/振幅/量/失联 │ │ all · any · not 任意嵌套 │ │ 冷却 + 重新武装(去重) │ └──────────────┬───────────────┘ │ 命中 ┌──────────────▼───────────────┐ │ ③ 告警通道 notify.py │ │ 企业微信 / 钉钉 / 任意 Webhook│ └──────────────────────────────┘ ④ 看门狗 watchdog.py ← 不看行情,只看"数据链路本身"还活着吗 ⑤ 定时汇总 digest.py ← 每 10 分钟报个平安 + 当前价位 三层的职责分得很清楚,好处是换任何一层都不影响另外两层:换数据源只改 feed.py,换群只改 notify 的 webhook,改阈值只动 YAML。 而第 ④ 层是我认为最值得单独说的——看门狗不看行情,它看的是"行情还在不在"。连接断了、某个标的三分钟没跳、五分钟内重连五次、推送延迟超过 5 秒、整体消息量为 0,这五种情况它都会报警。它监控的是监控本身,这才是能让脚本放心无人值守跑通宵的关键。 四、四步跑起来 第 1 步:拿 Key(新用户免费一周) 去 DeepTick 注册,新账号自带 7 天免费额度,不用绑卡、不用先充钱。注册完在控制台创建 API Key,形如 dt_xxxxxxxxxxxxxxxx。 (注册地址:https://deeptick.cc/,用邀请链接注册的话,把它替换成你自己的。) 注册只要邮箱 + 密码 + 验证码,30 秒完成。 红框里就是你要复制的东西。顺手看一眼"到期时间"——免费额度到期后这串 Key 还有效,但请求会被上游拒绝,表现为日志里的 4002 / 4004。 一句话总结这一步:一周内零成本,把下面三步全部跑完。 第 2 步:装依赖 git clone <你的仓库地址> deeptick-monitor cd deeptick-monitor pip install -r requirements.txt requirements.txt 只有四个包,都是纯 Python: websockets>=12,<18 httpx>=0.27 PyYAML>=6.0 tzdata>=2024.1 第 3 步:填 .env(只需要改这里) # DeepTick 的 API Key(REST 与 WebSocket 共用) DEEPTICK_API_KEY=dt_你的Key填在这里 # 钉钉群机器人(群设置 → 智能群助手 → 添加机器人 → 自定义 → 加签或关键词) DINGTALK_WEBHOOK=https://oapi.dingtalk.com/robot/send?access_token=你的token DINGTALK_SECRET= # 企业微信群机器人(可选) WECOM_WEBHOOK= # 任意 Webhook,飞书/Server酱/自建网关都能套(可选) CUSTOM_WEBHOOK= 这三行就是"换个人也能用"的全部秘密:Key 和群地址都在这一个文件里,代码里不出现任何密钥。你在群里看到别人分享的配置,把 .env 换成自己的就能跑。 第 4 步:改配置,然后启动 # 先用模拟行情跑通链路(不需要 Key,60 秒内一定能看到一次告警) python -m app.main --simulate # 再切到真实行情 python -m app.main --simulate 这个开关很值得留着:它内置了一个随机游走的假行情源,每 60 秒制造一次急跌。先用它验证"告警能不能真的发到群里",再去接真实数据,这样出了问题你能立刻判断是策略配错了还是数据没来。 附:免费的这一周怎么花,到期之后怎么办 7 天听着不长,但按天排一下会发现刚好够: 时间 干什么 第 1 天 跑--simulate,把钉钉或企业微信打通,确认告警真能到手机 第 2~3 天 接真实标的,先只配 1~2 条策略,看触发频率是不是太吵 第 4~5 天 调阈值:window_sec、cooldown_sec 调到你不会想关群的程度 第 6~7 天 故意断一次网、关一次代理,验证看门狗和重连是不是真的会叫你 到期之后会怎样? 程序不会停,但上游会开始拒绝订阅和 REST 请求,日志里会出现 4002 / 4004 这类权限错误——这时候你的告警就失效了,只能看到看门狗在报"连接中断"。所以别等到断了才发现,提前一天决定: 重新注册一个账号,拿新的 7 天免费额度接着试。适合还在调策略、没决定要不要长期用的阶段——代码一行都不用改。 升一个小套餐。真打算 7×24 挂在云上,一个月的钱通常比漏掉一次插针便宜。 降级成 REST 轮询,拉长间隔凑合用。但这样就失去了实时性,这套工具的意义也就没了一大半,不太推荐。 换 Key 只要两步: # 1) 改 .env 里的这一行 DEEPTICK_API_KEY=dt_新账号的Key # 2) 重启进程(行情源配置不支持热加载,必须重启) python -m app.main 策略文件、群机器人地址、你调了两天的阈值,全都不用动——当初把密钥单独抽到 .env 里,就是为了这一刻。 五、关键配置:改这几行就够 行情接入 config/config.yaml source: adapter: "deeptick" # deeptick | simulator deeptick: base_url: "https://api.deeptick.cc" # REST 基址 ws_url: "wss://api.deeptick.cc/ws/v1" # WebSocket 地址 api_key: "${DEEPTICK_API_KEY}" # 从 .env 读,不写死在代码里 # 认证方式:REST 放请求头,WS 放握手头 auth_header: "deeptoken" quote_path: "/api/v1/quote" subscribe_type: "quote" # quote / tick / depth ping_sec: 25 # 官方建议 <= 30s,60s 读空闲会被断开 idle_timeout_sec: 55 # 客户端判定"连接已死"的静默阈值 subscribe_batch: 100 # 单次 subscribe 最多 100 个主题 reconnect: # 断线重连:指数退避 min_sec: 1 max_sec: 60 factor: 2 jitter: 0.3 # 随机抖动,避免多进程同时重连打爆上游 # REST 兜底:WS 断了,也要有最后一口气 rest_fallback: enabled: true check_sec: 5 stale_after_sec: 15 # 超过 15 秒没推送,就去 REST 补 per_minute_limit: 60 # 按你的套餐改:免费15 / BASE30 / PRO60 / PREMIUM120 盯哪些标的 symbols: - symbol: "ZECUSDT.CR" name: "Zcash" topic: "quote.CR.ZECUSDT" # 不写也行,会按 quote.{市场}.{代码} 自动推导 # 加标的就照这个格式往下写: # - symbol: "AAPL.US" # name: "苹果" # - symbol: "600519.SH" # name: "贵州茅台" 策略 config/strategies.yaml 策略是这个工具真正"属于你"的部分。三条我实际在用的: defaults: severity: "warning" # info | warning | critical cooldown_sec: 300 # 同一策略同一标的,两次告警的最小间隔 repeat_sec: 0 # >0:条件持续满足就按间隔重复提醒;0 = 只提醒一次 notify: [] # 空 = 用 config.yaml 的默认通道 silence_windows: [] # 免打扰,如 ["23:30-08:00"] strategies: # 1) 五分钟急跌:短线下杀,我最常用的一条 - id: zec_drop_5m name: "ZEC 5分钟急跌" enabled: true symbols: ["ZECUSDT.CR"] severity: "critical" when: type: "change_pct" window_sec: 300 op: "<=" value: -1.2 message: "5分钟跌幅 {change_pct:.2f}%,现价 {price:.2f},日内 {day_change_pct:+.2f}%" cooldown_sec: 300 notify: ["dingtalk"] # 2) 关键价位穿越:只在"穿过去的那一次"触发,不会一直重复响 - id: zec_break_1270 name: "ZEC 跌破 1270" enabled: true symbols: ["ZECUSDT.CR"] severity: "critical" when: type: "price" op: "cross_below" # cross_above / cross_below = 穿越才触发 value: 1270 message: "跌破 1270,现价 {price:.2f},日内 {day_change_pct:+.2f}%" cooldown_sec: 600 # 3) 组合条件:急跌 + 已经破位,两个同时满足才值得吵你 - id: zec_breakdown_combo name: "ZEC 放量破位" enabled: false symbols: ["ZECUSDT.CR"] severity: "critical" when: all: - type: "change_pct" window_sec: 300 op: "<=" value: -1.5 - type: "price" op: "<" value: 1270 message: "5分钟 {change_pct:.2f}%,已跌破 1270,现价 {price:.2f}" cooldown_sec: 600 能用的条件类型:price 最新价、change_pct 窗口涨跌幅、day_change_pct 当日涨跌、volatility_pct 窗口振幅、volume_delta 窗口成交量增量、stale_sec 距上次更新的秒数。 比较符支持 > >= < <= == !=,价格额外支持 cross_above / cross_below。组合用 all、any、not,可以任意嵌套——写策略基本等于写 YAML,不需要碰 Python。 告警发到哪 notify: default_channels: ["console"] channels: console: type: "console" # 只写日志,留痕用 dingtalk: type: "dingtalk" webhook: "${DINGTALK_WEBHOOK}" secret: "${DINGTALK_SECRET}" # 群机器人选"加签"时必填 keyword: "DeepTick" # 选"自定义关键词"时填同一个词 at_mobiles: [] at_all: false wecom: type: "wecom" webhook: "${WECOM_WEBHOOK}" msgtype: "text" # text | markdown custom: # 飞书、自建网关、Server酱都能套 type: "webhook" url: "${CUSTOM_WEBHOOK}" method: "POST" headers: Content-Type: "application/json" body_template: '{"text": "{message}", "symbol": "{symbol}", "severity": "{severity}"}' 一个细节值得说:keyword 那行不是摆设。钉钉机器人如果选了"自定义关键词"校验,消息里没有这个词就直接被拒,还不给你明显报错。所以代码里做了兜底——推送前检查正文,缺了关键词就自动补在最前面。这种小地方,才是能不能长期无人值守的差别。 钉钉机器人怎么建(4 步,全程免费) 四个坑提前说清楚,能省你半小时: 必须选「自定义」,不要选 GitHub、GitLab、Jira 那些现成模板——它们发的是固定格式,接不了自己的消息。 关键词必须和配置文件里一模一样。你填 DeepTick,config.yaml 里 keyword: "DeepTick" 就得一字不差(大小写敏感),否则钉钉静默拒收。 选了「加签」就不用填关键词,但要复制那串 SEC... 开头的 secret 填进 .env 的 DINGTALK_SECRET,代码会自动算时间戳签名。 一个群一个机器人。想同时推到两个群,就建两个机器人、再在 config.yaml 里加一个通道(复制 dingtalk 那段改个名字即可),策略里 notify: ["dingtalk", "dingtalk2"] 就能双推。 建好之后,最稳妥的验证方式不是等策略触发,而是主动发一条: # 先跑模拟行情,60 秒内必然有一次急跌告警,能到群就说明通道通了 python -m app.main --simulate --test-alert 定时汇总(可选,但很香) digest: enabled: true interval_sec: 600 # 每 10 分钟推一条,对齐到 :00 :10 :20 channels: ["dingtalk", "console"] silence_windows: ["22:00-08:00"] # 夜间免打扰,只掐汇总,策略告警照发 keyword: "DeepTick" 策略告警是"有事才响",汇总是"没事也报个平安"。半夜静音很关键——不然你会因为一堆无关紧要的定时消息,把整个群设成免打扰,结果真出事的那条也被淹了。 六、核心代码:它为什么能连着跑通宵 配置文件只是外壳,真正决定"能不能没人管"的是这三段。 1. WebSocket 会话:握手、订阅、心跳、静默判死 async def _ws_session(self, stop: asyncio.Event) -> None: headers = {self.auth_header: self.api_key} # 认证走握手头 deeptoken async with ws_connect( self.ws_url, additional_headers=headers, ping_interval=None, # 心跳走业务层的 JSON ping,不用协议层 open_timeout=10, close_timeout=5, max_size=8 * 1024 * 1024, ) as ws: try: first = await asyncio.wait_for(ws.recv(), timeout=10) except asyncio.TimeoutError as exc: raise ConnectionError("握手后 10 秒没收到 welcome") from exc self._handle_signal(first, initial=True) # welcome 里带 session 和心跳建议 self.connected = True self.connected_since = time.time() self.connect_events.append(self.connected_since) await self._subscribe(ws) # 批量订阅 quote.{市场}.{代码} ping_task = asyncio.create_task(self._ping_loop(ws), name="deeptick-ping") try: while not stop.is_set(): try: raw = await asyncio.wait_for(ws.recv(), timeout=self.idle_timeout) except asyncio.TimeoutError as exc: # 关键:连接"看着还在"但没数据,主动判死重建 raise ConnectionError( f"{self.idle_timeout:.0f} 秒没有收到任何数据,主动重建连接" ) from exc await self._handle_message(raw) finally: ping_task.cancel() await asyncio.gather(ping_task, return_exceptions=True) 这段里最要紧的是 idle_timeout_sec 那个 wait_for。TCP 连接经常是"半死"状态——socket 还在,但数据早就不来了。光靠协议层的心跳发现不了,必须自己数秒。 2. 断线重连:指数退避 + 抖动 delay = max(0.5, min(backoff, max_sec) * (1 + random.uniform(-jitter, jitter))) self.log.info("计划 %.1f 秒后重连 WebSocket", delay) try: await asyncio.wait_for(stop.wait(), timeout=delay) except asyncio.TimeoutError: pass backoff = min(backoff * factor, max_sec) 1 秒 → 2 → 4 → 8……封顶 60 秒,加 30% 抖动。抖动是必须的:如果你跑十个标的十个连接,上游挂了一下,没抖动的话它们会在同一毫秒一起重连,把服务端再打挂一次。 3. REST 兜底 WS 断了不意味着数据一定断。代码里有一条独立巡检:每 5 秒看一遍,哪个标的超过 15 秒没推送,就用 REST GET /api/v1/quote?symbols=XXX 单独补一次。频率受 per_minute_limit 控制,按套餐设。 这样 WebSocket 抖动的那几十秒里,你的策略依然在正常工作,只是数据源从"推"变成"拉"。 4. 看门狗:监控"监控本身" # 1) 连接状态:断开超过阈值才报 threshold = float(self.cfg.get("watchdog.disconnect.alert_after_sec", 30)) if self.feed.connected: self._evaluate("feed_down", False, recovery="行情连接已恢复") else: down_sec = now - (self.feed.disconnected_at or self._started) self._evaluate( "feed_down", down_sec >= threshold, severity="critical", title="行情连接中断", summary=f"行情连接已断开 {down_sec:.0f} 秒", ) # 2) 重连风暴:5 分钟内重连超过 5 次 = 连接不稳定 window = float(self.cfg.get("watchdog.reconnect.window_sec", 300)) max_count = int(self.cfg.get("watchdog.reconnect.max_count", 5)) recent = [ts for ts in self.feed.connect_events if now - ts <= window] self._evaluate( "reconnect_storm", len(recent) > max_count, severity="warning", title="行情连接不稳定", summary=f"{window:.0f} 秒内重连 {len(recent)} 次", ) 而且它做了防抖和恢复通知:连续 2 次异常才报警,连续 2 次正常才发"已恢复"。不然网络抖一下你能收到十几条消息,最后你把群静音了,这才是真正的失守。 还有个细节:watchdog.trading_windows 可以设交易时段,休市期间不检查"行情是否跳动",避免周末被"数据停摆"误报吵醒。 七、跑起来是什么样 钉钉群里收到的告警 【行情严重预警】ZEC 5分钟急跌 5分钟跌幅 -1.87%,现价 1262.33,日内 -5.12% 标的: ZECUSDT.CR Zcash 现价: 1262.33 来源: deeptick 时间: 2026-11-05 02:14:37 每 10 分钟一条的汇总 DeepTick 行情汇总 11:20 —————————————————— Zcash · ZECUSDT.CR 现价 1,332.91 | 日内 +1.77% 近10分钟 -0.42% | 10分钟量 +1234.50 日内 高 1,388.00 / 低 1,247.83 | 位置 61% —————————————————— 链路 deeptick 已连接 | 延迟 2.5s | 45 条/分 看门狗 正常 数据来源 deepTick,每 10 分钟自动汇总 终端里的走势(不想开网页的时候) python tools/trend.py # 打一次 python tools/trend.py -n 5 # 每 5 秒刷新 FORCE_COLOR=1 python tools/trend.py > snap.txt # 重定向到文件也保留红绿配色 一次输出给了四层信息:顶部是现价、日内涨跌、高低开和日内分位;中间是 1 分钟 / 15 分钟 / 1 小时 / 日线四条 sparkline,同一屏就能看出"短期在跌、中期还在涨"这种矛盾;再往下是最近 8 根 K 线明细;最后两行是程序按均线关系算出的走势判断(是描述,不是预测)。 实时曲线页 python tools/live_chart.py # 起本地服务,自动开浏览器 顶栏现价 + 日内涨跌 + 六格统计(高/低/开/昨收/量/额),主图是 1 分钟收盘价面积曲线叠 MA5、MA20,副图成交量柱,右上角一个状态灯实时显示延迟、每分钟条数、连接状态——就是本文开头那张图。周期按钮可切 1 分 / 5 分 / 15 分 / 1 小时 / 日线,切一次拉一次对应 K 线,服务端缓存 15 秒,不会撞上游限频。 注意这里 Key 是放在服务端读的,前端页面只拿已经算好的 JSON。不把 Key 写进 JS 里,是自建工具最基本的一条。 八、三个真实场景 场景 1:币圈 7×24。 配置里 interval_sec: 600 加 silence_windows: ["22:00-08:00"],白天每 10 分钟一条汇总,夜里只保留"5 分钟急跌 -1.5%"这类硬告警。睡觉的时候不会被平安消息吵醒,但真砸盘会响。 场景 2:A 股 / 美股日内。 watchdog.trading_windows: ["09:15-15:10", "21:30-04:00"],非交易时段不检查"数据是否跳动",避免中午休市和周末误报。策略主用 volatility_pct(窗口振幅)而不是 change_pct——A 股涨跌停板附近波动小但振幅大,振幅指标更敏感。 场景 3:期货夜盘。 夜盘最大的问题是熬夜。把关键价位设成 cross_above / cross_below,只在穿越那一刻响一次,配合 cooldown_sec: 600,一晚上最多吵你两次,但不会漏。剩下的交给早上看汇总。 九、实测数据 项目 实测值 单标的推送频率 45~66 条/分钟(WS) 端到端延迟 0.5~3 秒(含上游推送节奏) 断线重连 1s → 2s → 4s 指数退避,实测无消息丢失窗口 看门狗误报 连续 2 次异常才报,演练中零抖动刷屏 配置热加载 策略/通道改完保存,5 秒内生效,不用重启 静态内存占用 单标的采样上限 6000 点(约 50 分钟),自动滚动清理 十、适合谁,不适合谁 适合: 有明确价位判断、但没法一直盯屏的人 想把自己的规则固化成纪律,而不是盘中临时拍脑袋的人 会改 YAML 就行,不需要写代码 想给自己现有的数据源加一层告警,而不是换掉整套系统 不适合: 想要"自动下单"的——这不是交易机器人,它只负责看和喊。下单要自己做,或者另接一套。 想要"预测涨跌"的——它不认识行情,只认识你写的阈值。 完全不想配置的——虽然只要改三个地方,但终究得自己填 Key 和群地址。 十一、FAQ Q:非白名单标的订阅返回 4004 怎么办? 先用 REST 验证权限:curl -H "deeptoken: $KEY" "https://api.deeptick.cc/api/v1/quote?symbols=BTCUSDT.CR"。REST 通但 WS 拒,通常是套餐的订阅标的数限制,升配或在控制台开通对应市场。 Q:一周免费额度够试出效果吗? 够。1~3 个标的、十分钟级汇总加几条急跌告警,一天就能跑明白。唯一要立刻改的是 rest_fallback.per_minute_limit,改成 15(免费档的限频),否则断线兜底那几分钟会撞限频。 Q:额度到期了,我调好的策略会丢吗? 不会。策略全在本地 strategies.yaml 里,跟账号没关系。换个 Key 重启就接着跑,阈值、冷却、免打扰时段一个字都不用重配。 Q:能同时盯几个标的? 配置上不封顶,但单连接主题数上限 400(代码里超过会报错提示)。实际瓶颈是你的套餐和 REST 限频。十个标的以内,一个进程绰绰有余。 Q:服务器要什么配置? 一台 1 核 1G 的小机器就够,纯 Python 异步,CPU 基本闲着。跑在本地也行,只是关电脑就断了——真要 7×24,还是扔到云上。 Q:数据存多久? 默认只存内存里最近 50 分钟(6000 个采样点),进程重启即清空。要落库做回测,得自己接 ClickHouse / TimescaleDB,这套没做。 最后 工具的价值不在于写得多复杂,而在于你睡觉的时候它还在值班。 这套东西一共 12 个文件、约 3700 行 Python,配置文件是主体,代码只是把配置翻译成动作。你要做的只有三件事:填 Key、写标的、写阈值。剩下的断线、重连、去重、防抖、免打扰,都已经处理好了, 全部由deepSeek AI完成,如果需要改策略和方案可以直接本地修改运行测试,谁用谁知道; # 三步开始,全程零成本 pip install -r requirements.txt cp .env.example .env # 填入 DEEPTICK_API_KEY 和群机器人地址 python -m app.main --simulate # 先跑模拟,再换真实行情 本文代码全部可运行,已在 Windows + Python 3.13 实测通过;策略引擎带单元测试(python tests/test_engine.py)。
浏览56
评论0
收藏0

精华 长期有效,公开征集意见反馈。

用户头像量化官方小助理
2023-03-09 发布
请大家不要客气,任何意见建议可以在这里评论提出。 被采纳后我们将奖励1G研究环境内存 3个月。
浏览26450
评论198
收藏8
用户头像sh_***312kg3
2026-11-06 发布
适配聚宽社区Markdown编辑器,适合量化开发者阅读;包含服务商选型、Python完整示例、生产环境优化、踩坑排查;文末附带聚宽社区标准免责声明,直接复制粘贴即可发布。 随着内地与港股互联互通不断深化,做港股量化回测、行情分析工具、多市场策略开发,都需要稳定的港股实时行情数据源。 很多开发者接入过程经常遇到:接口延迟高、数据字段缺失、WebSocket频繁断线、token鉴权401、限流429等问题。 本文完整覆盖:服务商选型对比 → 环境与鉴权封装 → REST接口实战(实时报价/盘口深度/K线历史) → WebSocket长连接订阅 → 生产环境优化 → 报错排查 + FAQ,全部提供可运行Python代码,帮助量化开发者快速完成港股行情接口落地。 一、港股行情API服务商选型对比 从实时性、接入成本、易用性、数据完整性4个维度对比 DeepTick、Wind、Tushare三款主流数据源,方便量化开发者根据项目规模做取舍。 API 服务商 实时性 接入成本 易用性 核心优势 适用场景 DeepTick 毫秒级推送,延迟 ≤50ms 免费版支持基础行情,付费版性价比高 RESTful规范,请求头统一,返回格式简洁 港股全量覆盖,支持WebSocket实时订阅 个人量化开发者、中小型行情系统、多市场策略 Wind 金融终端API 延迟100‑300ms 年费数万元起,无免费版 需要客户端,参数复杂 数据维度丰富,附带研报、基本面 机构、专业投研团队 Tushare 港股接口 延迟1‑3秒,非实时 积分模式,高频调用付费 Python SDK友好,港股覆盖有限 A股数据完善,文档成熟 A股为主,港股低频历史回测 💡选型小结 个人量化、中小型项目,追求低延迟同时控制成本:优先 DeepTick; 机构投研,需要完整基本面、研报数据,预算充足:选择 Wind; 主要做A股,仅少量港股历史回测:可以选择 Tushare。 二、接入前置准备:环境依赖与统一请求封装 安装依赖库 pip install requests websockets pandas matplotlib 基础客户端封装(DeepTick) token从环境变量读取,禁止代码硬编码密钥,避免密钥泄露风险。鉴权头字段为 deeptoken。 import os import requests API_BASE = "[https://api.deeptick.cc](https://api.deeptick.cc)" API_TOKEN = os.getenv("DEEPTICK_API_TOKEN", "your_api_key") headers = { "accept": "application/json", "deeptoken": API_TOKEN, "content-type": "application/json; charset=utf-8" } class DeepTickClient: def __init__(self, base_url=API_BASE, custom_headers=None): self.base_url = base_url self.headers = headers.copy() if custom_headers: self.headers.update(custom_headers) def _get(self, path, params=None): """统一封装GET请求,捕获网络异常、超时""" try: resp = requests.get( f"{self.base_url}{path}", headers=self.headers, params=params, timeout=10 ) resp.raise_for_status() return resp.json() except requests.exceptions.RequestException as e: print(f"请求异常: {e}") return None 三、REST接口实战示例 3.1 获取港股实时报价 接口文档:https://deeptick.cc/docs/rest-quote 获取标的最新价、开盘、最高最低、成交量、成交额、涨跌幅、交易状态;一次仅支持单个标的查询。 import datetime class DeepTickClient(DeepTickClient): def get_quote(self, symbol="00700.HK"): """ GET /api/v1/quote :param symbol: 标的,格式 代码.市场,例 00700.HK(腾讯控股) :return: 报价字典 """ resp = self._get("/api/v1/quote", {"symbols": symbol}) if resp and resp.get("code") == 0 and resp.get("data"): return resp["data"][0] print(f"获取报价失败: {resp.get('msg') if resp else '未知错误'}") return None # 使用示例 client = DeepTickClient() quote = client.get_quote("00700.HK") if quote: print(f"标的代码: {quote['s']}") print(f"最新价: {quote['ld']} 前收: {quote.get('p')}") print(f"开/高/低: {quote.get('o')} / {quote.get('h')} / {quote.get('l')}") print(f"成交量: {quote.get('v')} 成交额: {quote.get('tu')}") print(f"涨跌额: {quote.get('ch')} 涨跌幅: {quote.get('chp')}") # ts 交易状态:0正常,1停牌,2退市,3熔断,不是时间戳 if quote.get("ts") is not None: status_map = ["正常", "停牌", "退市", "熔断"] print(f"交易状态: {status_map[quote['ts']]}") # t 毫秒时间戳 if quote.get("t"): trade_dt = datetime.datetime.fromtimestamp(quote["t"] / 1000) print(f"行情时间: {trade_dt}") 3.2 获取实时盘口深度数据 接口文档:https://deeptick.cc/docs/rest-orderbook 获取买卖档位挂单价格与挂单量;买盘由高到低,卖盘由低到高,适合做盘口因子、短线策略分析。 def get_orderbook(self, symbol="00700.HK"): """ GET /api/v1/orderbook :param symbol: 标的代码 00700.HK :return: dict{s,b,a,t} """ resp = self._get("/api/v1/orderbook", {"symbol": symbol}) if resp and resp.get("code") == 0 and resp.get("data") is not None: return resp["data"] print(f"获取盘口失败: {resp.get('msg') if resp else '未知错误'}") return None # 使用示例 book = client.get_orderbook("00700.HK") if book: print(f"标的代码: {book['s']}") print("=== 卖盘(价格由低到高)===") for ask in book["a"]: print(f"价格: {ask['p']} 挂单量: {ask['v']}") print("=== 买盘(价格由高到低)===") for bid in book["b"]: print(f"价格: {bid['p']} 挂单量: {bid['v']}") ask_volume = sum(float(ask["v"]) for ask in book["a"]) bid_volume = sum(float(bid["v"]) for bid in book["b"]) if ask_volume > 0: print(f"买卖盘挂单量比(买/卖): {bid_volume / ask_volume:.2%}") 3.3 获取历史K线数据(策略回测) 接口文档:https://deeptick.cc/docs/rest-candles 获取历史K线,支持多周期,返回数据转换为Pandas DataFrame,可直接计算技术指标、绘图回测。 import pandas as pd import matplotlib.pyplot as plt def get_candles(self, symbol="00700.HK", interval="5m", limit=50, et=None): """ GET /api/v1/candles :param interval: 1m /5m /15m /30m /60m /4h /1d /1w /1M :param limit: 1~500 :param et: 截止时间戳(毫秒) :return: k线列表 """ params = {"symbols": symbol, "interval": interval, "limit": limit} if et: params["et"] = et resp = self._get("/api/v1/candles", params) if resp and resp.get("code") == 0 and resp.get("data"): return resp["data"][0].get("d", []) print(f"获取K线失败: {resp.get('msg') if resp else '未知错误'}") return None # 使用示例 candles = client.get_candles("00700.HK", interval="5m", limit=50) if candles: df = pd.DataFrame(candles) df["t"] = pd.to_datetime(df["t"], unit="ms") df.set_index("t", inplace=True) for col in ["o", "h", "l", "c", "v"]: df[col] = pd.to_numeric(df[col]) print(df.head()) # 计算简单移动平均 df["sma_5"] = df["c"].rolling(window=5).mean() df["sma_20"] = df["c"].rolling(window=20).mean() plt.figure(figsize=(12, 6)) plt.plot(df.index, df["c"], label="收盘价") plt.plot(df.index, df["sma_5"], label="SMA5") plt.plot(df.index, df["sma_20"], label="SMA20") plt.title("腾讯控股 00700.HK 5分钟K线与均线") plt.legend() plt.show() 3.4 WebSocket实时行情推送 接口文档:https://deeptick.cc/docs/ws-subscribe 高频行情场景,优先WebSocket长连接替代轮询,减少HTTP请求,降低限流风险。 ⚠️注意:quote和depth属于不同type,不能放在同一条subscribe消息,需要分开发送,否则返回4001错误码。 import asyncio import json import os import websockets WS_URL = "wss://api.deeptick.cc/ws/v1" class DeepTickWSClient: def __init__(self, token=None, url=WS_URL): self.url = url self.headers = {"deeptoken": token or os.getenv("DEEPTICK_API_TOKEN", "your_api_key")} self.ws = None async def subscribe(self): # quote、depth分两次发送订阅 topics = ["quote.HK.00700", "depth.HK.00700"] for topic in topics: await self.ws.send(json.dumps({ "type": "subscribe", "topics": [topic], "request_id": f"sub-{topic}" })) async def handle(self, msg): if msg.get("type") == "ack": print(f"订阅回执|成功:{len(msg.get('accepted',[]))},拒绝:{msg.get('rejected')}") return print(f"【行情推送】topic:{msg.get('topic')}, data:{json.dumps(msg.get('data'), ensure_ascii=False)}") async def run(self): while True: try: async with websockets.connect(self.url, additional_headers=self.headers) as ws: self.ws = ws print("WebSocket连接建立成功") welcome = await ws.recv() print(f"welcome帧:{welcome[:80]}") await self.subscribe() async for raw in ws: await self.handle(json.loads(raw)) except Exception as e: print(f"连接异常,5s后自动重连: {e}") await asyncio.sleep(5) if __name__ == "__main__": asyncio.run(DeepTickWSClient().run()) 四、生产环境落地优化建议(量化实盘注意点) Token安全:禁止硬编码密钥,使用环境变量/配置中心管理,定期轮换密钥; 交易时段适配:港股交易时段 09:30‑12:00、13:00‑16:00,非交易时段行情静止,可以减少请求、降低配额消耗; 断线补偿逻辑:WebSocket重连成功后,调用K线接口拉取断线区间数据,填补推送缺口,避免回测/实盘策略缺失数据; 缓存策略:热门标的行情写入Redis,1秒内重复请求走缓存,减少API调用次数; 限流与重试:遇到429限流,使用指数退避,不要无限循环重试; 监控告警:监控接口错误码、响应延迟、WebSocket重连次数,401/403/429要接入告警; WebSocket心跳:长连接建议30‑60s发送心跳包,防止NAT超时断开。 五、常见报错排查 401 / 403 鉴权失败 deeptoken 过期,重新申请密钥; 请求头字段名称大小写必须完全匹配; 账号未开通接口权限,核对服务商后台。 429 Too Many Requests 调用超限 请求频率超过套餐QPS; 优化:循环轮询改为WebSocket订阅;使用批量接口; 必要升级套餐。 WebSocket频繁断开 网络NAT超时,增加心跳保活; 代码必须实现自动重连,重连后重新下发订阅topic; 注意:不同type不能合并到一条subscribe消息,否则返回4001拒绝订阅。 返回空数据、字段缺失 标的格式区分:REST查询用00700.HK,WebSocket topic格式quote.HK.00700; 标的停牌、退市会返回空;核对文档字段,不要直接复用其他接口字段映射。 六、常见问题 FAQ Q1:港股实时行情API有免费额度吗? DeepTick提供免费基础行情额度,高频盘口、长历史回溯需要付费;建议先用免费额度做功能验证,再升级套餐。 Q2:轮询和WebSocket该如何选择? 低频快照、少量查询可以轮询;实盘、短线策略、需要毫秒级行情,必须使用WebSocket长连接。 Q3:港股代码格式为什么有两种写法? REST接口:00700.HK(代码.市场);WebSocket Topic:quote.HK.00700(类型.市场.代码),格式写错直接无数据。 Q4:这套代码是否可以直接用于实盘? 示例代码仅演示接口调用,实盘还需要补充异常处理、数据校验、断线补偿、监控告警,不能直接照搬上线。 免责声明:本文所有代码仅作为技术学习演示,不构成任何投资建议。量化策略实盘存在风险,行情接口商用需要确认服务商授权许可,据此操作风险自担。
浏览66
评论0
收藏0
用户头像sh_***174w0d
2026-11-06 发布
股市迷茫时的“清醒剂” 在股市里,特别是账户资金只有几万到十几万的小散户,你是不是经常陷入这种死循环:股票一买就跌、一卖就涨,看着账户资金不断缩水,心里发慌、难受至极? 老实说,交易不需要花里胡哨的硬道理,执行力才是散户唯一的活路。 本文整理的这8句“保命口诀”,是我在20多年盘面厮杀、真金白银砸出来的实战总结。为了悟透这些规矩,我付出过惨痛的试错成本。这些口诀没有任何复杂晦涩的理论,它们就是最纯粹、最直接的保命铁律。 趋势看均线,资金看放量,执行看心态。 建议所有散户把这篇文章彻底吃透,开盘前诵读一遍,睡前复盘再读一遍,连续坚持半个月。只要你不再乱按键盘,严格按口诀执行,就能在这片吃人的市场里保住本金,迎来翻盘的曙光。 选股篇:锁定主力资金,只做强势标的 选股是交易的第一步。散户想要逆袭,必须摒弃“抄底弱势股”的错误思维,学会看懂主力资金的动向,只选择有主力资金深度介入的强势标的。 口诀一:只选二日内出现过涨停的股票 背后的底层逻辑非常简单:涨停板是真金白银堆出来的。单凭散户的零散资金根本封不住涨停板,凡是能封板的,必然有主力资金在场。这类标的被激活后,要么继续强势拉升,要么在短暂整理后再次起飞。反观那些长期阴跌、横盘不动的股票,全是主力早已抛弃的“僵尸股”,价格再便宜也绝对不要碰。 口诀二:选强势股看K线——记住“红肥绿瘦” 观察强势股的K线形态,要重点锁定四个字:红肥绿瘦。 上涨阶段:阳线大而饱满,代表买盘意愿极其强烈。 回调阶段:阴线短小且稀少,成交量明显萎缩。 典型形态:最标准的形态是3根大阳线搭配1到2****根小阴线。 【微观主力心理剖析】 这种“3大阳夹1~2小阴”的结构,代表主力资金在进行强力的建仓与拉升;随后的短小阴线,并非主力出货,而是低量的缩量洗盘(震出浮筹)。买盘强劲、洗盘温和,后续大概率会再次创出新高。 核心选股标准汇总: 只选2日内出现过涨停的股票:锁定主力资金介入的真金白银痕迹。 认准**“红肥绿瘦”K****线形态**:大阳拉升显主力决心,小阴缩量见洗盘意图。 坚决弃用无资金关注标的:长期阴跌与横盘整理的股票,绝不浪费时间与资金。 趋势篇:顺势而为,紧盯均线与成交量 在股市中,趋势永远排在第一位。顺应趋势操作,才能让利润奔跑;逆势扛单,终究只有粉身碎骨。 口诀三:涨幅大回调浅更容易大涨,跌幅大反弹无力还会下跌 这就是趋势的延续性规律。强势股之所以强,是因为主力控盘度高,上涨幅度大但回调极浅,说明下方买盘支撑坚硬,后市极易继续大涨;而弱势股跌幅巨大且反弹苍白无力,说明上方抛压重如泰山,后续必定还会继续下探寻底。 口诀四:5日均线与量能信号 均线防线:只要股价稳定站在5日均线上方,就属于强趋势形态,安心持有即可。特别是当股价创出200天新高时,往往意味着上方套牢盘被完全冲破,主升浪正式开启。 量能配合:放量上涨代表量价齐升,继续持有等待拉升;一旦量价关系出现异常,必须无条件离场。 💡 核心趋势与决策法则: 股价稳定站在5日均线上方安心持有;创200天新高意味着主升浪开启;放量上涨继续持股拉升;一旦出现**“放量滞涨”****(成交量巨量放大但股价涨不动),无条件立刻离场!** 实操篇:日内应对技巧与逆向思维 建立了选股与趋势思维后,在具体的日常交易中,散户还需要掌握一套严密的操作节奏与反人性操盘技巧。 日内实操细节指南: **1.**早盘冲高要警惕:股价如果高开7个点以上,且在上午10点前无法封住涨停板,就要果断减仓离场。 【微观主力心理剖析】 开盘前30分钟(10:00前)是主力资金表达当日拉升意图的核心窗口。若高开7%以上却无法在10点前封板,说明主力封板意愿不足,或上方抛压过重、跟风买盘匮乏。10点后往往容易引发获利盘吐压而大幅跳水。 2.**早盘大跌酌情观察:早盘开盘若遇到大幅下跌,切忌恐慌割肉,应进行早盘大跌酌情观察****/**检查。观察股价回踩关键均线(如5日均线)时能否获得支撑并站稳;若能稳稳站稳,反而是博弈低吸的绝佳机会。 **3.**严格交易节奏:时刻谨记“不冲高不卖,不跳水不买,趋势不明朗坚决不交易”。散户最大死穴就是“管不住手”,即使在横盘震荡期也总想频繁进场。请记住:宁可空仓观望,也绝不要瞎折腾。 **4.**运用反向思维:坚决贯彻“买绿不买红,卖红不卖绿”。A股里能够稳定赚钱的资金,全部都是利用散户“追涨杀跌”的从众心理进行反向操盘。绝不要看见红盘就头脑发热追高,一遇到绿盘跌势就吓得慌忙割肉。 风控篇:学会空仓,掌握最高级的防御 炒股炒到最后,炒的就是心态与纪律。散户最致命的死穴就是永远满仓。市场行情不好时,满仓只会让你乱了阵脚,彻底丧失主动权,被主力牵着鼻子走。 学会空仓,是股市里最高级的防御手段。在交易中,一旦触发风控信号,必须像机械一样无条件执行止损。 ⚠️ 警告:风控三大离场信号(只要出现以下任意一个信号,必须马上清仓空仓!): 1.5****日均线拐头向下 2.K****线跌到均线下方 3.实体阴线断板且无法修复 【心性修炼:空仓才是最高级的防御】 **“别人恐慌我贪婪”**的前提,是你手里握着充足的现金。 当市场触发上述三大离场信号时,必须果断切断幻想,立刻离场空仓。保持空仓才能让你站在局外保持清醒,等待市场企稳、风险释放完毕后,再以胜利者的姿态进场收割。 总结:复盘与行动指南 炒股从来不是拼运气,而是拼纪律与执行力。这8句口诀看似精炼,却包含了选股、看势、日内应对与风险控制的完整实战闭环。 8句炒股口诀速记卡片: **1.**选股标的:只选二日内出现过涨停的股票。 **2.**形态辨识:选强势股看K线,记住“红肥绿瘦”。 **3.**趋势法则:涨幅大回调浅更容易大涨,跌幅大反弹无力还会下跌。 **4.**均线量能:5日均线上方安心持有,200天新高开启主升浪,放量滞涨立刻离场。 **5.**早盘应对:早盘大跌酌情观察,高开7个点以上10点前封不住板果断减仓,回踩均线站稳博弈低吸。 **6.**交易节奏:不冲高不卖,不跳水不买,趋势不明朗坚决不交易。 **7.**逆向思维:买绿不买红,卖红不卖绿。 **8.**空仓风控:学会空仓,三大信号出现其一立刻清仓离场。
浏览176
评论0
收藏1
用户头像9点半量化
2026-11-06 发布
巧记炒股口诀,看清大盘进退信号 在股市实战中,面对瞬息万变的盘面走势,熟记经典技术形态口诀能够帮助股民快速识别买卖时机与风险信号。通过将复杂的K线组合与趋势走势提炼为简洁易记的口诀,投资者可以在关键时刻克服犹豫与恐慌,做出更为精准的决策。本文将基于6句核心技术口诀,为您系统梳理看涨买入、加仓跟进以及撤退离场的具体实战策略,助您看清大盘进退信号,稳健把握盈利机会。 看涨与加仓口诀:果断出击的四大进场信号 仙人指路与喜上眉梢:看准买入与出招时机 **●**仙人指路,果断买入:形态上表现为股价在上升途中或底部起涨阶段,出现一根带长上影线的K线(长上影线即主力向上试盘或洗盘的“仙人手指”)。这表明主力正在测试上方抛压,后市向上突破概率极大,投资者应看准时机,果断买入。 **●**喜上眉梢,大胆出招:形态上表现为股价低位企稳后或突破关键压力位时,连续收出亮丽的看涨阳线组合(如低位双阳开泰等看涨形态)。这属于明确的多头反攻信号,表明上涨趋势确立,投资者应当克服犹豫,大胆出招进行布局。 双锤打桩与向上踩三下:跟进与加仓策略 ●**双锤打桩,积极跟上:在股价探底回升过程中,K线图上连续出现两根带有长下影线的锤头线(犹如两根铁锤深深打入底部形成坚实桩基)。这表明底部支撑极为坚实,止跌回升信号强烈,投资者需积极跟上**,参与后续的拉升行情。 ●**向上踩三下,加仓不害怕:当股价开启上涨趋势后,走势呈现出多次(如三次)回踩支撑位或均线系统而不破的阶梯式整理结构。这表明多头趋势极其稳定,回踩即是送钱的二次买点,投资者可以克服恐高心理,放心加仓不害怕**。 看跌与避险口诀:果断撤退的两大离场信号 长短阴阳腿:撤退不后悔 形态特征与防范要领:在盘面上表现为阳线与阴线的实体体量失衡(如长阴线夹杂短阳线,或长下影阴线伴随重心连续下移),形态犹如长短不一的腿部失衡走势。这种形态揭示了多头力量衰竭、空头全面主导盘面。一旦出现此风险信号,投资者必须果断撤退,坚决止损离场,切勿抱有侥幸心理而犹疑后悔。 死神信号:快速离场避风险 形态特征与防范要领:“死神不去指”(即盘面出现极度危险的“死神信号”)主要指高位放量长阴见顶、均线死叉或向下跳空缺口等致命见顶警示。这种形态犹如死神挥舞镰刀画出离场红线,预示着股价即面临深度杀跌与剧烈回调。此时必须保持严明的交易纪律,快速离场避险,绝不拖泥带水。 实战口诀对照表与核心总结 技术口诀 信号属性(看涨/看跌) 核心操作指令 仙人指路,果断买入 看涨 果断买入(试仓建仓,把握试盘突破买点) 喜上眉梢,大胆出招 看涨 大胆出招(适度重仓,顺应多头反攻趋势) 双锤打桩,积极跟上 看涨 积极跟上(右侧跟进,筑底完成果断布局) 向上踩三下,加仓不害怕 看涨(加仓) 加仓不害怕(顺势加码,回踩确认放大利润) 长短阴阳腿,撤退不后悔 看跌 果断撤退(减仓防守,重心下移坚决止损) 死神不去指,快离去 看跌 快速离场(清仓避险,见顶信号出现即果断观望) 核心操作总结 **●**严格执行交易纪律:熟记口诀与图形特征只是第一步,在实战中严格按照口诀给出的信号执行买卖指令,是规避股市风险、保障资金安全的核心。 **●**结合形态识别进退:看涨与加仓形态确立时要敢于果断买入与顺势加码,而看跌与死神信号出现时必须坚决清仓撤退,绝不凭主观情绪对抗客观盘面。 **●**形成条件反射习惯:将6句核心口诀与其背后的K线形态深刻转化为直观的交易反射,能够帮助投资者在纷繁复杂的盘面波动中迅速做出理性决策,实现长久稳健的盈利。
浏览133
评论0
收藏0