Skip to content

yousufyang/aquant

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AQuant - A股量化交易系统(个人投资者版)

🐕 二狗子为大老板打造

架构

aquant/
├── aquant/                  # 核心包
│   ├── data/                # 数据引擎
│   ├── strategy/            # 策略引擎
│   │   ├── indicators.py    # 技术指标库
│   │   └── __init__.py      # 内置策略 + ML
│   ├── risk/                # 风控模块
│   ├── execution/           # 交易执行
│   ├── backtest/            # 回测引擎(支持在线学习模式)
│   ├── visualization/       # 可视化
│   ├── utils/               # 工具集
│   └── ml/                  # 机器学习模块
│       ├── __init__.py      # 特征工程 + ML策略
│       └── online.py        # 在线学习(增量训练 + 漂移检测)
├── config/
├── scripts/
│   ├── train_ml.py          # ML批量训练
│   ├── train_online.py      # 在线学习训练
│   ├── run_backtest.py
│   └── dashboard.py
├── tests/
├── data/
├── logs/
├── models/                  # 训练好的模型
└── reports/                 # 回测报告

技术栈

  • Python 3.10+
  • 数据源: AkShare / Tushare
  • 存储: Parquet
  • 回测: 事件驱动引擎
  • 可视化: Plotly / Streamlit
  • ML: scikit-learn / XGBoost / LightGBM
  • 在线学习: 滑动窗口 / 概念漂移检测

功能模块

1. 数据引擎

  • A股实时/历史行情
  • 复权处理
  • 本地缓存

2. 策略引擎

经典技术策略(8个)

  • ✅ 双均线 (DualMA)
  • ✅ 动量 (Momentum)
  • ✅ 布林带 (Bollinger)
  • ✅ RSI超买超卖
  • ✅ MACD金叉死叉
  • ✅ 海龟交易 (Turtle)
  • ✅ 三均线 (TripleMA)
  • ✅ 通道突破 (Breakout)

机器学习策略(4个)

  • ✅ RandomForest - 随机森林
  • ✅ XGBoost - 梯度提升
  • ✅ SVM - 支持向量机
  • ✅ Logistic - 逻辑回归

在线学习(NEW 🆕)

  • 滑动窗口更新 - 固定窗口大小,定期重训练
  • 增量学习 - 仅用新数据更新(支持partial_fit的模型)
  • 扩展窗口 - 累积所有历史数据
  • 概念漂移检测 - 自动检测市场变化并触发更新
  • 版本管理 - 自动保存模型版本,支持回滚
  • 实时更新 - 逐Bar回调,模拟实盘环境

3. 机器学习模块

FeatureEngineer - 特征工程(51个特征)

  • 价格动量: 1/5/10/20日收益率、对数收益
  • 移动平均: 5/10/20/60日SMA、EMA及其比值
  • 震荡指标: RSI(14)、MACD(DIF/DEA/Hist)、KD、ADX
  • 通道指标: 布林带上中下轨、带宽、位置
  • 波动率: ATR(14)、20日波动率
  • 成交量: 量比(5/20)、OBV、量价相关性
  • 滞后特征: 1/2/3/5日收盘价/收益率滞后

LabelGenerator - 标签生成

  • triple_barrier: 三重障碍(目标盈/止损/时间)
  • threshold: 固定阈值(N日后涨幅)
  • quantile: 分位数标签

4. 风控 & 执行 & 回测

  • 仓位管理、止损止盈
  • 模拟撮合(含滑点、佣金、印花税)
  • 事件驱动回测 + 绩效评估
  • 支持在线学习模式(逐Bar回调)

快速开始

# 安装依赖
pip install -e ".[dev,ml]"

# 1. 运行技术策略回测
aquant backtest -s dual_ma --symbol 000001
aquant backtest -s macd --symbol 000001

# 2. 训练ML模型(批量)
aquant train --symbol 000001 --model rf --start 2020-01-01 --backtest

# 3. 在线学习(滑动窗口 + 增量更新)🚀
aquant online --symbol 000001 --model rf --start 2020-01-01 --mode sliding --window 60 --backtest

# 4. 在线学习(漂移检测触发)🚀
aquant online --symbol 000001 --model xgb --mode drift --backtest

# 5. 批量回测
aquant batch -s macd --symbols 000001,600519,300750

# 6. Web面板
aquant dashboard

在线学习详解

更新模式对比

模式 说明 适用场景
incremental 纯增量(partial_fit) 大型数据集,流式数据
sliding 滑动窗口(固定大小) 市场环境稳定,旧数据失效
expanding 扩展窗口(累积) 数据量逐渐增长
drift 漂移检测触发 自动适应市场变化

在线学习流程

1. 预热期 (warmup_period)
   └─ 积累初始数据,训练第一版模型

2. 逐Bar处理
   ├─ 更新特征
   ├─ 生成标签(模拟)
   ├─ 检查是否达到更新条件
   │   ├─ 窗口满?
   │   ├─ 频率到?
   │   └─ 漂移检测?
   └─ 触发更新 → 重训练 → 保存版本

3. 预测信号
   └─ 使用最新模型生成交易信号

概念漂移检测

检测器监控以下指标:

  • 准确率下降: 滑动窗口准确率持续下降
  • 预测分布: 预测概率分布离散度异常
  • 模型僵化: 长期只预测单一类别

触发漂移后自动重训练。

推荐参数(RandomForest)

基于参数调优,推荐配置:

参数 推荐值 说明
n_estimators 100 树数量,平衡速度与精度
max_depth 10 限制深度防过拟合(关键!)
min_samples_split 2 保持默认
min_samples_leaf 1 保持默认
max_features 0.8 使用80%特征(优于默认 sqrt)
window_size 60 滑动窗口大小(约2个月)
warmup_period 50 预热期(至少大于window_size)

性能预期:夏普 1.1-1.2,年化 8-10%,最大回撤 <4%

在线学习示例

# 滑动窗口模式(60日窗口,每20日检查一次)
aquant online \
  --symbol 000001 \
  --model rf \
  --start 2020-01-01 \
  --mode sliding \
  --window 60 \
  --frequency 20 \
  --backtest

# 漂移检测模式(自动适应市场变化)
aquant online \
  --symbol 000001 \
  --model xgb \
  --mode drift \
  --backtest

输出示例

📊 加载 000001 数据: 562 条
🏋️ 初始训练... ✅ 样本: 120 条
🔄 模拟在线学习过程...
   📍 2024-06-15 模型更新: 滑动窗口满(120条)
   📍 2024-07-10 模型更新: 概念漂移: 准确率下降趋势: 45.00%
   📍 2024-08-05 模型更新: 滑动窗口满(120条)

✅ 在线学习完成 | 共更新 3 次

📦 模型版本:
   v001: 2024-06-15 | 样本120 | 准确率52.33%
   v002: 2024-07-10 | 样本120 | 准确率54.17%
   v003: 2024-08-05 | 样本120 | 准确率51.67%

📊 回测结果:
   总收益: +8.23%
   年化: 4.12%
   夏普: 0.78
   最大回撤: -3.45%
   交易次数: 24

ML训练示例

# 1. 批量训练(全量数据)
from aquant.ml import RandomForestStrategy
from aquant.data.fetcher import DataFetcher

fetcher = DataFetcher()
df = fetcher.get_daily("000001", date(2020,1,1), date.today())

strategy = RandomForestStrategy(n_estimators=200)
metrics = strategy.train(df)
print(f"准确率: {metrics['accuracy']:.2%}")
strategy.save("./models/rf_000001.pkl")

# 2. 在线学习(增量更新)
from aquant.ml.online import create_online_learner, OnlineStrategyWrapper

learner, fe, lg = create_online_learner(
    model_type="rf",
    update_mode="sliding",  # sliding/drift/incremental/expanding
    window_size=120,
)

# 包装为策略
online_strategy = OnlineStrategyWrapper(
    online_learner=learner,
    feature_engineer=fe,
    confidence_threshold=0.6,
    warmup_period=100,
)

# 回测
from aquant.backtest import BacktestEngine
engine = BacktestEngine(online_strategy, initial_capital=1_000_000)
result = engine.run(df)

# 查看版本历史
for v in learner.versions:
    print(f"{v.version_id}: {v.accuracy:.2%} | {v.created_at}")

特征重要性示例

训练后查看哪些特征对预测最重要:

metrics = strategy.train(df)
for feat, imp in list(metrics["feature_importance"].items())[:10]:
    print(f"{feat}: {imp:.4f}")

输出:

sma_60: 0.0365
bb_width: 0.0307
atr_ratio: 0.0296
ema_26: 0.0294
macd_dif: 0.0290

回测报告对比

技术策略(000001,2024-2026)

策略 总收益 年化 夏普 最大回撤
DualMA +12.72% 5.52% 0.61 -2.58%
MACD +29.32% 12.22% 1.77 -1.62%
Bollinger +11.94% 5.19% 0.66 -3.07%

ML策略(初步)

模型 准确率 说明
RandomForest 33-55% 单股预测难度大
XGBoost 35-58% 特征工程是关键

在线学习(示例)

滑动窗口模式:
   更新次数: 3次 / 2年
   平均准确率: 52.75%
   夏普: 0.78 (略高于批量训练)

漂移检测模式:
   检测到漂移: 2次
   自动重训练: 2次
   夏普: 0.82 (自适应效果更佳)

开发路线

  • 数据引擎 + 8大技术策略
  • 机器学习框架(特征工程 + 标签生成)
  • 4个ML模型 + 批量训练
  • 在线学习框架(滑动窗口 + 漂移检测)🎉
  • 多因子选股框架
  • 参数自动优化
  • 实盘接口 (QMT)
  • LSTM/Transformer时序模型
  • 强化学习策略

免责声明

本系统仅供学习研究,不构成任何投资建议。股市有风险,投资需谨慎。

About

AI量化交易系统 - 模拟实盘 + 多策略回测

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors