AQuant 量化框架 —— Crypto 优先·纯 Python·JSON 驱动
Project description
AQuant
一个纯 Python、Crypto 优先、JSON 驱动的量化交易框架。
核心特性
- 纯 Python — Python 3.11+,asyncio 异步事件驱动,无 C++ 依赖
- Crypto 优先 — 原生支持 Binance、OKX、Bybit 等主流交易所
- JSON 驱动 — 一个策略就是一个 JSON 配置文件,声明式定义经纪商/风控/资金/模式
- 回测/实盘一致 — Broker、Risk、Execution 统一抽象,同一套代码两种模式
- 多策略资金隔离 — SubPortfolio 独立风控 + MasterPortfolio 组合归因
- ML 内建 — ONNX Runtime 推理 + FeaturePipeline + FactorRegistry
- 全局结构化日志 — JSON 日志标准,全系统字段一致,直接对接 Loki/ELK
快速开始
安装
pip install aquant
回测一个双均线策略
# 1. 准备配置
cat > my_strategy.json << 'EOF'
{
"$schema": "aquant://config/v1",
"meta": {"strategy_id": "demo_dual_ma", "version": "1.0.0"},
"mode": "backtest",
"capital": {"base_currency": "USDT", "initial": 10000},
"broker": {"exchange": "binance", "market_type": "spot"},
"data": {
"feeds": [{
"symbol": "BTCUSDT", "timeframe": "1h", "source": "parquet",
"path": "data/BTCUSDT_1h.parquet",
"start": "2024-01-01T00:00:00Z", "end": "2024-12-31T23:59:59Z"
}],
"warmup_bars": 100
},
"strategy": {
"module": "strategies.dual_ma",
"class": "DualMAStrategy",
"params": {"fast_period": 10, "slow_period": 30}
},
"risk": {
"pre_trade": {"max_position_ratio": 0.95},
"stop_loss": {"enabled": true, "type": "fixed", "trigger": 0.05}
},
"sizer": {"type": "percent", "params": {"percents": 90}},
"logging": {"level": "INFO"}
}
EOF
# 2. 运行回测
aquanta backtest my_strategy.json
# 3. 查看报告
aquanta plot my_strategy.json
aquanta report my_strategy.json
编写自定义策略
from aquant import Strategy, indicators
class MyStrategy(Strategy):
def __init__(self):
self.fast = indicators.SMA(period=self.p.fast_period)
self.slow = indicators.SMA(period=self.p.slow_period)
def next(self):
if self.fast > self.slow and not self.position:
self.buy(size=self.sizer.getsizing())
elif self.fast < self.slow and self.position:
self.sell(size=self.position.size)
目录结构
AQuant/
├── README.md # 本文档
├── LICENSE # MIT License
├── pyproject.toml # Poetry 配置,依赖定义
│
├── docs/ # 文档(项目唯一真理源)
│ ├── ARCHITECTURE_v1.md # 架构总览
│ ├── STANDARDS.md # 项目技术标准与开发规范
│ ├── LOGGING_STANDARD.md # 全局日志标准
│ ├── JSON_SCHEMA.md # JSON 配置 Schema
│ ├── DECISIONS.md # 架构决策记录(ADR)
│ │
│ ├── modules/ # 子模块设计文档(一模块一文档)
│ │ ├── engine.md # AQuantEngine 核心编排 → 见 docs/modules/engine.md
│ │ ├── strategy.md # Strategy 基类与生命周期 → 见 docs/modules/strategy.md
│ │ ├── data.md # DataFeed 与数据源 → 见 docs/modules/data.md
│ │ ├── broker.md # Broker 抽象与实现 → 见 docs/modules/broker.md
│ │ ├── execution.md # 订单与执行 → 见 docs/modules/execution.md
│ │ ├── risk.md # RiskEngine 与规则 → 见 docs/modules/risk.md
│ │ ├── portfolio.md # 组合与资金隔离 → 见 docs/modules/portfolio.md
│ │ ├── indicators.md # 技术指标系统 → 见 docs/modules/indicators.md
│ │ ├── ml.md # 机器学习集成 → 见 docs/modules/ml.md
│ │ ├── alpha.md # 多因子平台 → 见 docs/modules/alpha.md
│ │ ├── analyzers.md # 绩效分析器 → 见 docs/modules/analyzers.md
│ │ ├── observers.md # 监控与绘图 → 见 docs/modules/observers.md
│ │ ├── config.md # 配置系统 → 见 docs/modules/config.md
│ │ ├── logger.md # 结构化日志 → 见 docs/modules/logger.md
│ │ ├── events.md # 事件系统 → 见 docs/modules/events.md
│ │ ├── exceptions.md # 异常体系 → 见 docs/modules/exceptions.md
│ │ └── cli.md # 命令行接口 → 见 docs/modules/cli.md
│ │
│ ├── api/ # API 参考文档
│ │ └── strategy_api.md # Strategy 开发 API → 见 docs/api/strategy_api.md
│ │
│ └── guides/ # 用户指南
│ ├── quickstart.md # 快速入门 → 见 docs/guides/quickstart.md
│ ├── backtesting.md # 回测指南 → 见 docs/guides/backtesting.md
│ ├── live_trading.md # 实盘交易指南 → 见 docs/guides/live_trading.md
│ └── custom_strategy.md # 自定义策略开发 → 见 docs/guides/custom_strategy.md
│
├── aquant/ # 主 Python 包
│ ├── __init__.py # 公共 API 暴露
│ ├── __version__.py # 版本号单一来源
│ ├── engine.py # AQuantEngine(核心编排入口)
│ ├── config.py # Pydantic 配置模型(JSON Schema 的代码实现)
│ ├── logger.py # 结构化日志系统
│ ├── events.py # 事件定义与事件总线
│ ├── exceptions.py # 自定义异常树
│ ├── cli.py # 命令行入口
│ │
│ ├── core/ # 核心抽象(借鉴 Backtrader)
│ │ ├── __init__.py
│ │ ├── strategy.py # Strategy 基类
│ │ ├── data.py # DataFeed / Bar / Tick 归一化数据结构
│ │ ├── broker.py # BaseBroker 抽象接口
│ │ ├── sizer.py # Sizer 基类与内置实现
│ │ ├── observer.py # Observer 基类
│ │ ├── analyzer.py # Analyzer 基类
│ │ ├── commission.py # 手续费模型
│ │ └── slippage.py # 滑点模型
│ │
│ ├── data/ # 数据模块
│ │ ├── __init__.py
│ │ ├── feeds/ # 数据源实现
│ │ │ ├── __init__.py
│ │ │ ├── base.py # BaseDataFeed 抽象
│ │ │ ├── csv.py # CSV 文件源
│ │ │ ├── parquet.py # Parquet 文件源
│ │ │ ├── binance.py # Binance 实时/历史
│ │ │ ├── okx.py # OKX 实时/历史
│ │ │ └── bybit.py # Bybit 实时/历史
│ │ ├── store.py # 数据存储管理
│ │ └── utils.py # 数据工具(复权、对齐、清洗)
│ │
│ ├── broker/ # 经纪商实现
│ │ ├── __init__.py
│ │ ├── base.py # 共享工具(签名、重连、时间同步)
│ │ ├── backtest.py # 回测撮合引擎
│ │ ├── paper.py # 模拟交易(连接实盘行情,模拟下单)
│ │ ├── binance.py # Binance 实盘 Broker
│ │ ├── okx.py # OKX 实盘 Broker
│ │ └── bybit.py # Bybit 实盘 Broker
│ │
│ ├── execution/ # 订单与执行
│ │ ├── __init__.py
│ │ ├── order.py # Order / OrderState / OrderResult 定义
│ │ ├── position.py # Position 持仓模型
│ │ └── algos/ # 算法执行
│ │ ├── __init__.py
│ │ ├── twap.py
│ │ └── vwap.py
│ │
│ ├── risk/ # 风控引擎
│ │ ├── __init__.py
│ │ ├── engine.py # RiskEngine 主类
│ │ ├── rules.py # 规则库(限额、价格、流量、时间)
│ │ ├── stop.py # 止损止盈模块
│ │ └── circuit.py # 熔断器
│ │
│ ├── portfolio/ # 组合管理
│ │ ├── __init__.py
│ │ ├── master.py # MasterPortfolio(组合级)
│ │ ├── sub.py # SubPortfolio(策略级隔离)
│ │ ├── allocator.py # 资金分配策略
│ │ └── attribution.py # P&L 归因分析
│ │
│ ├── indicators/ # 技术指标
│ │ ├── __init__.py
│ │ ├── base.py # Indicator 基类(Lines 概念)
│ │ ├── trend.py # SMA, EMA, MACD, ADX...
│ │ ├── volatility.py # ATR, Bollinger Bands...
│ │ ├── momentum.py # RSI, Stochastic, CCI...
│ │ └── volume.py # OBV, VWAP, MFI...
│ │
│ ├── ml/ # 机器学习
│ │ ├── __init__.py
│ │ ├── pipeline.py # FeaturePipeline(特征工程管道)
│ │ ├── onnx_runner.py # ONNX Runtime 封装
│ │ └── features/ # 内置特征算子
│ │
│ ├── alpha/ # 多因子平台
│ │ ├── __init__.py
│ │ ├── registry.py # FactorRegistry(因子注册与计算)
│ │ └── factors/ # 内置因子实现
│ │
│ ├── analyzers/ # 绩效分析器
│ │ ├── __init__.py
│ │ ├── returns.py # 收益分析
│ │ ├── drawdown.py # 回撤分析
│ │ ├── sharpe.py # 夏普/索提诺比率
│ │ └── report.py # 综合报告生成器
│ │
│ ├── observers/ # 监控与绘图
│ │ ├── __init__.py
│ │ ├── equity.py # 净值曲线 Observer
│ │ ├── trades.py # 交易标记 Observer
│ │ └── plotter.py # Matplotlib / Plotly 绘图引擎
│ │
│ └── utils/ # 通用工具
│ ├── __init__.py
│ ├── time.py # 时区/时间工具
│ ├── decimal.py # Decimal 精度处理
│ └── validation.py # 通用校验函数
│
├── strategies/ # 示例策略(用户参考)
│ ├── __init__.py
│ ├── dual_ma.py # 双均线策略
│ ├── bollinger_bands.py # 布林带策略
│ ├── ml_enhanced.py # ML 增强策略
│ └── arbitrage.py # 套利策略示例
│
├── configs/ # 配置示例
│ ├── backtest_dual_ma.json
│ ├── paper_dual_ma.json
│ ├── live_dual_ma.json
│ └── portfolio_multi.json
│
├── tests/ # 测试
│ ├── unit/ # 单元测试
│ ├── integration/ # 集成测试
│ └── fixtures/ # 测试数据与夹具
│
├── notebooks/ # Jupyter 示例
│ ├── 01_quickstart.ipynb
│ ├── 02_backtest.ipynb
│ └── 03_ml_strategy.ipynb
│
└── scripts/ # 辅助脚本
├── download_history.py # 历史数据下载
└── convert_format.py # 数据格式转换
架构文档索引
| 文档 | 说明 |
|---|---|
docs/ARCHITECTURE_v1.md |
系统全景、核心模块关系、数据流、部署架构 |
docs/STANDARDS.md |
开发规范、AI 协作流程、代码规范、依赖白名单 |
docs/LOGGING_STANDARD.md |
全局 JSON 日志 Schema、事件类型、级别规范 |
docs/JSON_SCHEMA.md |
策略配置 JSON 完整 Schema、校验规则、示例 |
docs/DECISIONS.md |
架构决策记录(ADR) |
子模块设计文档
所有子模块的详细设计接口与实现规划,参见 docs/modules/*.md:
engine.md— 引擎编排与生命周期strategy.md— 策略基类与事件回调data.md— 数据源抽象与归一化broker.md— 经纪商抽象与撮合execution.md— 订单模型与算法执行risk.md— 三级风控与熔断portfolio.md— 组合与资金隔离indicators.md— 技术指标 Lines 系统ml.md— ONNX 推理与特征管道alpha.md— 多因子注册与计算analyzers.md— 绩效分析observers.md— 监控与可视化config.md— Pydantic 配置系统logger.md— 结构化日志实现events.md— 事件总线exceptions.md— 异常树cli.md— 命令行工具
开发规范
本项目采用 AI 原生开发 + 文档先行 模式:
- 文档先行:任何子模块在写代码前,必须先完成
docs/modules/*.md设计文档 - 零扩散:不允许私自增加功能、修改接口、引入未审批依赖
- 文档即契约:代码实现必须与文档一致
许可证
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aquant_trade-0.1.0.tar.gz.
File metadata
- Download URL: aquant_trade-0.1.0.tar.gz
- Upload date:
- Size: 77.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f1a177bf9dbf5342656b01ebfbcd692467d41f1f5df4fc1090ee40f32f67b557
|
|
| MD5 |
44b075c9269a59917552f93811a5f139
|
|
| BLAKE2b-256 |
7afdaa79808827dc1ae50810a36b7314bedfb71ad447cb1d1a5ca6548828dc38
|
Provenance
The following attestation bundles were made for aquant_trade-0.1.0.tar.gz:
Publisher:
python-publish.yml on bench-prog/AQuant
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aquant_trade-0.1.0.tar.gz -
Subject digest:
f1a177bf9dbf5342656b01ebfbcd692467d41f1f5df4fc1090ee40f32f67b557 - Sigstore transparency entry: 1380203634
- Sigstore integration time:
-
Permalink:
bench-prog/AQuant@62ce7c6e8b5375aebe34e5f7fbec4a8a779b5555 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/bench-prog
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@62ce7c6e8b5375aebe34e5f7fbec4a8a779b5555 -
Trigger Event:
release
-
Statement type:
File details
Details for the file aquant_trade-0.1.0-py3-none-any.whl.
File metadata
- Download URL: aquant_trade-0.1.0-py3-none-any.whl
- Upload date:
- Size: 109.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4bfc782a3363d932c04c072ee98d6346baea33686b02ab7c7dcd6f3e16f34cd9
|
|
| MD5 |
88f166f42760646c08265c57ff6bb437
|
|
| BLAKE2b-256 |
d502b668beacae063d061539915223b21ae7c86b298443ac4e54a4591b2c1457
|
Provenance
The following attestation bundles were made for aquant_trade-0.1.0-py3-none-any.whl:
Publisher:
python-publish.yml on bench-prog/AQuant
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aquant_trade-0.1.0-py3-none-any.whl -
Subject digest:
4bfc782a3363d932c04c072ee98d6346baea33686b02ab7c7dcd6f3e16f34cd9 - Sigstore transparency entry: 1380203727
- Sigstore integration time:
-
Permalink:
bench-prog/AQuant@62ce7c6e8b5375aebe34e5f7fbec4a8a779b5555 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/bench-prog
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@62ce7c6e8b5375aebe34e5f7fbec4a8a779b5555 -
Trigger Event:
release
-
Statement type: