$npx -y skills add lzwme/finance-quant-skills --skill akquant生成 akquant 框架的可执行量化策略代码,涵盖数据接口、事件驱动、风控与优化。当用户需要开发量化策略、配置回测环境、设置风控规则、进行参数优化、实现横截面轮动策略,或提及 akquant 时使用
| 1 | # AKQuant 量化策略开发指南 |
| 2 | |
| 3 | ## 任务目标 |
| 4 | |
| 5 | 本 Skill 用于辅助 AI 编程智能体生成符合 akquant 框架规范的可执行量化策略代码。能力包括策略设计、回测配置、订单管理、风控规则、参数优化与横截面策略实现。 |
| 6 | |
| 7 | ## 核心能力清单 |
| 8 | |
| 9 | - 策略类生成:继承 Strategy 基类,实现生命周期钩子 |
| 10 | - 数据接口配置:准备 DataFrame 数据、设置预热期、访问历史数据 |
| 11 | - 事件驱动机制:on_bar/on_tick/on_order/on_trade 等回调 |
| 12 | - 订单管理:市价单/限价单/目标仓位/OCO/Bracket/Trailing Stop |
| 13 | - 风控规则:持仓限制/回撤熔断/止损阈值/行业集中度 |
| 14 | - 参数优化:网格搜索与滚动优化(Walk-Forward) |
| 15 | - 多策略编排:slot 映射与策略级风控 |
| 16 | |
| 17 | ## 触发条件 |
| 18 | |
| 19 | 当用户表达以下意图时触发: |
| 20 | - 开发量化交易策略 |
| 21 | - 配置回测环境与参数 |
| 22 | - 设置风险控制规则 |
| 23 | - 进行参数优化与调优 |
| 24 | - 实现横截面或轮动策略 |
| 25 | - 排查策略运行错误 |
| 26 | |
| 27 | ## 策略开发工作流 |
| 28 | |
| 29 | ### 阶段一:理解需求 |
| 30 | |
| 31 | 1. 识别策略类型:趋势跟踪、均值回归、横截面轮动、套利等 |
| 32 | 2. 确定数据需求:时间周期、标的范围、字段要求 |
| 33 | 3. 明确风控约束:持仓上限、止损止盈、回撤限制 |
| 34 | |
| 35 | ### 阶段二:设计策略结构 |
| 36 | |
| 37 | 参考 [strategy-patterns.md](references/strategy-patterns.md) 选择范式: |
| 38 | - 类风格(推荐):继承 Strategy,封装状态与逻辑 |
| 39 | - 函数风格:initialize + on_bar,快速原型 |
| 40 | |
| 41 | 关键决策点: |
| 42 | - 预热期设置:根据指标窗口长度计算 |
| 43 | - 历史数据访问:get_history (numpy) 或 get_history_df (DataFrame) |
| 44 | - 执行模式:NextOpen(下一 Bar 开盘)或 CurrentClose(当前 Bar 收盘) |
| 45 | |
| 46 | ### 阶段三:编写策略代码 |
| 47 | |
| 48 | 使用 [assets/strategy-template.py](assets/strategy-template.py) 作为起点: |
| 49 | |
| 50 | ```python |
| 51 | from akquant import Strategy, Bar |
| 52 | |
| 53 | class MyStrategy(Strategy): |
| 54 | warmup_period = 20 # 预热数据长度 |
| 55 | |
| 56 | def __init__(self, param1=10): |
| 57 | self.param1 = param1 |
| 58 | |
| 59 | def on_start(self): |
| 60 | self.subscribe("600000") |
| 61 | |
| 62 | def on_bar(self, bar: Bar): |
| 63 | # 核心交易逻辑 |
| 64 | history = self.get_history(self.param1, bar.symbol, "close") |
| 65 | if len(history) < self.param1: |
| 66 | return |
| 67 | |
| 68 | import numpy as np |
| 69 | ma = np.mean(history) |
| 70 | pos = self.get_position(bar.symbol) |
| 71 | |
| 72 | if bar.close > ma and pos == 0: |
| 73 | self.buy(bar.symbol, 100) |
| 74 | elif bar.close < ma and pos > 0: |
| 75 | self.sell(bar.symbol, 100) |
| 76 | ``` |
| 77 | |
| 78 | ### 阶段四:配置回测环境 |
| 79 | |
| 80 | 参考 [api-reference.md](references/api-reference.md) 设置参数: |
| 81 | |
| 82 | ```python |
| 83 | from akquant import run_backtest |
| 84 | |
| 85 | result = run_backtest( |
| 86 | strategy=MyStrategy, |
| 87 | data=df, |
| 88 | symbol="600000", |
| 89 | initial_cash=500_000.0, |
| 90 | commission_rate=0.0003, |
| 91 | stamp_tax_rate=0.001, |
| 92 | t_plus_one=True, # A 股 T+1 规则 |
| 93 | warmup_period=20, |
| 94 | execution_mode="NextOpen", |
| 95 | ) |
| 96 | ``` |
| 97 | |
| 98 | ### 阶段五:设置风控规则 |
| 99 | |
| 100 | 参考 [risk-management.md](references/risk-management.md) 配置: |
| 101 | |
| 102 | ```python |
| 103 | from akquant.config import RiskConfig |
| 104 | |
| 105 | result = run_backtest( |
| 106 | ..., |
| 107 | risk_config=RiskConfig( |
| 108 | max_position_pct=0.10, # 单标的持仓不超过 10% |
| 109 | max_account_drawdown=0.20, # 最大回撤 20% |
| 110 | max_daily_loss=0.05, # 单日亏损 5% |
| 111 | ), |
| 112 | ) |
| 113 | ``` |
| 114 | |
| 115 | ### 阶段六:参数优化 |
| 116 | |
| 117 | 参考 [optimization.md](references/optimization.md) 执行: |
| 118 | |
| 119 | ```python |
| 120 | from akquant import run_grid_search, run_walk_forward |
| 121 | |
| 122 | # 网格搜索 |
| 123 | results = run_grid_search( |
| 124 | strategy=MyStrategy, |
| 125 | param_grid={"param1": [10, 20, 30]}, |
| 126 | data=df, |
| 127 | sort_by="sharpe_ratio", |
| 128 | ) |
| 129 | |
| 130 | # 滚动优化(推荐) |
| 131 | wfo_results = run_walk_forward( |
| 132 | strategy=MyStrategy, |
| 133 | param_grid={"param1": [10, 20, 30]}, |
| 134 | data=df, |
| 135 | train_period=250, |
| 136 | test_period=60, |
| 137 | metric="sharpe_ratio", |
| 138 | ) |
| 139 | ``` |
| 140 | |
| 141 | ## 横截面策略开发 |
| 142 | |
| 143 | 参考 [cross-section-guide.md](references/cross-section-guide.md) 实现多标的轮动: |
| 144 | |
| 145 | **推荐范式**:使用 on_timer 统一触发调仓 |
| 146 | |
| 147 | ```python |
| 148 | class CrossSectionStrategy(Strategy): |
| 149 | def __init__(self): |
| 150 | self.universe = ["sh600519", "sz000858", "sh601318"] |
| 151 | |
| 152 | def on_start(self): |
| 153 | self.add_daily_timer("14:55:00", "rebalance") |
| 154 | |
| 155 | def on_timer(self, payload): |
| 156 | if payload != "rebalance": |
| 157 | return |
| 158 | |
| 159 | # 计算所有标分数 |
| 160 | scores = {} |
| 161 | for symbol in self.universe: |
| 162 | history = self.get_history(20, symbol, "close") |
| 163 | scores[symbol] = (history[-1] - history[0]) / history[0] |
| 164 | |
| 165 | # 选出最佳标的并调仓 |
| 166 | best = max(scores, key=scores.get) |
| 167 | self.order_target_percent(0.95, symbol=best) |
| 168 | ``` |
| 169 | |
| 170 | ## 资源索引 |
| 171 | |
| 172 | | 资源 | 用途 | 何时读取 | |
| 173 | |------|------|----------| |
| 174 | | [api-reference.md](references/api-reference.md) | API 速查 | 查询函数签名与参数 | |
| 175 | | [strategy-patterns.md](references/strategy-patterns.md) | 策略范式 | 设计策略结构 | |
| 176 | | [risk-management.md](references/risk-management.md) | 风控配置 | 设置风控规则 | |
| 177 | | [optimization.md](references/optimization.md) | 参数优化 | 调优策略参数 | |
| 178 | | [cross-section-guide.md](references/cross-section-guide.md) | 横截面策略 | 实现多标的轮动 | |
| 179 | | [strategy-template.py](assets/strategy-template.py) | 策略模板 | 快速生成代码骨架 | |
| 180 | ## 环境准备与依赖管理 |
| 181 | |
| 182 | ### 使用 uv 管理项目环境(推荐) |
| 183 | |
| 184 | 由于 akquant 依赖 `pandas>=3.0.0`,全局安装可能与现有项目存在版本冲突。推荐使用 **uv** 创建隔离环境: |
| 185 | |
| 186 | #### 1. 安装 uv:若已安装则跳过 |
| 187 | |
| 188 | ```bash |
| 189 | # macOS |
| 190 | brew install uv |
| 191 | |
| 192 | # Linux |
| 193 | curl -LsSf https://astral.sh/uv/install.sh | sh |
| 194 | |
| 195 | # Windows (PowerShell) |
| 196 | powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" |
| 197 | ``` |
| 198 | |
| 199 | #### 2. 创建项目并初始化环境 |
| 200 | |
| 201 | ```bash |
| 202 | # 创建项目目录 |
| 203 | mkdir my-quant-strategy |
| 204 | cd my-quant-strategy |
| 205 | |
| 206 | # 初始化项目(创建 pyproject.toml) |
| 207 | uv init |
| 208 | |
| 209 | # 创建虚拟环境并安装依赖 |
| 210 | uv venv |
| 211 | uv add akquant pandas numpy |
| 212 | ``` |
| 213 | |
| 214 | #### 3. 运行策略脚本 |
| 215 | |
| 216 | ```bash |
| 217 | # 方式一:使用 uv run(推荐) |
| 218 | uv run python my_strategy.py |
| 219 | |
| 220 | # 方式二:激活虚拟环境后运行 |
| 221 | source .venv/bin/activate # macOS/Linux |
| 222 | # .venv\Scripts\activate # Windows |
| 223 | python my_strategy.py |
| 224 | ``` |
| 225 | |
| 226 | #### 4. 依赖版本锁定 |
| 227 | |
| 228 | uv 会自动生成 `uv.lock` 文件,确保团队 |