Skill v1.0.0
currentAutomated scan100/100version: "1.0.0" name: market-regime description: 判断当前大盘处于牛市/熊市/震荡哪种状态,并给出对应的策略基调与仓位区间参考。当用户问「现在市场什么状态」「该进攻还是防守」「牛市还是熊市」「大盘怎么样」「现在能不能加仓」时使用。
市场状态判断
何时使用
- 现在市场什么状态?
- 该进攻还是防守?
- 现在是牛市还是熊市?
- 大盘怎么样了,能加仓吗?
- 最近这波是不是要变盘了 / 风格是不是切换了?
- 我的策略现在还能跑吗(趋势策略 or 震荡策略)?
轻问 vs 深问(成本控制)
轻问(默认,1 个工具):只想知道「现在是牛/熊/震荡」。
- 只调
factor-miner-regime_detect,直接回 regime 分类 + 区间 + 一句仓位基调。 - 成本:一次同步计算,秒级返回。
深问(2 个工具 + 结构化报告):用户问「是不是刚切换/要变盘」。
- 先
factor-miner-regime_detect定状态,再factor-miner-change_point看近期有没有断点,最后合并成一份带时间线的报告。 - 最贵的一步:
factor-miner-regime_detect。若环境装了hmmlearn,它会走 GaussianHMM 拟合(对长历史序列迭代,明显比规则引擎慢);未装时走内置规则引擎,很快。序列越长越贵,建议只用近 1–2 年日线。 - 第二贵:
factor-miner-change_point在method="pelt"(需 ruptures)或长序列多次二分时的计算。只做「最近有没有切换」时,传近 120–250 根即可,不要传十年全历史。
批量/重任务:如果一次要对多个指数(沪深300 + 中证500 + 创业板 + 恒生 + 标普)或对长历史做 regime 回测,不要一个接一个傻等、也不要在一个同步调用里堆全部数据。
- 正确做法:把批量任务提交为异步作业,先拿到 `job_id`,再用
factor-miner-job_status轮询(job_id传入),状态变为done后取result;running期间先干别的。轮询之间不要 sleep 空转。
工具链
第 0 步:确认数据(必须先解决)
两个工具都不接受「帮我查一下大盘」这种空参数,必须把 K 线/序列喂进去。数据来源二选一:
- 用户提供:让他给指数日线 K 线,格式
[{date:"2025-01-02", close:3300.5, volume:123456}, ...]。volume可选,但给了更好(HMM 用收益+波动特征,量能只作辅助)。 - Agent 侧取数:从本地行情库或 qlib
cn_data取指数日线,取完把序列转成上述格式再调用(不要描述数据、要真的把数组传进去)。 - 没数据就不要硬算:明确回「需要指数日线,至少 120 根,最好 250 根」并说明需要哪个指数(默认沪深300
sh000300,或用户说的上证指数sh000001)。
样本长度建议:≥120 根日线。低于 60 根,任何 regime 结论都不成立,直接告知样本不足。
第 1 步:判当前状态
- 工具:
factor-miner-regime_detect - 参数:
klines:指数日线数组(升序,见上)n_regimes:3(默认值,对应 bull / bear / range);用户只想要「牛还是熊」时传2- 返回(JSON 字符串):
current_regime、regime_history、regime_stats(各状态占比/持续时长)、method(rule或hmm)。 - 注意:
method是规则引擎时,结论对「20日动量 + 已实现波动」阈值敏感;是 HMM 时,状态标签是模型拟合出来的,不同窗口可能重编号,必须结合regime_stats解释,不要只念current_regime。
第 2 步(仅深问):看是否刚切换
- 工具:
factor-miner-change_point - 参数:
series:注意字段名是 `value` 不是 `close` ——[{date:"2025-01-02", value:3300.5}, ...],用指数收盘价序列method:auto(默认,推荐)/cusum_binseg/peltmax_bkps:默认5;只想看最近一次切换就传1–2,减少噪音- 返回:
change_points(含date、index、significance)、method。 - 交叉验证:断点日期若落在
regime_history的状态切换点附近 → 切换证据较强;两者不一致 → 明确写「状态与断点不同源,结论存疑」,不要强行圆回来。
第 3 步:合并输出(见下方契约)
重任务(回测/训练/批量)
- 涉及多指数批量 regime、或把 regime 信号接回测/ML 训练时:提交异步作业 → 记下
job_id→ 用factor-miner-job_status轮询(可能几分钟到几十分钟)→ 拿result。不要同步死等,也不要同一任务重复提交。 - 若中途要跑 Kronos/ML 做方向预测,那是模型输出,非承诺,只能作为「状态报告的附加参考」,且必须显式标注。
记忆回路(前查后记)
本技能的记忆维度是 regime 判断的历史准确率:对同一个指数、在相近样本长度与判定方法下,过去那些 bull / bear / range 的判定,事后有多少被后续真实走势验证。
| 时机 | 动作 | 工具 | |
|---|---|---|---|
| 执行前 | 先查同类情境下的历史 regime 判定及其事后验证结果(按指数、判定方法 rule/hmm、是否处于切换期归类),据此调整本次结论的语气与置信度报法 | causal-memory-search_causal(query="regime 判断 bull bear range 事后是否被走势验证正确",task_tag="market-regime") | |
| 执行后 | 把本次判定作为一条待验证决策写入:索引出指数、样本根数、n_regimes、method 与 regime 结论,结果先留空 | causal-memory-record_decision(decision=<本次结论,如"sh000300 判定 regime=range,样本 250 根,n_regimes=3,method=rule">,outcome="待验证",context=<情境特征>) | |
| 复检时 | 5–20 个交易日后、或下一次对同一指数判 regime 时,用同一条 decision 回填真实结果(后续区间是否真的按当时判定的状态演进),把准确率沉淀下来 | causal-memory-record_decision(同一条 decision,outcome=实际结果) |
写入 context 时要带上本技能特有的情境特征:指数代码、样本根数、n_regimes、method(rule 还是 hmm)、当时是「已持续 ≥20 交易日的稳定状态」还是「刚出现断点/状态切换的切换期」、以及 regime_stats 里该状态的占比与持续时长——这些正是决定判断难度的变量,缺了它们历史准确率就没法分组归因。
为什么这个记忆对用户有价值:regime 判断属于"只能事后证伪"的结论,一次判对或判错都不说明问题;只有连同情境特征一起记住,才能知道本技能在哪类环境下容易看错(典型是切换期、以及规则引擎阈值临界时),进而在输出里更诚实地报置信度。用户下次问「现在什么状态」时,拿到的就不只是一个孤立读数,而是带「同类情境 N 次,其中 X 次判对」的历史参照。
输出格式
Agent 必须按下面小节输出,字段缺失就写「未取得」,不要编。
- 结论一句话:
当前 market regime = bull / bear / range(中文:趋势上行 / 趋势下行 / 区间震荡),先给结论。 - 置信度描述:不用假概率。用三个可核对的依据描述强弱:
- 判定方法(
method= rule 还是 hmm)及其局限; regime_stats里该状态的历史持续时长/占比(持续越久、占比越高,当前读数越"典型");- 最近是否出现状态切换(有断点 → 置信度低/处于切换期;无断点且状态已持续 ≥ 20 交易日 → 置信度高)。
- 输出格式:
置信度:高 / 中 / 低(依据:…)。
- 切换判断(仅深问):断点日期 +
significance+ 是否与 regime 切换相互印证;写清「切换已发生 / 疑似切换 / 未见切换 / 证据冲突」。 - 策略基调:趋势策略 vs 均值回归/震荡策略 哪个更适配当前状态(这是统计适配性描述,不是买卖建议)。
- 仓位区间参考(不点名任何个股,只给区间与依据):
| regime | 仓位区间参考 | 依据 | |
|---|---|---|---|
| 趋势上行 bull | 偏高区间(示例:60%–80%) | 动量向上、波动未失控 | |
| 区间震荡 range | 中性区间(示例:30%–50%) | 无方向,趋势策略易被反复打脸 | |
| 趋势下行 bear | 偏低区间(示例:0%–20%) | 动量向下,回撤风险主导 |
- 必须同时写:
该区间为统计映射的参考区间,须与自身风控参数(单票上限/最大回撤)叠加使用;不是投资建议。 - 用户如已有账户风控参数,把用户的上限套进去取较严者,并说明是取严。
- 数据与口径声明:指数代码、样本区间、K 线根数、
n_regimes、method、是否存在数据缺口。 - 不确定性与下一步:样本不足 / 状态处于切换期 / 方法为规则引擎 时,明确写出「结论可靠性下降」,并给出可验证的下一步(补更多 K 线、换 2 状态再跑、等断点确认)。
- 历史参照(必填小节):
历史参照(必填小节):若检索到同类历史,写明「类似情境 N 次,其中 X 次 <本技能的判断维度> 正确」;无历史则写「首次记录此类情境,本次判断已存入记忆供将来对照」。
合规边界
- 只输出统计计算结果:regime 分类、状态占比与持续时长、断点日期与显著性、方法说明。
- 不输出:买入/卖出建议、个股推荐(本技能禁止点名任何股票)、目标价、涨跌幅或收益承诺、仓位"必须/应该"的指令式表述、杠杆或期货方向建议。
- 仓位区间必须标注为「参考区间 / 统计映射」,并提示叠加用户自身风控;不得表述为「建议仓位 X%」。
- 预测模型(Kronos / ML 打分)一律加注:模型输出,非承诺,不得作为结论依据。
- 数据有缺口、样本不足、方法为规则引擎时,必须如实披露,不得用确定性语气包装。
常见问题
- `series` 的字段名是 `value`,`klines` 的字段名是 `close`:两个工具的入参结构不一样,
change_point传close会拿不到结果。严格照格式传。 - regime 标签在不同窗口下会"漂移":HMM 的 bull/bear 编号是拟合产物,短窗口和长窗口可能对不上。改窗口后必须重跑,并且不要跨窗口直接比较
current_regime字符串,要结合regime_stats与regime_history一起读。 - 切换期不要当趋势期用:断点刚出现、或
regime_history最近 5–10 个交易日刚翻状态时,属于"证据未坐实"阶段,置信度按「低」报,并把这一点写在结论最前面,避免用户按旧状态加仓。 - 别把日线 regime 套到分钟级交易上:日线判出来的状态对日内策略的解释力有限,用户若问日内,先说明口径不匹配,再问是否需要换周期数据重跑。