全部
文章&策略
学习干货
问答
官方
用户头像伴我走q
2026-06-13 发布
公开版白皮书 A股多因子共振强势股策略 - 公开版白皮书 ================================================================================ 【策略名称】 多因子共振强势股低吸策略 【策略开发者】 个人量化研究者 【开发平台】 同花顺SuperMind量化交易平台 【策略类型】 中短线量化策略 | 技术面为主 | 智能风控型 ================================================================================ 一、策略核心理念(公开版) 【底层逻辑】 "强势股回踩短期均线低吸 + 多因子共振确认 + 智能动态风控" 【核心假设】 强势股在上涨过程中会回踩短期均线 回踩时如果量价配合健康、大盘环境允许,反弹概率高 通过严格的多因子过滤,提高入场胜率 通过动态仓位和智能止损,控制下行风险 【策略优势】 • 不预测市场,只跟随强势股 • 严格风控,单笔亏损可控 • 适应多种市场环境(牛/熊/震荡) • 全自动交易,无需盯盘 ================================================================================ 二、策略框架(公开版) 【选股维度】 本策略采用多维度因子共振选股,主要维度包括: 板块与基本面过滤 • 仅交易流动性好的主板标的 • 排除风险类股票(ST、退市等) 相对强度筛选 • 基于个股与大盘的相对强弱关系 • 确保选中的是市场中的强势股 技术形态确认 • 识别强势股回踩短期均线的技术形态 • 区分"健康回踩"与"趋势破位" 量价关系验证 • 回踩过程中成交量特征分析 • 确认抛压减轻、筹码稳定 动量指标过滤 • 基于RSI等动量指标的健康区间判断 • 避开极端超买超卖区域 波动率控制 • 基于ATR等波动率指标筛选 • 排除波动过大的标的 大盘环境判断 • 多维度大盘趋势评分系统 • 根据市场环境动态调整操作频率 【交易规则框架】 买入规则: • 触发条件:多因子全部满足 • 买入价格:次日开盘价(避免收盘价后视镜) • 仓位控制:根据大盘评分动态调整 • 持仓上限:严格限制最大持仓数量 • 单日买入上限:控制单日操作频率 卖出规则: • 技术止损:跌破关键均线或前低 • 动态止损:基于个股波动率自适应调整 • 固定止损:设置最大可承受亏损比例 • 分批止盈:盈利后分阶段减仓锁定利润 • 移动止盈:盈利超目标后回撤保护 • 持仓期满:强制平仓避免长期套牢 连败保护: • 连续亏损后自动降低仓位 • 防止连续亏损导致心态崩溃 • 盈利后恢复正常操作节奏 ================================================================================ 三、回测结果(四时段验证) 【验证方法】 将策略分别回测四个完全不同的市场环境,验证稳定性 ┌─────────────────┬────────────┬────────────┬────────────┬────────────┐ │ 指标 │ 2020-2021 │ 2021-2022 │ 2022 │ 2025-2026 │ │ │ 牛市 │ 震荡市 │ 熊市 │ 反弹/牛市 │ ├─────────────────┼────────────┼────────────┼────────────┼────────────┤ │ 总收益率 │ +411.6% │ +181.6% │ +92.1% │ +127.8% │ │ 年化收益率 │ +131.6% │ +70.5% │ +96.3% │ +132.4% │ │ 超额收益 │ +391.0% │ +207.3% │ +113.8% │ +105.1% │ │ 最大回撤 │ 19.28% │ 23.62% │ 18.65% │ 15.71% │ │ 夏普比率 │ 4.12 │ 2.19 │ 3.14 │ 3.36 │ │ 胜率 │ 55.14% │ 52.58% │ 51.24% │ 54.92% │ │ Alpha │ 1.23 │ 0.80 │ 1.12 │ 1.02 │ │ Beta │ 0.76 │ 0.72 │ 0.71 │ 1.34 │ └─────────────────┴────────────┴────────────┴────────────┴────────────┘ 【综合表现】 • 平均年化收益率:107.7% • 平均最大回撤:19.3% • 平均夏普比率:3.20 • 平均胜率:53.5% 【核心结论】 ✓ 策略穿越牛熊,在所有市场环境中均大幅跑赢大盘 ✓ 回撤控制稳定,始终控制在25%以内 ✓ 胜率稳定,始终超过50% ✓ 夏普比率始终>2,风险收益比优秀 ================================================================================ 四、风险控制体系(公开版) 【事前风控】 多因子共振选股,提高入场胜率 大盘环境过滤,避免逆势操作 行业分散,控制单一行业集中度 【事中风控】 动态仓位管理,根据市场环境自适应调整 智能止损系统,根据个股特性动态调整 分批止盈策略,保护利润同时让利润奔跑 连败保护机制,防止连续亏损心态崩溃 【事后风控】 定期评估策略有效性(每季度) 回撤超阈值时暂停策略,复盘原因 连续跑输大盘时重新评估策略逻辑 ================================================================================ 五、策略特点与适用人群 【策略特点】 ✓ 全自动交易,无需盯盘 ✓ 中短线策略,持仓周期3-10天 ✓ 适应多种市场环境(牛市/熊市/震荡市) ✓ 风险可控,单笔亏损有限 ✓ 经过四年四种市场环境验证 【适用人群】 • 有一定风险承受能力的投资者 • 希望获得超额收益的进阶投资者 • 没有时间盯盘的上班族 • 相信量化投资的理性投资者 【不适用人群】 • 风险厌恶型投资者(无法接受20%以上回撤) • 追求保本保息的投资者 • 频繁干预策略的投资者 ================================================================================ 六、合作方式(欢迎洽谈) 【方式一:技术入股】 • 合作模式:您出资金,我出策略 • 收益分成:资金方70%,策略方30% • 亏损承担:资金方100% • 适合对象:有资金但没时间/没策略的投资者 • 合作流程:模拟验证→小资金实盘→逐步加仓 【方式二:策略授权】 • 合作模式:一次性授权费 + 业绩提成 • 授权费用:根据策略规模协商(面议) • 业绩提成:盈利的10%-20% • 适合对象:私募、资管、家办等专业机构 • 交付内容:完整策略代码 + 使用培训 + 季度优化 【方式三:联合开发】 • 合作模式:共同出资,共同开发优化 • 收益分配:按出资比例分配 • 适合对象:志同道合的量化爱好者 • 合作内容:策略优化、新策略开发、资源共享 【合作保障】 先进行3个月模拟交易验证 再小资金(10万)实盘测试6个月 确认稳定后再逐步扩大规模 签署正式合作协议,明确权责利 【联系方式】 请通过平台私信或邮件联系,非诚勿扰 ================================================================================ 七、免责声明 本策略回测结果基于历史数据,不代表未来收益 任何投资都有风险,过往业绩不代表未来表现 投资者应根据自身风险承受能力谨慎决策 本策略仅供参考,不构成投资建议 实盘交易前建议先进行模拟交易验证 策略合作需签署正式协议,明确风险承担 ================================================================================ 八、关于策略细节说明 【为什么不公开具体参数?】 策略的核心价值在于: 独特的因子组合逻辑 经过验证的参数优化 完善的风控体系设计 长期稳定的实盘表现 这些是经过大量时间投入和反复验证形成的核心竞争力, 因此具体参数和代码仅在正式合作后提供。 【如何验证策略真实性?】 查看回测报告(本平台可公开验证) 要求进行模拟交易验证(3个月免费) 小资金实盘测试(10万,6个月) 观察策略在不同市场环境中的表现 【策略的持续优化】 策略会定期进行: • 季度有效性评估 • 参数适应性调整 • 新因子测试与纳入 • 风控体系优化 确保策略在不同市场周期中保持竞争力。 =============================================================================== 版本:公开版V1.0 日期:2026-06-13 完整版仅提供给正式合作方 ================================================================================
浏览3
评论0
收藏0
用户头像mx_***992igv
2026-05-18 发布
一、量化实验室是什么? 量化实验室是SuperMind量化平台最新推出的AI功能,它不是再给你一堆冷冰冰的工具,而是用AI Agent把你的投研想法变成现实——无论是复杂的因子研究,还是策略的代码生成与回测,统统交给它。 重磅加码:现在体验,每周额度直接翻4倍!(原50 Credits/周,限时升级至200 Credits/周)。活动截止至 2026-06-14 23:59:59,快来试试AI如何重塑你的量化研究! 1.1 因子研究 支持从研究想法、已有公式或研报逻辑出发,Agent自动生成因子表达式并回测验证。适合把“我想研究某个市场规律”这类想法,快速变成可以检验的数据结果。 1.2 策略代码生成 用自然语言描述策略逻辑,Agent自动生成可执行源码并回测: 支持Python策略和公式策略两种类型 Python策略适合选股、多因子、择时、风控、资金管理等复杂逻辑 公式策略适合单标的择时、技术指标、期货或股票的轻量策略 生成策略源码后自动执行回测,结果文件里能看到指标、交易记录和策略表现 支持多轮对话,哪里不满意就直接说,Agent继续改代码、重新跑结果 二、支持的策略类型 量化实验室支持两种策略类型:Python策略和公式策略。两者定位不同,各有适用场景。 2.1 Python策略 Python策略自由度更高,适合把一套完整交易框架写出来: 多股票选股:支持从指数成分股、行业板块或全A股票池中筛选股票 多因子模型:打分排名、因子回归、因子中性化 复杂风控:动态止损、移动止盈、仓位控制、个股持仓上限 灵活调仓:日、周、月任意频率,支持条件触发 完整回测:生成策略源码后直接执行回测,沉淀结果报告 2.2 公式策略 公式策略基于同花顺指标公式语法,更适合单标的、技术指标型策略: 单标的回测:主要针对单只股票、指数或期货合约 技术指标:MACD、KDJ、布林带等经典指标 交易信号:金叉死叉、突破、超买超卖、ATR波动突破 期货策略:日内交易、趋势跟踪、止损止盈规则 2.3 两者对比 能力 Python策略 公式策略 选股范围 全市场动态股票 提前指定单只标的 择时逻辑 任意复杂 指标信号、突破信号等 风控体系 动态止损、移动止盈、仓位管理 简单止盈止损 资金管理 等权、市值加权、风险平价 简单资金调整 因子研究 多因子打分、排名、回归 不支持 编程语法 Python 同花顺公式 回测结果文件 strategy_backtest_*.md funcat_backtest_*.md 适用场景 A股选股、多因子策略 股票/期货单标的择时 2.4 如何选择? 想做A股选股、多因子策略 → 选Python策略 想做股票/期货日内、单标的技术指标择时 → 选公式策略 不确定 → 选Python策略,通用性更强 三、使用方法 3.1 整体流程 进入量化实验室 → 选择Agent → 描述策略 → AI生成代码 → 自动回测 → 查看结果 → 多轮优化 3.2 第一步:进入量化实验室 打开 同花顺SuperMind量化平台 注册登录(同花顺账号通用) 点击上方导航栏「我的研究」-「量化实验室」 3.3 第二步:选择Agent 根据你的需求选择合适的Agent: Agent 适用场景 量化助手 生成Python策略或公式策略,并执行回测(最常用) 因子研究Agent 从研究想法出发,生成因子 因子复现Agent 把公式/伪代码翻译成可执行表达式 生成策略代码时,直接选择「量化助手」即可。在使用时,最好在描述中明确说“生成Python策略”或“生成公式策略”,否则Agent可能会理解错方向。 3.4 第三步:描述你的策略 用大白话把策略逻辑讲清楚,关键是这几个要素: 要素 说明 示例 买什么 股票池 "沪深300成分股"、"全A股剔除ST" 什么时候买 开仓条件 "金叉买入"、"突破20日高点" 什么时候卖 平仓条件 "死叉卖出"、"亏损5%止损" 怎么分钱 资金管理 "等权重"、"按因子加权" 回测区间 起止时间 "2023年到2024年" 回测频率 运行频率 "日频"、"5分钟频率" 基准指数 对比基准 "沪深300"、"中证500" 描述示例: 写一个Python策略: - 股票池:沪深300成分股 - 买入:5日均线上穿20日均线,次日开盘买 - 卖出:5日均线下穿20日均线,次日开盘卖 - 资金:每笔买入5万 - 回测:2023-2024年,初始资金1000万,日频 公式策略可以这么说: 生成一个公式策略: - 标的:300033.SZ - 信号:收盘价上穿20日均线买入,下穿20日均线卖出 - 风控:亏损5%止损,盈利后从最高点回撤3%止盈 - 回测:2023-2025年,日频 3.5 第四步:查看回测结果 AI生成代码并执行回测后,策略源码和回测结果会保存到文件中: Python策略:strategy_backtest_*.md 公式策略:funcat_backtest_*.md 报告通常包含: 核心指标:总收益率、年化收益率、最大回撤、夏普比率、胜率、盈亏比、交易次数 净值曲线:策略收益 vs 基准收益 3.6 第五步:多轮优化 不满意?直接告诉AI怎么改: # 加个过滤条件 在刚才基础上,加个成交量过滤,金叉时成交量要大于5日均量的1.5倍 # 优化风控 再加个动态止损:从最高点回撤5%止损,同时3%移动止盈 # 调整参数 把MACD参数改成(8,17,9),回测时间延长到2024年 每一轮AI都会自动修改代码、重新回测、出新报告。反复调整,直到满意为止。 当然,AI生成的代码也需要用户自己甄别。它能大幅降低从想法到回测的门槛,但重要参数、交易假设和异常结果仍然建议自己再检查一遍。 3.7 剩余额度查看 四、实战案例 案例1:双均线公式策略 策略思路:最经典的趋势跟踪策略。收盘价上穿20日均线买入,下穿20日均线卖出,再加上止损止盈。这个案例适合用公式策略快速上手。 你怎么说: 生成一个公式策略: 1. 回测标的: - 标的:同花顺 - 频率:日频 - 回测区间:2023-01-01 至 2025-01-01 2. 开仓条件: - 计算20日收盘价均线MA20 - 当收盘价从下方上穿MA20时买入 3. 平仓条件: - 当收盘价从上方下穿MA20时卖出 - 买入后亏损达到5%时止损 - 买入后盈利创新高,再从最高点回撤3%时止盈 案例2:动量选股+止损策略 策略思路:选近期涨得好的股票(动量效应),但排除涨太多的(避免追高),加上硬性止损保护。 你怎么说: 生成一个Python选股策略: 1. 选股条件: - 股票池:中证500成分股 - 剔除ST股、停牌股、上市不足120日的股票 - 过去20日收益率排名前20%(动量强) - 过去5日平均换手率大于3%(确保流动性) - 排除过去20日涨幅超过30%的股票(避免追高) 2. 开仓条件: - 每周一开盘时,根据上述条件筛选出目标股票池 - 买入所有符合条件的股票,以开盘价执行 3. 平仓条件: - 每周一调仓时,不在新目标池中的股票全部卖出 - 个股亏损达到8%,无论是否到调仓日,立即止损卖出 - 个股盈利达到20%止盈 4. 资金分配: - 初始资金100万 - 持仓上限20只股票 - 采用等权重分配:总资金/持仓股票数 = 每只股票的分配金额 - 如果筛选出的股票超过20只,按动量排名取前20只 - 买入时按100股整数倍取整 5. 回测参数: - 回测区间:2022-01-01 至 2024-12-31 - 基准指数:中证500 - 初始资金:100万 - 回测频率:分钟 案例3:资金流向+波动率复合策略 策略思路:跟着主力资金走,但要选波动适中的股票(资金流入说明有人看好,波动适中说明走势稳健)。 你怎么说: 设计一个Python策略: 1. 选股条件: - 股票池:全A股(剔除ST股、停牌股、上市不足120日的次新股) - 因子1 - 资金流向:过去5日主力资金净流入(大单+特大单买入 - 大单+特大单卖出)/ 总成交额 > 0 - 因子2 - 波动率:过去20日收益率的年化波动率,要求处于全市场中位数±1个标准差之间 - 两个条件同时满足才入选 2. 开仓条件: - 每两周的第一个交易日开盘时执行选股 - 买入所有符合条件的股票 3. 平仓条件: - 每两周调仓时,不在新目标池中的股票全部卖出 - 个股亏损达到10%,立即止损 - 个股持有超过30个交易日仍未盈利,考虑卖出(避免长期套牢) 4. 资金分配: - 初始资金100万 - 持仓上限15只股票 - 采用等权重分配:可用资金/新买入股票数 - 卖出股票释放的资金,在下一个调仓日再分配 - 保留5%的现金作为缓冲,避免频繁满仓操作 5. 调仓频率: - 每两周调仓一次(即每10个交易日) 6. 回测参数: - 回测区间:2023-01-01 至 2024-12-31 - 基准指数:中证800 - 初始资金:100万 - 回测频率:分钟 案例4:多因子打分排名策略 策略思路:综合多个维度给股票打分,选出综合表现最好的。类似基金公司的量化选股模型。 你怎么说: 创建一个多因子Python策略: 1. 选股条件: - 股票池:沪深300成分股 - 剔除ST股、停牌股 - 三个因子,各自权重: - PE_TTM(市盈率,越低越好):权重30% - ROE(净资产收益率,越高越好):权重40% - 过去60日收益率(动量,越高越好):权重30% - 对每个因子进行标准化打分(0-100分) - 加权计算综合得分 = PE得分×30% + ROE得分×40% + 动量得分×30% - 选择综合得分排名前20的股票 2. 开仓条件: - 每月第一个交易日开盘时执行选股 - 买入综合得分前20名的股票 3. 平仓条件: - 每月调仓时,不在新目标池中的股票全部卖出 - 个股亏损达到15%,立即止损 - 如果某只股票连续两个月综合得分跌出前30名,下个月强制卖出 4. 资金分配: - 初始资金100万 - 固定持仓20只股票 - 采用等权重分配:总资金/20 = 每只股票5万元 - 调仓时,先卖出需要清仓的股票,再买入新股票 - 买入顺序按综合得分从高到低,确保高分股票优先获得资金 - 如果资金不足,优先买入得分最高的股票 5. 调仓频率: - 每月第一个交易日调仓 6. 回测参数: - 回测区间:2022-01-01 至 2024-12-31 - 基准指数:沪深300 - 初始资金:100万 - 回测频率:日频 五、常见问题 Q:AI生成的代码一定正确吗? A:不一定。AI能显著提高从想法到回测的速度,但生成代码、回测参数和交易假设仍然需要自己甄别,尤其是用于真实交易前。 Q:生成的代码有bug怎么办? A:直接告诉AI“回测报错了,错误信息是xxx”,它会根据报错继续修改代码并重新回测。 Q:生成后还能继续改吗? A:可以。比如“加一个成交量过滤”“把止损从8%改成5%”“回测区间延长到2025年”,都可以在同一个会话里继续说。 Q:策略能导出到本地吗? A:可以。Python策略会沉淀Python源码和 strategy_backtest_*.md 报告,公式策略会沉淀公式策略结果和 funcat_backtest_*.md 报告。 Q:可以免费使用吗? A:我们为每位用户每周提供了50 Credits的体验额度,可以满足多个策略代码生成任务。2026-06-14 23:59:59前体验额度限时4倍! 六、总结 传统方式 量化实验室方式 学Python语法 → 学量化框架 → 写代码 → 调试 → 回测 说策略想法 → 生成Python/公式策略 → 自动回测 → 看报告 耗时:几天到几周 耗时:几分钟 不管你是量化新手想入门,还是老手想快速验证想法,SuperMind量化实验室都值得一试。尤其是策略代码生成这一步,它把“我有个策略想法”和“我看到了回测结果”之间的距离,压到了几分钟。 【重磅更新】 支持生成和执行通用代码 除策略代码外,量化实验室目前也支持生成通用python代码并执行,例如可以做数据处理、分析、可视化输出等。 与量化平台其他功能进行交互 supermind-cli 是Agent与SuperMind 量化平台进行交互的skill,可以让用户快速完成策略管理、回测与自选板块管理等。 管理个人策略仓库 将AI 生成的策略同步至云端仓库,或拉取其他策略的代码。推送后可以在“我的策略”-“策略研究”中看到这个策略。 示例:“把刚才写好的双均线策略推送到策略仓库里,命名为神奇均线”、“帮我看看云端现在有哪些策略” 异步回测 推送完成后可以发起异步回测任务。回测完成之后可在“我的策略”-“策略研究”-“回测列表”中查看回测详情。 示例:“用过去两年的数据跑一下这个策略的回测,初始资金500W” 维护自选板块 新增、更新或查询自选板块,添加后同花顺行情客户端可见。 示例:“帮我把这几只白酒股加到自选板块里”、“查一下我现在的自选板块都有哪些股票” 相关链接: AI Lab帮助文档 API文档 因子研究指南 回测引擎说明
浏览1366
评论6
收藏4
用户头像sh_*599ojc
2026-06-12 发布
行情监控程序断线了。做过实盘或仿真的人对这一幕都不陌生。网络抖动、交易所维护、程序异常——原因可以列一长串,但多数人的第一反应高度一致:重连成功,数据回来,策略接着跑。 问题恰恰出在这里。重连成功不等于数据连续。 断线窗口内可能已经发生过一轮完整波动,而重连后涌入的第一条数据,可能与断线前的最后一条之间存在跳跃、重叠或空洞。不经检查就直接恢复策略,等于让策略在一条被撕裂过的数据流上继续做决策。 本文不讨论策略该如何写,也不讨论断线后是否该平仓。本文只交付一件事:一张断线窗口审计卡,让你在恢复策略前,用六项检查确认数据流是否真的愈合了。 断线恢复需要的不是重连,是三个确认 重连解决网络层的问题,应用层还要再确认三件事: 当前状态是否已校准——策略手里那张“地图”,是断线前的旧快照,还是重连后的最新行情? 空窗是否被标记——断线期间的数据空洞,是被明确记录下来了,还是在复盘时被误读为“没有波动的安静时间”? 回补数据是否清楚自己的粒度上限——K 线能告诉你这一分钟的开盘价和收盘价,但不能还原逐笔过程。策略需要的精度,回补数据给不给得了? 这三项确认合在一起,才是应用层对“断线恢复”的完整回答。缺任何一项,策略都可能在一根你以为完整、实际存在裂痕的管道上运行——这些裂痕不会立刻报错,它们会安静地污染信号、回测和复盘结论,直到很久之后你才发现,有些异常信号不是策略的问题,而是数据根本没对齐。 断线窗口审计卡 以下六项检查,建议在每次断线恢复后、策略恢复前逐条核验。 检查项 查什么 常见错误 最小修正 ① 断线起止时间 断线发生和重连成功的时间是否已精确记录 日志里只写了“连接断开”,没有时间戳,事后无法确定窗口长度 断线事件触发时立即记录系统时间戳;重连成功后再记一条。差值就是你策略“在黑暗中运行”的时间窗口 ② 当前状态校准 策略恢复后第一条行情数据是来自内存缓存,还是从数据源重新拉取的最新状态 沿用断线前的最后一笔缓存价格继续计算信号,断线期间价格已大幅变化却不自知 重连后显式拉取一次当前快照,覆盖内存状态,作为策略恢复的起点 ③ 空窗区间标记 断线起止之间,数据流里是否有明确的占位标记表示“此处无数据” 重连后数据直接接上新推送,中间不留任何痕迹;复盘时空窗被误读为平静期 在数据流中显式插入空窗标记,包含起止时间和标记类型,让下游程序能识别不可靠区间 ④ K线/聚合数据粒度 回补的K线或聚合数据时间粒度是多少,对策略是否足够 用1分钟K线回补断线缺口,直接当成数据已补齐并继续高频信号分析 明确记录回补数据的类型和粒度;K线不能恢复逐笔,聚合数据只能做有限回补。若策略需要逐笔精度,这部分信号就是不可恢复的 ⑤ 异动先查数据健康 重连后检测到价格跳空或成交量异常时,第一步是区分“市场异动”还是“数据断线造成” 断线恢复后第一根K线显示价格变化,直接触发异动告警,实际可能是时间戳偏差或重复推送 在异动判断逻辑中加一层数据健康检查:对重连后前N条数据先检查时间戳连续性、重复性、与当前快照的一致性 ⑥ 审计日志留存 断线事件、重连动作、校准操作、空窗标记、回补数据来源与粒度是否完整记录 手动重启策略后没有留存原始输入和处理动作,事后无法复现异常信号的原因 审计日志至少保留原始输入和处理动作,确保任何排查都有据可查 一个可复核的分工框架 把断线恢复拆成三个动作,对应三种数据形态的分工——这不是产品功能清单,而是帮你理清什么能补、什么不能补的工程框架: 当前状态校准 → 用快照。重连后第一时间拉取最新 ticker,覆盖过期状态,回答“策略现在站在哪里”。 有限历史回补 → 用 K 线。填补聚合数据缺口,但需明确粒度限制:1分钟K线只能还原四个点,不能恢复逐笔过程。 持续更新恢复 → 用推流。流恢复后继续接收实时数据,但前几条推送需额外检查时间戳连续性和价格吻合度。 以 TickDB 为例,上述三个动作恰好对应它的 REST、K 线和 WebSocket 三种接入方式。同一个行情数据源内部就完成了当前校准、历史回补和实时恢复的分工,研究者不需要在三个不同的数据接口之间切换和对照字段定义。这减少的不是代码量,而是在排查“断线到底影响了什么”时的复杂度——你只需要在一套一致的字段体系下检查时间戳连续性和价格跳空,而不是先花时间搞清楚不同接口之间的字段语义差异。 但这一框架存在明确的能力边界:K 线不能恢复逐笔,聚合数据不能替代丢失的原始推送,重连成功不等于数据连续。 timestamp 字段记录的是事件发生时间,不等于延迟、新鲜度、采样频率或任何形式的 SLA。 本文不讨论什么 本文仅讨论行情监控断线后的数据连续性核验与工程治理方法,不涉及任何策略盈亏、交易信号准确性、断线后是否应平仓或持仓,也不涉及竞品对比、延迟数据或性能承诺。 可保存的断线窗口审计卡 断线起止时间是否已记录。 重连后当前状态是否重新校准。 空窗区间是否明确标记。 使用 K 线或历史聚合数据时,是否明确粒度限制。 异动判断是否先检查数据健康。 审计日志是否保留原始输入和处理动作。 下次行情监控断线后、恢复策略前,先拿出这张卡,逐条过一遍。断线不可怕,可怕的是你以为数据还完整,策略还在一条没有裂缝的管道上跑。 声明:本文仅讨论量化策略的数据监控与工程治理方法,不构成任何投资建议。文中不包含对任何策略有效性的评价,不推荐任何具体证券或交易方向,不对未来收益做任何暗示。所有接口描述仅为说明数据恢复的工程分工,不代表特定产品的功能承诺。
浏览49
评论0
收藏0
用户头像me_361829775857
2026-06-12 发布
昨晚跑策略又把数据搞混了,真是头大。发现很多人对美股期权的高频数据到底长啥样不太清楚,我自己也是踩过不少坑。今天干脆就着数据库里能下到的那些数据,简单捋一捋,希望能帮到同样在找数据的朋友。 先说说最细的逐笔数据(Trade & Quote)。这个就是最原始的每一笔成交和报价的变动记录,数据量巨大,但信息也是最全的。比如你做高频或者想精确分析订单流,这个就绕不开。 它里面主要就是两类东西,成交和报价。 成交记录(Trade)会告诉你: 具体在什么时间点(精确到秒甚至毫秒)成交了。 成交的价格和数量是多少。 是在哪个交易所成交的。 这笔成交是买方推动的还是卖方推动的(有些数据源会标注)。 报价记录(Quote)则是买卖盘口的变动: 买一价和买一量,卖一价和卖一量是最基本的。 有些深度数据会提供买卖多档的报价。 同样有时间戳和交易所信息。 这个数据好是好,就是太“吃”存储和算力了,回测起来比较慢。 为了方便研究,很多人会用聚合好的分钟线数据。分钟数据把一分钟内的信息给汇总了,比如开盘价、最高价、最低价、收盘价(OHLC),还有这一分钟内的总成交量。对于期权来说,分钟数据里最有用的是通常会附带一些计算好的指标,也就是下面要说的希腊字母和隐含波动率。 这就引到日级别数据了,日数据除了基本的OHLC和成交量,核心就是那些期权特有的风险指标。对于做期权策略或者风险管理的朋友,这几个字段是每天必看的: 字段 简单解释 Delta 股价变动1块钱,期权价格大概变动多少。 Gamma Delta的变化速度,衡量Delta稳不稳定。 Theta 时间流逝一天,期权价值损耗多少。 Vega 隐含波动率变动1%,期权价格变动多少。 隐含波动率 (IV) 市场对未来波动率的预期,反向算出来的。 这些指标不是交易所直接给的,都是根据模型(比如BS模型)算出来的。所以不同数据提供商的计算结果可能有点细微差别,用的时候最好留意一下数据说明。 如果你需要写代码直接调取这些数据,可以看看他们提供的Python接口。比如下面这样,先安装库,然后调用行情数据。这里得注意参数别填错,还有调用频率也别太高,免得被限制。 # 示例:使用CMES金融数据库的行情接口获取数据 # 注意入参正确,调用频率正常,避免频繁请求。 # 安装数据接口库(假设库名为cmes_api) # pip install cmesapi import cmesapi # 初始化客户端,通常需要你的API Key client = cmesapi.Client(api_key='你的密钥') # 获取某只股票期权的日度数据,包含希腊值 # 这里参数是示例,具体要看接口文档 data = client.get_option_daily( symbol='AAPL', expiry='20241018', option_type='C', strike=180.0, start_date='2024-01-01', end_date='2024-09-01', fields=['open', 'high', 'low', 'close', 'volume', 'delta', 'gamma', 'theta', 'vega', 'implied_volatility'] ) print(data.head()) 说实话,整理这些数据字段写得我手都酸了。刚开始接触的时候,我也分不清Tick和分钟线的适用场景,后来用多了才有点感觉。Tick数据就像个事无巨细的监控,市场每动一下都记下来,做微观分析必不可少,但对存储和计算真是挑战。分钟和日线数据就像是帮你总结好的简报,用起来轻便很多,尤其日数据带着希腊字母,做日常监控和策略回测效率高。 我一开始图省事用过一些免费数据源,但在处理期权除权除息和合约切换上特别麻烦,清洗数据的时间比研究策略还长。后来还是用了CMES金融数据库里处理好的版本,虽然需要一些积分,但数据是干净的,省心太多了,能把时间花在刀刃上。 对了,如果你主要做中低频的策略,其实真没必要一上来就死磕Tick数据,先从日数据和分钟数据入手把逻辑跑通,会更有效率。除非你是做高频或者订单流分析,那逐笔数据的细节就很重要了。 今天就先聊这么多吧,主要是把数据包里有什么、分别能干什么事理了一下。数据只是原料,怎么用还得看自己的策略需求。如果有大佬对压缩Tick数据体积有高招,欢迎指点!或者你们在用什么别的数据源觉得不错,也可以在下面聊聊。
浏览37
评论0
收藏0
用户头像sh_*219t3e
2025-11-06 发布
最近我专门针对 Supermind 平台的AI 量化代码生成平台进行了优化改进,现在效果比市面上的 DS、豆包等工具好很多。 👉 SuperMind AI量化代码生成平台 这个工具最大的特点是直接和 AI 对话就能生成完整可运行的Supermind量化策略代码。你不需要懂 Python、C# 或策略 API,只要用自然语言描述你的交易逻辑,比如:“当5日均线向上突破20日均线时买入,反向时卖出。” AI 就会自动帮你生成完整策略代码,并能直接在平台上运行。 相比于通用大模型的输出,这个平台针对量化交易进行了专门优化生成的代码结构更清晰,逻辑更准确,对策略逻辑的理解更接近量化开发者的思路,并且可用作 API 查询或策略自动生成工具 之前上线后,很多朋友反馈代码质量和可运行性都非常高,几乎不需要再手动修改。现在我们的AI量化代码生成平台已经全面支持 Supermind,你可以直接体验。如果你之前在用 DS、豆包等平台,不妨试试看这个版本,可能会刷新你对AI 写量化策略的想象。
浏览4526
评论72
收藏7
用户头像sh_***174w0d
2026-06-12 发布
在交易这场残酷的淘汰赛中,大多数散户的航行并没有指南针。他们凭感觉进场,在恐惧中割肉,在贪婪中看着利润化为乌有。很多投资者将失败归咎于“行情看不准”,但在我看来,这只是掩盖无能的借口。 顶尖交易者与普通人真正的鸿沟,不在于预测行情的精准度,而在于是否拥有一套冰冷的、强制执行的自我审视系统。如果你能从今天开始,坚持执行以下三步自检并进行书面记录,两个月后,你将亲手修补那些致命的亏损漏洞,彻底打败市场上 95% 的盲目追随者。 第一阶段:买入前的“灵魂五问” 在你的手指触碰到买入键之前,必须像审讯犯人一样审视这笔交易。如果以下五个问题中,有任何一个你无法给出清晰明确的答案,请立刻停止操作,哪怕行情看起来再诱人。 **1.**开仓逻辑:看好的依据是什么? 这笔单子是基于客观的支撑位、成交量或题材逻辑,还是仅仅源于你“主观觉得”它会涨?如果找不到客观支撑逻辑,那就关掉行情,先别看。 **2.**止损方案:你的退路在哪里? 如果行情没有如期运行,触发什么具体条件你会果断离场?必须在进场前定死你的止损位。 **3.**亏损量化:最坏的情况你能接受吗? 算一算,一旦触发止损,这笔单子会亏掉多少绝对金额?这个数字是否在你的心理舒适区内? **4.**心理画像:你现在的状态正常吗? 你是因为刚亏了钱急于翻本?还是因为连胜三场后自我膨胀、开始随性下单?问问自己,你现在是理性的交易者,还是狂热的赌徒? **5.**压力测试:这笔仓位会让你失眠吗? 如果止损被击穿,你的心情是“心疼但能睡得着”,还是会彻底陷入绝望和自我怀疑? “以上这五个问题,如果有任意一个你自己都给不出一个清晰明确的答案,就不要下单。” 第二阶段:持仓时的“心理体检” 进入头寸后,你就不再是观察者,而是博弈者。情绪会随着K线上下跳动,此时你需要实时监测自己的心态。 **●**止损执行:你是否在心存幻想? 当价格真正触碰止损线时,你是在果断执行计划,还是在寻找“可能会反弹”的理由,舍不得割肉? ●浮盈心态:利润回撤到哪里你会“肉疼”****? 在盈利时,你必须明确自己对回撤的容忍度。回撤多少你会心慌?如果不提前确定,你的利润终将被贪婪吞噬。 **●**操作本质:你在执行计划,还是随性而为? 此时此刻的任何动作(加仓、减仓、平仓),是源于开仓前的预案,还是受盘中波动的即兴驱使? **●**焦点错位:你在盯着逻辑,还是盯着钱? 你是否每秒钟都在盯着盈亏数字的变化,让自己的心跳随数字波动?盯着数字是交易者的心理自杀,你应该盯着的是支撑你持仓的题材逻辑是否依然成立。 行动建议: 如果以上四个问题中,有任何一个让你感到混乱、无法给出明确答案,请立刻平掉手中的仓位,或者直接关掉电脑,强迫自己冷静半小时。 第三阶段:收盘后的“镜像复盘” 收盘后的工作才是拉开差距的关键。复盘自检表是一面镜子,它会逼你看清那个在市场波浪中真实、甚至有些丑陋的自己。请务必将以下内容进行书面记录: **1.**原则检查: 今天的交易中,有没有哪一笔违背了你预设的原则? **2.**心理溯源: 如果违规了,当时你脑子里真实的念头是什么?(请诚实地写下来,哪怕那个念头很愚蠢)。 **3.**情绪画像: 记录今日状态——贪婪、恐惧、平淡还是膨胀? **4.**认知边界: 今天的记录里,是否出现了你完全看不懂、甚至不知道为什么要做的“异常订单”? 核心分析:为什么这套系统能产生降维打击? 这套自检表并不是能预知未来的“交易圣杯”,它的威力在于其对**“模式漏洞”**的极致暴露。 **●**清除情绪噪音: 通过强制性逻辑过滤,它直接切断了 90% 以上因情绪化、随性而产生的错误订单。 **●**修补盈利短板: 坚持记录两个月,那些你从未察觉的习惯性错误(如舍不得止损、无脑追高)会清晰地浮现出来。看清了漏洞,你才有机会去攻克它。 **●**建立职业直觉: 当你习惯了用这套逻辑体系思考,你的交易将从“靠天吃饭”转变为“靠系统盈利”。 结语 交易是一场自己与自己的战争,平庸者在寻找神技,卓越者在修炼自律。从今天起,拿起笔和纸,记录下你的每一次自检。 最后,请问自己一个问题:你是想继续在市场的风暴中随波逐流、任人宰割,还是愿意用两个月的铁律记录,换取一面能看清漏洞、让你一生受用的交易之镜?
浏览67
评论0
收藏0
用户头像9点半量化
2026-06-12 发布
引言:关于“这次不一样”的幻觉 在 A 股市场,历史总是在押韵。从当年的白酒狂热、医疗风暴、核心资产神话,到近年来的新能源与 AI 浪潮,几乎每年都会上演一场蔚为壮观的“抱团”盛事。每当行情走向疯狂的顶点,市场总会不约而同地传出一种声音:“这次不一样,这是长期的产业逻辑。” 然而,历史最终总会用几乎相同的方式终结投资者的幻觉。很多投资者直到亏损离场都想不通:为什么产业趋势明明还在,公司看起来也确实是无可挑剔的“好公司”,但股价却会迎来惨烈的崩塌? 核心逻辑:抱团的本质是流动性游戏,而非估值游戏 必须看清一个残酷的真相:大级别抱团的崩塌,核心往往不在于逻辑的证伪,而在于增量资金的耗尽。 从产业趋势萌芽到最终崩塌,交易结构的“腐烂”通常会经历三个阶梯式的演变: 第一阶段: 产业趋势初现,市场形成初步共识,行业龙头率先启动。 第二阶段: 赚钱效应扩散,机构开始大规模集中持仓,市场不断强化“龙头永远涨”的防御性思维。 第三阶段: 估值彻底脱离产业基本面。逻辑从“公司能赚多少钱”演变为“因为它是核心资产,所以理应继续涨”。 到了第三阶段,基本面研究已经失去了意义,本质上这是一场“击鼓传花”的博弈——大家不再关心公司价值,而是在研究谁会去接最后一棒。 “抱团本质上从来不是估值逻辑,而是流动性逻辑。” 取向一:当估值开始“先给百倍,再等业绩” 抱团崩塌的首要信号,是估值与现金流的完全脱节。 回顾 2015 年的创业板、2021 年的白酒以及 2023 年的 AI,它们在后期都呈现出惊人的一致性:市场直接给出“百倍估值”,然后要求投资者静待未来 5 到 10 年的业绩兑现。这种极度透支未来的做法,让市场变得极其脆弱。 投资者必须意识到:高估值最大的敌人从来不是亏损,而是增速下降。 任何产业都有周期,一旦利润增长追不上估值扩张的野心,整个估值体系就会在瞬间土崩瓦解。 取向二:挤在同一条船上的机构陷阱 为什么理性的机构投资者也会集体陷入癫狂?答案是“排名压力”。 基金经理们真正害怕的不是亏钱,而是“别人都在赚钱而自己没上车”。这种心理驱动了机构持仓的极度集中,导致公募仓位高度一致、北向资金高度密集、ETF 疯狂吸筹。 表面看,这是机构对资产的高度认可;实质上,这意味着交易结构已经彻底淤积。因为所有该买、能买的人都已经买入,市场上再也找不到新的增量买盘。此时,只要有一丝风吹草动,原本坚固的船体就会发生“结构性坍塌”。 “抱团最大的风险从来不是没人信,而是所有人都相信。” 取向三:宏观流动性——被忽略的“屠龙刀” 很多时候,产业的基本面并没有发生任何恶化,但资产价格却跌得深不见底。这通常是因为宏观流动性的转向,让原本廉价的杠杆变得沉重。 钱变贵了,就是高估值资产的“索命符”: 2015 年的创业板: 死于人为的“去杠杆”。 2021 年的白酒与新能源: 死于全球加息周期引发的风险偏好收缩。 高估值资产本质上依赖低利率环境。当流动性收紧,投资者会突然清醒地意识到:十年后的利润,在当下其实根本不值钱。正如源码所言:“行业根本没变,变的是资金成本。” 取向四:当“买菜阿姨”也开始谈论产业趋势 当一个真实的产业逻辑演变成“全民信仰”时,交易结构的崩坏便进入了倒计时。 在每一个大周期的顶部,我们都能听到那些极具煽动性的“无限逻辑”:2015 年是“互联网改变一切”,2021 年是“新能源永续增长”,2023 年是“AI 重构万物”。逻辑本身或许是真的,但当它被炒作成全民信仰时,市场会出现以下致命信号: 千亿市值公司批量出现,估值已无上限; 媒体全量传播,楼下的买菜阿姨都能对产业趋势侃侃而谈; 散户无脑追入龙头,市场默认“永远不会跌”。 当市场进入只谈信仰、不谈估值的境地,这种交易结构的彻底过热,正是大顶落下的时刻。 结语:在周期的轮回中保持清醒 总结来看,判断一场抱团行情是否走向终结,只需对照这四个“绝杀”条件: 1.估值是否已通过“百倍杠杆”严重透支未来? 2.机构持仓是否已经极度拥挤,导致交易结构腐烂? 3.宏观流动性是否已悄然转向,资金成本是否在抬升? 4.产业逻辑是否已经全量化、全民化,甚至批量催生千亿市值? 根据目前的市场观测,这四个条件中已有部分悄然满足,但所幸尚未达到“四条集齐”的临界点。 在周期的轮转中,每位投资者都该做一个深刻的“灵魂拷问”:当你买入那个“所有人都相信”的逻辑时,你是在为产业的未来投资,还是在为一个即将耗尽增量的流动性陷阱买单?
浏览56
评论0
收藏0
用户头像sh_*2176oo
2026-06-12 发布
如果你刚开始学量化,我不建议一上来就研究几千只股票。 股票数量多、停牌多、涨跌停多、财务和行业因素复杂。新手很容易在数据处理、选股池、交易规则里迷路。 ETF 轮动反而是一个更适合入门的方向。 它的核心思想很简单:在一组 ETF 里,定期选择近期表现更强的品种持有。如果所有品种都不好,就降低仓位或空仓。 这篇文章我们用 AlphaFeed 写一个最小可运行的 ETF 轮动策略。它不追求复杂,也不承诺收益。重点是展示一个清晰、可复现、可继续迭代的量化研究流程。 1. 什么是 ETF 轮动 ETF 轮动是一种相对强弱策略。 假设你关注这些方向: 宽基指数 ETF。 科技或成长 ETF。 红利或价值 ETF。 债券或货币类 ETF。 黄金、商品或海外市场 ETF。 每隔一段时间,比如每周或每月,你计算每个 ETF 过去一段时间的收益率,选择表现最强的一个或几个持有。 背后的假设是:市场趋势有一定延续性。近期强的资产,短期内可能继续强。 当然,这不是永远有效。趋势会反转,轮动会失灵,所以必须通过回测和风险控制来评估。 2. 准备 ETF 数据 AlphaFeed 支持 ETF 行情和 K 线。代码格式和股票一致,比如 A 股 ETF 通常使用交易所后缀: from alphafeed import AlphaFeed af = AlphaFeed() df = af.klines.get( "510300.SH", period="1d", count=300, adjust="forward", to_dataframe=True, ) print(df.tail()) 如果你想看全量 ETF 实时行情,可以使用: etfs = af.quotes.get(universes="CN_ETF", to_dataframe=True) print(etfs.head()) 为了方便演示,我们先手动设定一个 ETF 池。实际研究时,你可以根据规模、成交额、跟踪指数等条件筛选。 ETF_POOL = [ "510300.SH", # 沪深300 ETF 示例 "510500.SH", # 中证500 ETF 示例 "159915.SZ", # 创业板 ETF 示例 "588000.SH", # 科创50 ETF 示例 "518880.SH", # 黄金 ETF 示例 ] 注意:不同账户和数据权限下,具体可用标的请以接口返回为准。 3. 批量获取 ETF 日 K from alphafeed import AlphaFeed af = AlphaFeed() dfs = af.klines.batch( ETF_POOL, period="1d", count=1000, adjust="forward", to_dataframe=True, show_progress=True, ) 我们先把每个 ETF 的收盘价整理成一个矩阵: import pandas as pd def build_close_matrix(dfs: dict[str, pd.DataFrame]) -> pd.DataFrame: series = [] for symbol, df in dfs.items(): one = df.sort_values("trade_date").set_index("trade_date")["close"] one.name = symbol series.append(one) close = pd.concat(series, axis=1).sort_index() close = close.dropna(how="all") return close close = build_close_matrix(dfs) print(close.tail()) 这个 close 就是后面所有研究的基础: trade_date 510300.SH 510500.SH 159915.SZ ... 2026-06-01 ... ... ... ... 2026-06-02 ... ... ... ... 多资产策略的第一步,往往就是把不同标的对齐到同一个日期索引上。 4. 定义轮动信号 我们用一个非常简单的规则: 每天计算每个 ETF 过去 60 个交易日收益率。 选择收益率最高的 ETF。 如果最高收益率小于 0,则空仓。 今天生成的选择,明天才持有,避免未来函数。 lookback = 60 momentum = close / close.shift(lookback) - 1 selected = momentum.idxmax(axis=1) best_momentum = momentum.max(axis=1) signal = pd.DataFrame(0, index=close.index, columns=close.columns) for date in close.index: if pd.notna(best_momentum.loc[date]) and best_momentum.loc[date] > 0: symbol = selected.loc[date] signal.loc[date, symbol] = 1 这里的 signal 是一个持仓矩阵。 如果某天选择 510300.SH,那这一行里 510300.SH 为 1,其他 ETF 为 0。如果所有 ETF 动量都小于 0,则全为 0。 5. 计算组合收益 先计算每个 ETF 的日收益: ret = close.pct_change().fillna(0) 再把信号后移一天: position = signal.shift(1).fillna(0) 组合收益: portfolio_ret = (position * ret).sum(axis=1) equity = (1 + portfolio_ret).cumprod() 加入交易成本: fee = 0.0003 slippage = 0.0002 turnover = position.diff().abs().sum(axis=1).fillna(0) cost = turnover * (fee + slippage) portfolio_ret_after_cost = portfolio_ret - cost equity_after_cost = (1 + portfolio_ret_after_cost).cumprod() 完整回测逻辑并不复杂,但每一步都要清楚: 步骤 目的 计算动量 找近期更强的 ETF 生成 signal 记录当日选择 signal 后移 避免未来函数 计算收益 得到组合日收益 加交易成本 更接近真实交易 生成净值 观察长期表现 6. 计算指标 import numpy as np def calc_metrics(equity: pd.Series, returns: pd.Series) -> dict: total_return = equity.iloc[-1] / equity.iloc[0] - 1 annual_return = (1 + total_return) ** (252 / len(equity)) - 1 drawdown = equity / equity.cummax() - 1 max_drawdown = drawdown.min() sharpe = 0 if returns.std() == 0 else returns.mean() / returns.std() * np.sqrt(252) return { "total_return": total_return, "annual_return": annual_return, "max_drawdown": max_drawdown, "sharpe": sharpe, } metrics = calc_metrics(equity_after_cost, portfolio_ret_after_cost) print(metrics) 再画净值曲线: import matplotlib.pyplot as plt equity_after_cost.plot(figsize=(10, 5), title="ETF Rotation Equity") plt.tight_layout() plt.savefig("etf_rotation_equity.png", dpi=160) 7. 输出每天持有了什么 只看净值不够。轮动策略还应该能解释每天持仓。 holding = position.idxmax(axis=1) has_position = position.sum(axis=1) > 0 holding = holding.where(has_position, "CASH") report = pd.DataFrame({ "holding": holding, "portfolio_ret": portfolio_ret_after_cost, "equity": equity_after_cost, }) print(report.tail(20)) 这份报告能告诉你: 策略最近持有什么。 什么时候切换了 ETF。 空仓发生在哪些阶段。 净值变化和持仓是否对应。 策略不能只是一个黑箱。尤其是新手阶段,你必须能解释结果。 8. 参数扫描:20 日、60 日、120 日动量谁更稳 轮动策略最重要的参数之一是动量周期。 我们可以扫描多个 lookback: def run_rotation(close: pd.DataFrame, lookback: int) -> dict: momentum = close / close.shift(lookback) - 1 selected = momentum.idxmax(axis=1) best_momentum = momentum.max(axis=1) signal = pd.DataFrame(0, index=close.index, columns=close.columns) for date in close.index: if pd.notna(best_momentum.loc[date]) and best_momentum.loc[date] > 0: signal.loc[date, selected.loc[date]] = 1 ret = close.pct_change().fillna(0) position = signal.shift(1).fillna(0) portfolio_ret = (position * ret).sum(axis=1) turnover = position.diff().abs().sum(axis=1).fillna(0) cost = turnover * 0.0005 portfolio_ret = portfolio_ret - cost equity = (1 + portfolio_ret).cumprod() metrics = calc_metrics(equity, portfolio_ret) metrics["lookback"] = lookback return metrics results = [run_rotation(close, lb) for lb in [20, 40, 60, 120]] result_df = pd.DataFrame(results).sort_values("sharpe", ascending=False) print(result_df) 还是那句话:不要只看最优参数。你要看不同参数下结果是否都还能接受。 如果只有 40 日动量很好,20、60、120 都不行,那要警惕过拟合。 9. 可以继续升级的方向 ETF 轮动是一个很好的量化练习框架,因为它可以逐步加复杂度: 升级方向 示例 多持仓 每次持有动量前 2 或前 3 波动率调整 对高波动 ETF 降低权重 趋势过滤 只有指数在长期均线上方才开仓 再平衡频率 从每日切换改成每周或每月 成交额过滤 排除流动性较差的 ETF 加入债券/黄金 提高资产类别分散度 比如多持仓版本,可以让策略更平滑: top_n = 2 signal = pd.DataFrame(0, index=close.index, columns=close.columns) for date in momentum.index: row = momentum.loc[date].dropna() row = row[row > 0].sort_values(ascending=False).head(top_n) if len(row) > 0: signal.loc[date, row.index] = 1 / len(row) 这时策略不再把所有资金压到一个 ETF 上,而是分散到近期表现较强的多个 ETF。 10. 为什么 ETF 轮动适合新手 ETF 轮动有几个优点: 标的数量少,容易理解。 数据结构简单,适合 pandas 练习。 不需要复杂财务数据。 策略逻辑直观,容易解释。 很适合学习多资产回测。 它也有缺点: 趋势反转时可能回撤。 参数容易过拟合。 频繁切换会产生交易成本。 ETF 选择会影响结果。 过去有效不代表未来有效。 新手最应该学到的不是“ETF 轮动一定能赚钱”,而是完整研究流程:选池、取数、对齐、生成信号、延迟持仓、计算收益、加入成本、输出指标、检查参数稳定性。 这套流程学会了,以后研究股票、指数、美股、港股都能复用。 结语 ETF 轮动是普通人学习量化的好入口。 它足够简单,能让你快速跑出结果;又足够真实,能覆盖数据对齐、持仓矩阵、交易成本、参数扫描这些关键问题。 AlphaFeed 在这个过程里承担的是数据底座的角色。你用统一的 Python SDK 获取 ETF K 线和实时行情,把精力放在策略假设和回测逻辑上,而不是反复修数据接口。 先写一个简单版本,再一点点加规则。量化研究就是这样长出来的。 参考文献: AlphaFeed 官网:https://alphafeed.org/
浏览54
评论0
收藏0
用户头像sh_****447dvu
2026-06-12 发布
前言 在量化策略研发、实盘数据采集与模型回测环节中,稳定、连续的股票实时行情数据是策略有效运行的基础。基于 WebSocket 对接行情 API 是当前量化领域主流的实时数据接入方案。 初期采用连接初始化阶段固定订阅标的的方式,可满足简单场景需求。但在多标的轮动策略、动态选股模型、多组合并行监测等场景下,需要频繁调整行情订阅列表。若每次变更订阅都断开并重建 WebSocket 连接,不仅会产生数据断档,影响回测精度与策略信号连续性,还会增加网络交互开销。 本文结合 AllTick 行情 API,分享基于单条长连接实现动态增删股票订阅的完整技术方案。从实现逻辑、代码落地、异常处理到量化场景应用价值展开说明,供各位量化研究者、策略开发者参考交流。 一、核心概念界定 股票 WebSocket 动态订阅,指在已建立的长连接链路中,通过下发协议指令调整订阅标的,全程不重建网络连接。该模式区别于连接初始化时的一次性静态订阅,能够适配订阅列表高频变动的场景,保障数据流的完整性,契合量化策略对数据连续性的要求。 二、量化场景需求与传统方案缺陷 1. 核心业务需求 针对量化数据采集、策略实盘运行、批量标的监测等场景,数据接入环节需满足两项核心要求: 支持单只、批量股票标的灵活新增与取消订阅,适配动态选股、多池轮动类策略; 调整订阅列表的过程中,其余已订阅标的的行情数据流不中断,保证策略计算、指标采样不受影响。 2. 静态订阅 + 重复建连的问题 传统方案在订阅列表变更时执行「断连 - 重连 - 重新订阅」流程,在量化应用中存在明显短板: 连接频繁创建与销毁,提升客户端与服务端网络负载,大规模标的采集时问题更为突出; 重连间隙出现数据断层,造成行情采样缺失,直接影响回测结果的真实性与实盘策略的信号输出; 重复执行连接鉴权、订阅初始化逻辑,代码冗余度高,不利于量化工具的长期迭代与维护。 本次优化的核心思路:复用单一 WebSocket 长连接,依靠链路内指令完成订阅管理,从底层保障数据链路稳定。 三、整体实现逻辑 整套方案分为本地订阅状态管理与WebSocket 指令交互两大模块,逻辑简洁且便于嵌入量化数据框架。 本地使用集合结构存储当前全部已订阅股票代码,从源头规避重复订阅请求; 统一执行规则:优先更新本地订阅状态,再向服务端发送控制指令,保证本地记录与服务端推送范围保持一致; AllTick WebSocket 协议支持在长连接生命周期内持续下发控制指令,为动态订阅功能提供协议支撑。 核心操作执行流程 标的新增订阅 校验目标标的未存在于本地订阅集合后,将标的代码写入集合;随后按照协议规范构造订阅指令,通过长连接发送至服务端,服务端随即开启对应标的的行情推送。 标的取消订阅 校验目标标的已存在于本地订阅集合后,将标的代码从集合中移除;构造取消订阅指令并下发,终止服务端对该标的的数据推送。 批量变更订阅 整体刷新本地订阅标的列表,将所有目标标的整合为单条指令批量下发,减少网络请求次数,提升大批量标的管理效率。 四、Python 完整实现代码 代码严格遵循 AllTick 接口规范,采用官方指定cmd_id=22004帧格式,使用code字段传递标的代码。内置心跳保活、空值校验、异常捕获,可直接集成至量化数据采集程序、行情监听工具中。 import websocket import json # 股票WebSocket端点:AllTick 官方 API Docs(WebSocket 地址说明) WS_STOCK_URL = "wss://quote.alltick.co/quote-stock-b-ws-api?token=YOUR_TOKEN" # 本地集合:维护已订阅标的,防止重复请求,适配量化多标的管理 stock_subscribe_set = set() def on_open(ws): """连接建立回调,完成初始标的订阅""" init_codes = ["stock_a", "stock_b"] global stock_subscribe_set stock_subscribe_set.update(init_codes) # 遵循官方帧格式定义订阅消息 init_msg = { "cmd_id": 22004, "action": "subscribe", "code": init_codes } ws.send(json.dumps(init_msg)) def on_message(ws, message): """行情数据接收回调,增加异常防护,保障量化数据稳定接收""" if not message: return try: data = json.loads(message) # 此处可接入数据解析、指标计算、策略信号触发、本地存储等量化逻辑 print(data) except json.JSONDecodeError: return def on_error(ws, error): """连接异常回调,用于程序日志记录与故障排查""" print(f"WebSocket 连接异常:{error}") def on_close(ws, close_status_code, close_msg): """连接关闭回调,可补充重连告警、状态记录逻辑""" print("WebSocket 连接已断开") def add_subscribe(ws, code_list): """动态新增标的订阅,适配动态选股、临时池添加场景""" global stock_subscribe_set valid_codes = [code for code in code_list if code not in stock_subscribe_set] if not valid_codes: return stock_subscribe_set.update(valid_codes) req_msg = { "cmd_id": 22004, "action": "subscribe", "code": valid_codes } ws.send(json.dumps(req_msg)) def remove_subscribe(ws, code_list): """动态取消标的订阅,适配标的剔除、策略下线场景""" global stock_subscribe_set valid_codes = [code for code in code_list if code in stock_subscribe_set] if not valid_codes: return for code in valid_codes: stock_subscribe_set.discard(code) req_msg = { "cmd_id": 22004, "action": "unsubscribe", "code": valid_codes } ws.send(json.dumps(req_msg)) if __name__ == "__main__": # 初始化客户端,10秒心跳保活,维持长连接稳定性 ws_app = websocket.WebSocketApp( WS_STOCK_URL, on_open=on_open, on_message=on_message, on_error=on_error, on_close=on_close ) ws_app.run_forever(ping_interval=10) 五、方案在量化领域的应用价值 相较于传统反复建连的模式,本方案在量化研发、实盘运行环节具备明确优势: 数据连续性提升:全程复用单条长连接,调整订阅标的时无数据断档,保证行情采样完整,提升回测数据可信度与实盘策略运行稳定性; 资源开销优化:减少连接创建、鉴权等重复操作,降低程序算力与网络消耗,适合多标的、多策略并行运行的量化架构; 工程扩展性强:订阅、取消订阅逻辑模块化封装,可快速对接标的池管理、自动选股、组合调仓等量化模块,便于工具与策略迭代; 适配高频场景:支持单标的与批量标的操作,能够匹配轮动策略、短线模型等需要频繁调整观测标的的应用场景。 六、常见问题与排查方案 结合量化程序长期运行的实测经验,整理三类高频问题及对应处理方式,便于线上运维与调试: 问题:下发订阅指令后,无法接收对应标的行情数据 排查方向:核对指令内code字段、本地集合标的代码是否一致,确认cmd_id取值为 22004 处理方案:同步本地标的列表后,重新下发标准订阅指令。 问题:执行取消订阅后,仍持续收到该标的行情数据 排查方向:检查本地集合是否正常移除对应标的代码,确认取消订阅指令正常发送 处理方案:以本地订阅集合为基准增加数据过滤逻辑,拦截无效数据流,避免干扰策略计算。 问题:批量下发订阅指令后,部分标的订阅状态异常 排查方向:拆分批量标的列表,逐一对单标的进行订阅、取消订阅功能验证 处理方案:临时改用单标的逐条下发指令,规避批量协议兼容问题。 七、功能边界说明 本方案基于 AllTick 标准股票 WebSocket 协议开发,仅支持单条连接内部实现标的动态增删。无法实现跨设备、跨连接的订阅状态同步,同时不支持协议定义范围之外的自定义指令,集成至量化系统时需遵循该边界设计整体架构。
浏览41
评论0
收藏0
用户头像sh_**772oqg
2026-06-12 发布
在量化策略开发、行情数据采集、历史样本回测的工程实践中,WebSocket 是对接港股实时流式数据的主流方案。该协议依托全双工通信能力,可满足低延迟、高并发的行情传输需求,但受底层 TCP 协议特性影响,链路长时间无数据交互时,服务端会判定客户端离线并主动断开连接。 这种隐性断连不会直接造成程序崩溃,却会中断行情数据流,形成数据缺口,不仅影响实盘策略信号输出、自动化监控工具运行,还会破坏历史数据集的完整性,导致回测结论失真。本文结合量化场景落地经验,系统讲解心跳保活机制的原理、参数配置、异常处理逻辑,并提供可复用代码,为量化模型、数据采集工具搭建提供技术参考。 一、连接异常对量化业务的影响 WebSocket 闲置断连会从多维度干扰量化体系正常运转: 数据完整性受损:行情中断形成数据断层,污染 Tick 样本库,直接降低策略回测、因子分析的可靠性; 运维成本增加​:断连后需重新建立连接并订阅标的,频繁手动或被动重连会提升程序维护工作量; 系统负载升高:反复断开与重连会产生冗余请求,在多标的并行采集、高频策略场景下,进一步加剧服务与网络压力。 因此,构建长效稳定的长连接,是港股量化数据链路中必须解决的基础问题。 二、心跳机制的两类实现方式 心跳保活是行业内维持 WebSocket 长连接的标准技术方案,核心原理为:通信双方定时交互探测报文,持续确认链路连通状态,避免空闲连接被服务端回收。根据发起主体不同,分为两种实现模式: 客户端主动发送心跳 由本地程序定时推送探测消息,心跳周期、执行逻辑均可自主配置,灵活性与兼容性更强,也是绝大多数港股实时行情 API 的适配方案,量化项目中优先选用。 服务端主动推送心跳 由服务端定时下发探测指令,客户端接收后回复应答报文。该模式依赖接口服务端原生能力,可控性较弱,适用范围有限。 三、心跳间隔的量化场景适配建议 心跳发送间隔需要在连接稳定性与资源开销之间做平衡,参数设置直接影响整套采集系统的运行效率: 间隔过短:高频探测报文持续占用带宽与算力,尤其在多进程、多实例并行采集场景下,会造成资源无谓消耗; 间隔过长:无法有效激活空闲链路,依旧会触发服务端断连规则。 结合港股行情传输特点与大量线上实测,推荐心跳间隔取值区间为 2 秒~10 秒,量化工程中普遍采用 5 秒 作为标准配置。该参数可根据机房网络质量、策略运行频率灵活微调。 四、异常处理与自动重连架构设计 即便部署心跳机制,公网波动、节点转发异常仍可能引发连接中断。一套适配量化业务的健壮方案,必须配套完整的异常捕获与自动重连逻辑,标准流程如下: 全局捕获连接断开、消息收发异常等各类报错,做到故障及时感知; 断连后设置合理休眠时间,防止瞬时高频重连对数据源造成压力; 重连完成后自动执行标的订阅逻辑,实现无人值守式数据采集。 代码架构层面,建议将心跳任务与行情解析、数据入库、策略计算逻辑解耦,拆分为独立执行单元,相互不阻塞,保障高频量化程序平稳运行。 五、代码实现 以下基于 Python 异步协程开发,实现心跳保活核心逻辑,代码轻量化、资源占用低,可直接集成至港股行情采集模块、量化工具中: import asyncio import websockets import json # 心跳探测任务 async def send_heartbeat(ws_conn): while True: try: await ws_conn.send(json.dumps({"action": "ping"})) except Exception: print("心跳发送失败,触发重连流程") break await asyncio.sleep(5) # 主服务逻辑 async def run_client(): ws_url = "行情WebSocket接口地址" async with websockets.connect(ws_url) as ws: # 独立协程执行心跳任务 asyncio.create_task(send_heartbeat(ws)) # 持续接收并处理港股实时行情 async for msg in ws: data = json.loads(msg) print("接收港股实时行情数据:", data) if __name__ == "__main__": asyncio.run(run_client()) 总结 稳定的流式数据接入是量化策略实盘运行、历史数据回测、因子挖掘的前置基础。心跳机制结合自动重连策略,能够彻底解决 WebSocket 闲置掉线问题,保障港股行情数据连续、完整。 该套技术方案已在多个量化采集项目中落地验证,可对接 AllTick API 快速完成部署,适用于中高频策略、批量数据采集、离线样本清洗等各类量化应用场景。
浏览38
评论0
收藏0