常用策略示例 (Common Strategies)
May 5, 2026 · View on GitHub
本目录包含一系列常用量化策略的实现代码,旨在帮助用户快速上手 AKQuant 策略开发。
这些示例展示了如何结合 AKShare 获取数据并进行回测,但也适用于其他数据源。
核心提示 (Key Concepts)
在使用 AKQuant 编写策略时,请注意以下核心机制:
-
数据获取 (
get_history):self.get_history(count=N)返回的是包含当前 Bar 的最近 N 条数据。- 计算均线 (MA): 直接使用
get_history(N)即可(包含今日收盘价)。 - 计算突破信号 (Breakout): 如果需要基于昨日收盘价计算指标(避免未来函数),请获取
N+1条数据并切片[:-1]剔除当前 Bar。
-
多标的回测:
run_backtest的data参数支持传入字典{symbol: DataFrame}。- 在策略中通过
self.get_history(..., symbol=s)获取指定标的数据。
案例列表
1. 01_stock_dual_moving_average.py - A股双均线策略
- 目标: 演示如何获取单只股票(如平安银行 sz000001)的历史数据。
- 策略: 双均线策略 (Golden Cross / Death Cross)。
- 核心点:
- 数据清洗与复权处理 (
adjust="qfq"). get_history的基本使用(包含当前 Bar 数据用于计算当日 MA)。
- 数据清洗与复权处理 (
2. 02_stock_grid_trading.py - 股票网格交易
- 目标: 演示股票网格交易策略逻辑。
- 策略: 动态网格策略,价格下跌分批买入,上涨分批卖出。
- 核心点:
on_bar中的持仓状态管理。- 复杂交易逻辑的实现(基于上次成交价的网格)。
3. 03_stock_atr_breakout.py - 股票 ATR 通道策略
- 目标: 演示基于波动率的通道突破策略。
- 策略: ATR 通道突破策略。
- 核心点:
- 避免未来函数: 演示如何剔除当前 Bar 数据来计算基于历史的指标(ATR/通道上下轨)。
- 波动率指标计算。
4. 04_stock_momentum_rotation.py - 多股票轮动
- 目标: 演示多只股票(如 贵州茅台 vs 五粮液)的数据获取与组合管理。
- 策略: 动量轮动策略 (Momentum Rotation)。
- 核心点:
- 多标的数据传入 (
Dict[str, DataFrame]). - 跨标的动量比较与换仓逻辑.
order_target_percent的正确使用。
- 多标的数据传入 (
5. 05_stock_momentum_rotation_timer.py - 定时触发横截面轮动
- 目标: 演示在单事件流模型下,用
on_timer实现稳定的横截面轮动。 - 策略: 定时调仓动量轮动策略。
- 核心点:
- 在
on_start注册每日定时器。 - 在
on_timer中统一完成跨标的打分与调仓。 - 避免依赖“最后一个 symbol”触发时机。
- 在
6. 06_stock_momentum_rotation_bucket.py - 收齐时间片后横截面轮动
- 目标: 演示不使用定时器时,如何在
on_bar中收齐同一timestamp后再执行一次横截面逻辑。 - 策略: 时间片缓存 + 动量轮动策略。
- 核心点:
- 使用
timestamp -> set(symbol)的缓存桶判断是否收齐。 - 收齐后只执行一次跨标的打分与调仓。
- 适用于无固定定时触发点的横截面策略。
- 使用
7. 07_stock_momentum_rotation_on_timer.py - on_timer 风格的横截面轮动
- 目标: 演示把横截面打分与调仓逻辑集中放到
on_timer中。 - 策略: 固定时点触发的动量轮动策略。
- 核心点:
add_daily_timer()与on_timer()的基本配合。- 将多标的横截面逻辑从
on_bar中解耦出来。 - 适合作为生产环境中更稳定的统一调仓入口。
8. 08_target_positions_long_short.py - 高级目标仓位与多空切换
- 目标: 演示
order_target_positions()如何在一个调用里同时表达多头与空头目标。 - 策略: 先建立多头,再在同周期内切换为
AAA空头和BBB多头。 - 核心点:
order_target_positions()支持正负目标仓位。allow_short=True与RiskConfig(account_mode="margin", enable_short_sell=True)的配合。get_last_target_positions_plan()用于解释最近一次调仓计划。
使用方法
直接运行对应的 Python 脚本即可:
python examples/strategies/01_stock_dual_moving_average.py