{"id":20079226,"url":"https://github.com/akfamily/akquant","last_synced_at":"2026-05-06T10:01:44.669Z","repository":{"id":337557829,"uuid":"1146075858","full_name":"akfamily/akquant","owner":"akfamily","description":"AKQuant is a high-performance quantitative research and trading framework built on Rust and Python! 开源量化回测框架","archived":false,"fork":false,"pushed_at":"2026-05-02T08:55:02.000Z","size":5646,"stargazers_count":1006,"open_issues_count":5,"forks_count":128,"subscribers_count":7,"default_branch":"main","last_synced_at":"2026-05-02T10:28:37.682Z","etag":null,"topics":["akshare","backtest","finance","quant"],"latest_commit_sha":null,"homepage":"https://akquant.akfamily.xyz/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/akfamily.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-30T15:38:26.000Z","updated_at":"2026-05-02T09:20:53.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/akfamily/akquant","commit_stats":null,"previous_names":["akfamily/akquant"],"tags_count":107,"template":false,"template_full_name":null,"purl":"pkg:github/akfamily/akquant","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akfamily%2Fakquant","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akfamily%2Fakquant/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akfamily%2Fakquant/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akfamily%2Fakquant/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/akfamily","download_url":"https://codeload.github.com/akfamily/akquant/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akfamily%2Fakquant/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32688333,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-06T08:33:17.875Z","status":"ssl_error","status_checked_at":"2026-05-06T08:33:17.221Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["akshare","backtest","finance","quant"],"created_at":"2024-11-13T15:20:43.415Z","updated_at":"2026-05-06T10:01:44.661Z","avatar_url":"https://github.com/akfamily.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/logo.svg\" alt=\"AKQuant\" width=\"400\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://pypi.org/project/akquant/\"\u003e\n        \u003cimg src=\"https://img.shields.io/pypi/v/akquant?style=flat-square\u0026color=007ec6\" alt=\"PyPI Version\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://pypi.org/project/akquant/\"\u003e\n        \u003cimg src=\"https://img.shields.io/pypi/pyversions/akquant?style=flat-square\" alt=\"Python Versions\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"LICENSE\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/license-MIT-green?style=flat-square\" alt=\"License\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/akfamily/akshare\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/Data%20Science-AKShare-green?style=flat-square\" alt=\"AKShare\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://pepy.tech/projects/akquant\"\u003e\n        \u003cimg src=\"https://static.pepy.tech/personalized-badge/akquant?period=total\u0026units=INTERNATIONAL_SYSTEM\u0026left_color=BLACK\u0026right_color=GREEN\u0026left_text=downloads\" alt=\"Downloads\"\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n**AKQuant** 是一款专为量化投研设计的**下一代高性能混合框架**。核心引擎采用 **Rust** 编写以确保极致的执行效率，同时提供优雅的 **Python** 接口以维持灵活的策略开发体验。\n\n🚀 **核心亮点：**\n\n*   **高性能内核**：得益于 Rust 的零开销抽象与 **Zero-Copy** 数据架构，AKQuant 在部分回测场景下可显著降低 Python 层开销；实际运行速度取决于策略逻辑、数据规模、回调频率与运行环境。\n*   **原生 ML 支持**：内置 **Walk-forward Validation**（滚动训练）框架，无缝集成 PyTorch/Scikit-learn，让 AI 策略开发从实验到回测一气呵成。\n*   **TA-Lib 指标生态**：内置 `akquant.talib` 双后端（`python/rust`）兼容能力，支持 **103 个指标**。\n*   **因子表达式引擎**：内置 **Polars** 驱动的高性能因子计算引擎，支持 `Rank(Ts_Mean(Close, 5))` 等 Alpha101 风格公式，自动处理并行计算与数据对齐。\n*   **参数优化**：内置多进程网格搜索（Grid Search）框架，支持策略参数的高效并行优化。\n*   **专业级风控**：内置完善的订单流管理与即时风控模块，支持多资产组合回测。\n\n👉 **[阅读完整文档](https://akquant.akfamily.xyz/)** | **[English Documentation](https://akquant.akfamily.xyz/en/)**\n\n## 安装说明\n\n**AKQuant** 已发布至 PyPI，无需安装 Rust 环境即可直接使用。\n\n```bash\npip install akquant\n```\n\n## 快速开始\n\n以下是一个简单的策略示例：\n\n```python\nimport akquant as aq\nimport akshare as ak\nfrom akquant import Strategy\n\n# 1. 准备数据\n# 使用 akshare 获取 A 股历史数据 (需安装: pip install akshare)\ndf = ak.stock_zh_a_daily(symbol=\"sh600000\", start_date=\"20250212\", end_date=\"20260212\")\n\n\nclass MyStrategy(Strategy):\n    def on_bar(self, bar):\n        # 简单策略示例:\n        # 当收盘价 \u003e 开盘价 (阳线) -\u003e 买入\n        # 当收盘价 \u003c 开盘价 (阴线) -\u003e 卖出\n\n        # 获取当前持仓\n        current_pos = self.get_position(bar.symbol)\n\n        if current_pos == 0 and bar.close \u003e bar.open:\n            self.buy(symbol=bar.symbol, quantity=100)\n            print(f\"[{bar.timestamp_str}] Buy 100 at {bar.close:.2f}\")\n\n        elif current_pos \u003e 0 and bar.close \u003c bar.open:\n            self.close_position(symbol=bar.symbol)\n            print(f\"[{bar.timestamp_str}] Sell 100 at {bar.close:.2f}\")\n\n\n# 运行回测\nresult = aq.run_backtest(\n    data=df,\n    strategy=MyStrategy,\n    initial_cash=100000.0,\n    symbols=\"sh600000\"\n)\n\n# 打印回测结果\nprint(\"\\n=== Backtest Result ===\")\nprint(result)\n\n# 生成最小基准对比报告\nbenchmark_returns = (\n    df.set_index(\"date\")[\"close\"].pct_change().fillna(0.0).rename(\"SIMPLE_BENCH\")\n)\nresult.report(\n    filename=\"quickstart_report.html\",\n    show=False,\n    benchmark=benchmark_returns,\n)\n```\n\n调用 `result.report(..., benchmark=...)` 后，报告会新增“基准对比 (Benchmark Comparison)”区块，展示策略/基准/超额累计收益曲线，以及累计超额收益、年化超额收益、跟踪误差、信息比率、Beta、Alpha 等相对指标。\n\n**运行结果示例:**\n\n```text\n=== Backtest Result ===\nBacktestResult:\n                                            Value\nstart_time              2025-02-12 00:00:00+08:00\nend_time                2026-02-12 00:00:00+08:00\nduration                        365 days, 0:00:00\ntotal_bars                                    249\ntrade_count                                  62.0\ninitial_market_value                     100000.0\nend_market_value                          99804.0\ntotal_pnl                                  -196.0\nunrealized_pnl                                0.0\ntotal_return_pct                           -0.196\nannualized_return                        -0.00196\nvolatility                               0.002402\ntotal_profit                                548.0\ntotal_loss                                 -744.0\ntotal_commission                              0.0\nmax_drawdown                                345.0\nmax_drawdown_pct                         0.344487\nwin_rate                                22.580645\nloss_rate                               77.419355\nwinning_trades                               14.0\nlosing_trades                                48.0\navg_pnl                                  -3.16129\navg_return_pct                          -0.199577\navg_trade_bars                           1.967742\navg_profit                              39.142857\navg_profit_pct                           3.371156\navg_winning_trade_bars                        4.5\navg_loss                                    -15.5\navg_loss_pct                            -1.241041\navg_losing_trade_bars                    1.229167\nlargest_win                                 120.0\nlargest_win_pct                         10.178117\nlargest_win_bars                              7.0\nlargest_loss                                -70.0\nlargest_loss_pct                        -5.380477\nlargest_loss_bars                             1.0\nmax_wins                                      2.0\nmax_losses                                    9.0\nsharpe_ratio                            -0.816142\nsortino_ratio                           -1.066016\nprofit_factor                            0.736559\nulcer_index                              0.001761\nupi                                     -1.113153\nequity_r2                                0.399577\nstd_error                                68.64863\ncalmar_ratio                            -0.568962\nexposure_time_pct                       48.995984\nvar_95                                   -0.00023\nvar_99                                   -0.00062\ncvar_95                                 -0.000405\ncvar_99                                  -0.00069\nsqn                                     -0.743693\nkelly_criterion                         -0.080763\nmax_leverage                              0.01458\nmin_margin_level                        68.587671\n```\n\n## 复杂订单助手 (OCO / Bracket)\n\nAKQuant 提供了两组复杂订单助手，减少手写订单联动逻辑：\n\n*   `create_oco_order_group(first_order_id, second_order_id, group_id=None)`：将两个订单绑定为 OCO，任一成交后自动撤销另一单。\n*   `place_bracket_order(symbol, quantity, entry_price=None, stop_trigger_price=None, take_profit_price=None, ...)`：一次性提交 Bracket 结构；进场成交后自动挂出止损/止盈，并在双退出单场景下自动绑定 OCO。\n\n```python\nfrom akquant import OrderStatus, Strategy\n\nclass BracketHelperStrategy(Strategy):\n    def __init__(self):\n        self.entry_order_id = \"\"\n\n    def on_bar(self, bar):\n        if self.get_position(bar.symbol) \u003e 0 or self.entry_order_id:\n            return\n\n        self.entry_order_id = self.place_bracket_order(\n            symbol=bar.symbol,\n            quantity=100,\n            stop_trigger_price=bar.close * 0.98,\n            take_profit_price=bar.close * 1.04,\n            entry_tag=\"entry\",\n            stop_tag=\"stop\",\n            take_profit_tag=\"take\",\n        )\n\n    def on_order(self, order):\n        if order.id == self.entry_order_id and order.status in (\n            OrderStatus.Cancelled,\n            OrderStatus.Rejected,\n        ):\n            self.entry_order_id = \"\"\n```\n\n可直接运行完整示例：\n\n```bash\npython examples/06_complex_orders.py\n```\n\n## 流式回测 (Streaming)\n\n如果你希望在回测执行过程中实时消费事件，可直接使用 `run_backtest` 并传入 `on_event`：\n\n```python\ndef on_event(event):\n    if event[\"event_type\"] == \"finished\":\n        payload = event[\"payload\"]\n        print(\"status:\", payload.get(\"status\"))\n        print(\"callback_error_count:\", payload.get(\"callback_error_count\"))\n\nresult = aq.run_backtest(\n    data=df,\n    strategy=MyStrategy,\n    symbols=\"sh600000\",\n    on_event=on_event,\n    show_progress=False,\n    stream_progress_interval=10,\n    stream_equity_interval=10,\n    stream_batch_size=32,\n    stream_max_buffer=256,\n    stream_error_mode=\"continue\",\n)\n```\n\n`on_event` 为可选参数：不传时保持传统阻塞语义，传入时可实时消费事件。\n\n关键参数：\n\n*   `stream_progress_interval` / `stream_equity_interval`: 进度与权益事件采样间隔\n*   `stream_batch_size` / `stream_max_buffer`: 缓冲与批量刷新控制\n*   `stream_error_mode`: 回调异常策略，支持 `\"continue\"` 与 `\"fail_fast\"`\n\n## 可视化 (Visualization)\n\nAKQuant 内置了基于 **Plotly** 的强大可视化模块，仅需一行代码即可生成包含权益曲线、回撤分析、月度热力图等详细指标的交互式 HTML 报告。\n\n```python\n# 生成交互式 HTML 报告，自动在浏览器中打开\nresult.report(\n    show=True,\n    compact_currency=True,  # 金额列按 K/M/B 紧凑显示（默认 True）\n)\n\n# 如果你希望金额列保留原始数值精度（不缩写），可关闭：\nresult.report(\n    show=False,\n    filename=\"report_raw_amount.html\",\n    compact_currency=False,\n)\n```\n\n你也可以直接复用结构化分析结果做二次研究：\n\n```python\nexposure = result.exposure_df()             # 暴露分解（净暴露/总暴露/杠杆）\nattr_by_symbol = result.attribution_df(by=\"symbol\")\nattr_by_tag = result.attribution_df(by=\"tag\")\ncapacity = result.capacity_df()             # 容量代理（成交率/换手等）\norders_by_strategy = result.orders_by_strategy()         # 按策略归属聚合订单\nexecutions_by_strategy = result.executions_by_strategy() # 按策略归属聚合成交\n```\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/dashboard_preview.png\" alt=\"Strategy Dashboard\" width=\"800\"\u003e\n  \u003cbr\u003e\n  👉 \u003ca href=\"https://akquant.akfamily.xyz/report_demo/\"\u003e点击查看交互式报表示例 (Interactive Demo)\u003c/a\u003e\n\u003c/p\u003e\n\n## 文档索引\n\n*   📖 **[核心特性与架构](docs/zh/index.md#核心特性)**: 了解 AKQuant 的设计理念与性能优势。\n*   🛠️ **[安装指南](docs/zh/start/installation.md)**: 详细的安装步骤（含源码编译）。\n*   🚀 **[快速入门](docs/zh/start/quickstart.md)**: 更多示例与基础用法。\n*   🤖 **[机器学习指南](docs/zh/advanced/ml.md)**: 如何使用内置的 ML 框架进行滚动训练。\n*   📚 **[API 参考](docs/zh/reference/api.md)**: 详细的类与函数文档。\n*   💻 **[贡献指南](CONTRIBUTING.md)**: 如何参与项目开发。\n\n## 🧪 测试与质量保证\n\nAKQuant 采用严格的测试流程以确保回测引擎的准确性：\n\n*   **单元测试**: 覆盖核心 Rust 组件与 Python 接口。\n*   **黄金测试 (Golden Tests)**: 使用合成数据验证关键业务逻辑（如 T+1、涨跌停、保证金、期权希腊值），并与锁定的基线结果进行比对，防止算法回退。\n\n运行测试：\n```bash\n# 1. 使用 uv 环境运行命令\nuv sync\n\n# 2. 构建并绑定 Rust 扩展\nuv run maturin develop\n\n# 3. 运行所有测试\nuv run pytest\n\n# 4. 运行 Rust 核心测试（自动处理 macOS + uv 环境动态库路径）\n./scripts/cargo-test.sh -q\n\n# 5. 仅运行黄金测试\nuv run pytest tests/golden/test_golden.py\n```\n\n## Citation\n\nPlease use this bibtex if you want to cite this repository in your publications:\n\n```bibtex\n@misc{akquant,\n    author = {Albert King and Yaojie Zhang and Chao Liang},\n    title = {AKQuant},\n    year = {2026},\n    publisher = {GitHub},\n    journal = {GitHub repository},\n    howpublished = {\\url{https://github.com/akfamily/akquant}},\n}\n```\n\n## License\n\nMIT License\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakfamily%2Fakquant","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fakfamily%2Fakquant","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakfamily%2Fakquant/lists"}