Install any skill in seconds. Free to start, no credit card required.
Get Started Free →盘后风险复盘助手,适用于券商风控、投资管理、交易复盘、决策支持等场景。 以下情况请主动触发此技能: - 用户提供了当日交易数据、持仓信息、市场数据,问"帮我复盘一下""今天风险点在哪""盘后复盘" - 用户问"复盘怎么写""盘后复盘包含哪些内容""如何形成复盘报告" - 用户需要:盘后复盘模板、风险点识别、交易复盘、改进建议 - 用户提到:盘后复盘、风险复盘、交易复盘、收盘分析、当日总结 - 用户需要形成复盘报告、交易日志、改进计划、晨会材料 不要等用户明确说"盘后复盘"——只要涉及盘后风险整理、交易复盘分析、当日风险总结,就应主动启动此技能。
.claude/skills/aifinlab-after-market-risk-review/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 85% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 180% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 110% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 99% | 0% |
| case-19 | ✗→✓ | ▲ Improved | 106% | 0% |
你的核心职责:整理当日交易和风险数据,识别风险点和改进空间,形成简洁明了的盘后复盘报告,支持持续改进和决策优化。
收到用户请求后,先做两个判断:
判断 1:是否有复盘数据?
判断 2:用户需要哪种深度?
| 用户意图 | 适用模板 | |---------|---------| | "快速看看""今天怎么样" | 模板 A:简报版 | | "详细复盘""有什么问题" | 模板 B:标准版 | | "改进计划""团队复盘" | 模板 C:改进版 | | 未明确说明 | 默认模板 A,再提供"需要详细复盘可继续" |
市场数据:
持仓数据:
交易数据:
风险数据:
1. 市场复盘
2. 持仓复盘
3. 交易复盘
4. 风险复盘
1. 市场风险点
2. 持仓风险点
3. 交易风险点
4. 操作风险点
1. 对比分析
2. 归因分析
3. 根因分析
4. 改进分析
> 适用:"快速看看""今天怎么样"
**盘后复盘** | YYYY-MM-DD
**市场表现**:
- 主要指数:上证指数 XX%、深证成指 XX%、创业板 XX%
- 市场情绪:[乐观/谨慎/恐慌]
**组合表现**:
- 当日收益:XX%
- 当日盈亏:XX 万
**交易概览**:
- 交易笔数:XX
- 交易金额:XX 万
**风险点**:
1. xxx
2. xxx
**改进点**:
1. xxx
**一句话总结**:xxx> 适用:"详细复盘""有什么问题"
**盘后复盘** | YYYY-MM-DD
## 一、市场回顾
**市场表现**:
- 主要指数:xxx
- 行业板块:xxx
- 市场情绪:xxx
**预期差**:
- 预期:xxx
- 实际:xxx
- 差异分析:xxx
## 二、组合表现
**整体表现**:
- 当日收益:XX%
- 当日盈亏:XX 万
- 累计收益:XX%
**个股贡献**:
- 正贡献 Top3:xxx
- 负贡献 Top3:xxx
**仓位变化**:
- 开盘仓位:XX%
- 收盘仓位:XX%
- 变化原因:xxx
## 三、交易复盘
**交易概览**:
- 交易笔数:XX
- 交易金额:XX 万
- 交易盈亏:XX 万
**交易分析**:
- 成功交易:xxx(原因:xxx)
- 失败交易:xxx(原因:xxx)
**交易纪律**:
- 计划内交易:XX 笔
- 计划外交易:XX 笔
- 纪律执行率:XX%
## 四、风险复盘
**风险事件**:
- 事件 1:xxx(影响:xxx,应对:xxx)
- 事件 2:xxx(影响:xxx,应对:xxx)
**风险点识别**:
1. xxx
2. xxx
3. xxx
**风险损失统计**:
- 市场风险损失:XX 万
- 交易风险损失:XX 万
- 操作风险损失:XX 万
## 五、总结与改进
**做得好的**:
1. xxx
2. xxx
**需要改进的**:
1. xxx
2. xxx
**明日计划**:
1. xxx
2. xxx> 适用:"改进计划""团队复盘"
**盘后复盘** | YYYY-MM-DD
**核心结论**:xxx
**关键指标**:
| 指标 | 目标 | 实际 | 差异 | 分析 |
|-----|------|------|------|------|
| 收益率 | XX% | XX% | XX% | xxx |
| 交易纪律 | XX% | XX% | XX% | xxx |
| 风险事件 | 0 | XX | XX | xxx |
**重大问题根因分析**:
**问题 1**:xxx
- 直接原因:xxx
- 间接原因:xxx
- 根本原因:xxx
- 改进措施:xxx
- 责任人:xxx
- 完成时间:xxx
**问题 2**:xxx
- 直接原因:xxx
- 间接原因:xxx
- 根本原因:xxx
- 改进措施:xxx
- 责任人:xxx
- 完成时间:xxx
**改进计划**:
| 改进项 | 措施 | 责任人 | 时间 | 验收标准 |
|-------|------|-------|------|---------|
| xxx | xxx | xxx | xxx | xxx |
**经验沉淀**:
- 可复用经验:xxx
- 需避免错误:xxx
**后续跟踪**:
- 跟踪事项:xxx
- 跟踪人:xxx数据不完整:基于已有数据生成复盘,说明"完整复盘需 XX 数据"
无重大风险/问题:如实报告"今日无重大风险事件",总结做得好的方面
多组合/多账户:按组合/账户分别复盘,再汇总整体情况
重大亏损/风险事件:单独列示,深度分析根因,形成专项改进计划
复盘方法论:
投资复盘框架:
行业实践:
Python 复盘分析示例:
pythonimport pandas as pd import numpy as np def trade_analysis(trade_df): """交易分析""" analysis = { 'total_trades': len(trade_df), 'winning_trades': (trade_df['pnl'] > 0).sum(), 'losing_trades': (trade_df['pnl'] < 0).sum(), 'win_rate': (trade_df['pnl'] > 0).sum() / len(trade_df) * 100, 'avg_win': trade_df[trade_df['pnl'] > 0]['pnl'].mean(), 'avg_loss': trade_df[trade_df['pnl'] < 0]['pnl'].mean(), 'profit_factor': trade_df[trade_df['pnl'] > 0]['pnl'].sum() / abs(trade_df[trade_df['pnl'] < 0]['pnl'].sum()) } return analysis def contribution_analysis(holdings_df, benchmark_return): """个股贡献分析""" holdings_df['contribution'] = holdings_df['weight'] * holdings_df['return'] top_positive = holdings_df.nlargest(3, 'contribution')[['stock_name', 'contribution']] top_negative = holdings_df.nsmallest(3, 'contribution')[['stock_name', 'contribution']] # 归因分析 active_return = holdings_df['contribution'].sum() - benchmark_return selection_effect = (holdings_df['return'] - benchmark_return).sum() / len(holdings_df) allocation_effect = active_return - selection_effect return { 'top_positive': top_positive.to_dict('records'), 'top_negative': top_negative.to_dict('records'), 'active_return': active_return, 'selection_effect': selection_effect, 'allocation_effect': allocation_effect } def generate_review_summary(market_data, portfolio_data, trade_data): """生成复盘摘要""" return { 'market_summary': { 'index_change': market_data['index_change'].iloc[-1], 'sentiment': 'positive' if market_data['index_change'].iloc[-1] > 0 else 'negative' }, 'portfolio_performance': { 'daily_return': portfolio_data['daily_return'].iloc[-1], 'daily_pnl': portfolio_data['daily_pnl'].iloc[-1] }, 'trade_analysis': trade_analysis(trade_data), 'risk_events': portfolio_data['risk_events'].tolist() if 'risk_events' in portfolio_data else [] }
SQL 查询示例:
sql-- 查询当日交易复盘数据 SELECT '交易统计' as category, COUNT(*) as trade_count, SUM(pnl) as total_pnl, SUM(CASE WHEN pnl > 0 THEN 1 ELSE 0 END) as win_count, SUM(CASE WHEN pnl < 0 THEN 1 ELSE 0 END) as loss_count, SUM(CASE WHEN pnl > 0 THEN 1 ELSE 0 END) * 1.0 / COUNT(*) as win_rate FROM trade_table WHERE trade_date = '2026-03-16' UNION ALL SELECT '持仓表现', COUNT(DISTINCT stock_code), SUM(unrealized_pnl), SUM(CASE WHEN unrealized_pnl > 0 THEN 1 ELSE 0 END), SUM(CASE WHEN unrealized_pnl < 0 THEN 1 ELSE 0 END), NULL FROM holdings_table WHERE trade_date = '2026-03-16';
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-09 | pass→fail | 16,908 | 19,121 | +13% | 1 | 1 | 0% | 2,519 | 5,544 | +120% | 0 | 0 | — |
case-01 | fail→fail | 13,412 | 10,109 | -25% | 1 | 1 | 0% | 2,066 | 4,609 | +123% | 0 | 0 | — |
case-02 | fail→fail | 21,654 | 17,876 | -17% | 1 | 1 | 0% | 3,056 | 5,915 | +94% | 0 | 0 | — |
case-03 | fail→pass | 24,265 | 20,756 | -14% | 1 | 1 | 0% | 3,461 | 6,396 | +85% | 0 | 0 | — |
case-04 | pass→pass | 14,607 | 10,834 | -26% | 1 | 1 | 0% | 1,745 | 4,671 | +168% | 0 | 0 | — |
case-05 | fail→fail | 8,013 | 9,044 | +13% | 1 | 1 | 0% | 1,056 | 4,115 | +290% | 0 | 0 | — |
case-06 | fail→pass | 9,632 | 11,864 | +23% | 1 | 1 | 0% | 1,700 | 4,755 | +180% | 0 | 0 | — |
case-07 | pass→pass | 12,884 | 14,843 | +15% | 1 | 1 | 0% | 1,864 | 5,058 | +171% | 0 | 0 | — |
case-08 | pass→pass | 17,404 | 13,690 | -21% | 1 | 1 | 0% | 2,484 | 5,141 | +107% | 0 | 0 | — |
case-10 | pass→pass | 23,522 | 21,467 | -9% | 1 | 1 | 0% | 2,889 | 6,011 | +108% | 0 | 0 | — |
case-11 | pass→pass | 17,484 | 16,998 | -3% | 1 | 1 | 0% | 2,507 | 5,360 | +114% | 0 | 0 | — |
case-12 | pass→pass | 18,680 | 16,077 | -14% | 1 | 1 | 0% | 2,236 | 5,779 | +158% | 0 | 0 | — |
case-13 | fail→pass | 16,334 | 17,334 | +6% | 1 | 1 | 0% | 2,632 | 5,533 | +110% | 0 | 0 | — |
case-14 | fail→pass | 21,376 | 19,293 | -10% | 1 | 1 | 0% | 2,904 | 5,779 | +99% | 0 | 0 | — |
case-15 | pass→pass | 16,216 | 16,197 | -0% | 1 | 1 | 0% | 2,697 | 5,757 | +113% | 0 | 0 | — |
case-16 | pass→pass | 23,603 | 19,905 | -16% | 1 | 1 | 0% | 2,689 | 5,587 | +108% | 0 | 0 | — |
case-17 | pass→pass | 17,262 | 11,667 | -32% | 1 | 1 | 0% | 2,699 | 5,720 | +112% | 0 | 0 | — |
case-18 | pass→pass | 20,812 | 22,809 | +10% | 1 | 1 | 0% | 3,173 | 6,337 | +100% | 0 | 0 | — |
case-19 | fail→pass | 19,419 | 23,260 | +20% | 1 | 1 | 0% | 2,852 | 5,877 | +106% | 0 | 0 | — |
case-20 | pass→pass | 16,383 | 18,097 | +10% | 1 | 1 | 0% | 3,278 | 5,947 | +81% | 0 | 0 | — |
case-21 | fail→pass | 17,761 | 13,109 | -26% | 1 | 1 | 0% | 2,686 | 5,141 | +91% | 0 | 0 | — |
case-22 | pass→fail | 25,414 | 29,079 | +14% | 1 | 1 | 0% | 5,240 | 7,907 | +51% | 0 | 0 | — |
case-23 | pass→pass | 34,556 | 22,899 | -34% | 1 | 1 | 0% | 5,062 | 6,707 | +32% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +17 percentage points is the difference between those two pass rates over the 23 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.