继金融智能体:Dexter、RD-Agent、ValueCell、FinanceToolkit、Fincept Terminal之后,本文继续汇总几款开源项目。
Qlib
微软开源(GitHub,44.6K Star,7.1K Fork)量化投资平台,支持全链条AI量化投资流程(数据→模型→回测→交易),官方文档。

核心价值:
- 提供监督学习/强化学习/市场动态建模等完整ML范式支持
- 覆盖Alpha挖掘、风险评估、组合优化、订单执行等投研全环节
- 已被多家机构用于实际投资研究,2023年推出企业级功能BPQP
RD-Agent,LLM驱动自动化工厂
#mermaid-svg-SmkFeNY1P0O17tHA{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-SmkFeNY1P0O17tHA .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-SmkFeNY1P0O17tHA .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-SmkFeNY1P0O17tHA .error-icon{fill:#552222;}#mermaid-svg-SmkFeNY1P0O17tHA .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-SmkFeNY1P0O17tHA .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-SmkFeNY1P0O17tHA .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-SmkFeNY1P0O17tHA .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-SmkFeNY1P0O17tHA .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-SmkFeNY1P0O17tHA .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-SmkFeNY1P0O17tHA .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-SmkFeNY1P0O17tHA .marker{fill:#333333;stroke:#333333;}#mermaid-svg-SmkFeNY1P0O17tHA .marker.cross{stroke:#333333;}#mermaid-svg-SmkFeNY1P0O17tHA svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-SmkFeNY1P0O17tHA p{margin:0;}#mermaid-svg-SmkFeNY1P0O17tHA .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-SmkFeNY1P0O17tHA .cluster-label text{fill:#333;}#mermaid-svg-SmkFeNY1P0O17tHA .cluster-label span{color:#333;}#mermaid-svg-SmkFeNY1P0O17tHA .cluster-label span p{background-color:transparent;}#mermaid-svg-SmkFeNY1P0O17tHA .label text,#mermaid-svg-SmkFeNY1P0O17tHA span{fill:#333;color:#333;}#mermaid-svg-SmkFeNY1P0O17tHA .node rect,#mermaid-svg-SmkFeNY1P0O17tHA .node circle,#mermaid-svg-SmkFeNY1P0O17tHA .node ellipse,#mermaid-svg-SmkFeNY1P0O17tHA .node polygon,#mermaid-svg-SmkFeNY1P0O17tHA .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-SmkFeNY1P0O17tHA .rough-node .label text,#mermaid-svg-SmkFeNY1P0O17tHA .node .label text,#mermaid-svg-SmkFeNY1P0O17tHA .image-shape .label,#mermaid-svg-SmkFeNY1P0O17tHA .icon-shape .label{text-anchor:middle;}#mermaid-svg-SmkFeNY1P0O17tHA .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-SmkFeNY1P0O17tHA .rough-node .label,#mermaid-svg-SmkFeNY1P0O17tHA .node .label,#mermaid-svg-SmkFeNY1P0O17tHA .image-shape .label,#mermaid-svg-SmkFeNY1P0O17tHA .icon-shape .label{text-align:center;}#mermaid-svg-SmkFeNY1P0O17tHA .node.clickable{cursor:pointer;}#mermaid-svg-SmkFeNY1P0O17tHA .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-SmkFeNY1P0O17tHA .arrowheadPath{fill:#333333;}#mermaid-svg-SmkFeNY1P0O17tHA .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-SmkFeNY1P0O17tHA .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-SmkFeNY1P0O17tHA .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-SmkFeNY1P0O17tHA .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-SmkFeNY1P0O17tHA .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-SmkFeNY1P0O17tHA .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-SmkFeNY1P0O17tHA .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-SmkFeNY1P0O17tHA .cluster text{fill:#333;}#mermaid-svg-SmkFeNY1P0O17tHA .cluster span{color:#333;}#mermaid-svg-SmkFeNY1P0O17tHA div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-SmkFeNY1P0O17tHA .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-SmkFeNY1P0O17tHA rect.text{fill:none;stroke-width:0;}#mermaid-svg-SmkFeNY1P0O17tHA .icon-shape,#mermaid-svg-SmkFeNY1P0O17tHA .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-SmkFeNY1P0O17tHA .icon-shape p,#mermaid-svg-SmkFeNY1P0O17tHA .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-SmkFeNY1P0O17tHA .icon-shape .label rect,#mermaid-svg-SmkFeNY1P0O17tHA .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-SmkFeNY1P0O17tHA .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-SmkFeNY1P0O17tHA .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-SmkFeNY1P0O17tHA :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-SmkFeNY1P0O17tHA .nodeStyle>*{fill:#f0f4ff!important;stroke:#99a9bf!important;stroke-width:1px!important;}#mermaid-svg-SmkFeNY1P0O17tHA .nodeStyle span{fill:#f0f4ff!important;stroke:#99a9bf!important;stroke-width:1px!important;}#mermaid-svg-SmkFeNY1P0O17tHA .diamondStyle>*{fill:#f0f4ff!important;stroke:#99a9bf!important;stroke-width:1px!important;}#mermaid-svg-SmkFeNY1P0O17tHA .diamondStyle span{fill:#f0f4ff!important;stroke:#99a9bf!important;stroke-width:1px!important;} 输入目标
智能体协作
优化模块
因子挖掘
生成量化因子
模型调优
优化交易模型
三大智能场景:
- 因子挖掘:从市场/研报自动提取有效因子(中英文演示)
- 模型优化:端到端优化交易模型参数
- 研报解析:自动提取研报中的量化信号
技术创新
| 类别 | 代表性成果(年份) |
|---|---|
| 强化学习 | OPDS/PPO订单执行模型(2022) |
| 时序模型 | HIST/IGMTF(2022) |
| 集成学习 | DoubleEnsemble(2021) |
关键组件:
- 数据集:Alpha158/Alpha360等标准化金融数据集
- 执行引擎:支持嵌套交易策略的高频执行
- 动态适应:DDG-DA概念漂移处理(2022)
框架示意图(Graphviz语法)
graphviz
digraph architecture {
rankdir=LR;
node [shape=box];
数据层 -> {SQLite, Arctic}
计算引擎 -> {Dask, Ray}
ML框架 -> {PyTorch, LightGBM}
部署 -> {Docker, Azure CLI}
前端 -> {Jupyter, Streamlit}
}
实战
基于Docker、或源码部署:
bash
docker run -it -p 8080:8080 pyqlib/qlib_image_stable
# 源码
git clone https://github.com/microsoft/qlib
cd qlib
pip install -e ".[dev]" # 安装开发依赖
python scripts/get_data.py qlib_data --region cn # 获取中国数据集
配置在线数据服务(需Azure CLI):qlib-server deploy --mode online
运行LightGBM示例:qrun benchmarks/LightGBM/workflow_config_lightgbm_Alpha158.yaml
量化研究流程
回测引擎 模型库 数据层 QLib 用户 回测引擎 模型库 数据层 QLib 用户 #mermaid-svg-inTaEFzf98z81Jgo{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-inTaEFzf98z81Jgo .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-inTaEFzf98z81Jgo .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-inTaEFzf98z81Jgo .error-icon{fill:#552222;}#mermaid-svg-inTaEFzf98z81Jgo .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-inTaEFzf98z81Jgo .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-inTaEFzf98z81Jgo .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-inTaEFzf98z81Jgo .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-inTaEFzf98z81Jgo .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-inTaEFzf98z81Jgo .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-inTaEFzf98z81Jgo .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-inTaEFzf98z81Jgo .marker{fill:#333333;stroke:#333333;}#mermaid-svg-inTaEFzf98z81Jgo .marker.cross{stroke:#333333;}#mermaid-svg-inTaEFzf98z81Jgo svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-inTaEFzf98z81Jgo p{margin:0;}#mermaid-svg-inTaEFzf98z81Jgo .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-inTaEFzf98z81Jgo text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-inTaEFzf98z81Jgo .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-inTaEFzf98z81Jgo .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-inTaEFzf98z81Jgo .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-inTaEFzf98z81Jgo .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-inTaEFzf98z81Jgo #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-inTaEFzf98z81Jgo .sequenceNumber{fill:white;}#mermaid-svg-inTaEFzf98z81Jgo #sequencenumber{fill:#333;}#mermaid-svg-inTaEFzf98z81Jgo #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-inTaEFzf98z81Jgo .messageText{fill:#333;stroke:none;}#mermaid-svg-inTaEFzf98z81Jgo .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-inTaEFzf98z81Jgo .labelText,#mermaid-svg-inTaEFzf98z81Jgo .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-inTaEFzf98z81Jgo .loopText,#mermaid-svg-inTaEFzf98z81Jgo .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-inTaEFzf98z81Jgo .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-inTaEFzf98z81Jgo .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-inTaEFzf98z81Jgo .noteText,#mermaid-svg-inTaEFzf98z81Jgo .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-inTaEFzf98z81Jgo .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-inTaEFzf98z81Jgo .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-inTaEFzf98z81Jgo .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-inTaEFzf98z81Jgo .actorPopupMenu{position:absolute;}#mermaid-svg-inTaEFzf98z81Jgo .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-inTaEFzf98z81Jgo .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-inTaEFzf98z81Jgo .actor-man circle,#mermaid-svg-inTaEFzf98z81Jgo line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-inTaEFzf98z81Jgo :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 定义研究问题 获取金融数据 返回结构化数据 调用预置模型 输出预测结果 执行策略回测 生成可视化报告
高级功能:
- 强化学习:示例见
examples/rl_order_execution - 组合优化:支持Planning-based框架(2021)
- 高频交易:1分钟级数据处理(2021)
AI-Trader Bench
官网,开源(GitHub,19.8K Star,3K Fork)模块化可配置面向多市场的AI驱动量化交易系统,基于分层架构与MCP协议,打通数学计算、搜索、价格获取与交易执行全链路。通过代理类、MCP工具服务与配置文件系统协同工作,支持美股、A股及加密货币市场。只需切换配置,即可启动对应市场的AI交易代理,实现跨市场高效部署。
架构
#mermaid-svg-QRCNASZaiH8KT2dW{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-QRCNASZaiH8KT2dW .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-QRCNASZaiH8KT2dW .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-QRCNASZaiH8KT2dW .error-icon{fill:#552222;}#mermaid-svg-QRCNASZaiH8KT2dW .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-QRCNASZaiH8KT2dW .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-QRCNASZaiH8KT2dW .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-QRCNASZaiH8KT2dW .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-QRCNASZaiH8KT2dW .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-QRCNASZaiH8KT2dW .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-QRCNASZaiH8KT2dW .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-QRCNASZaiH8KT2dW .marker{fill:#333333;stroke:#333333;}#mermaid-svg-QRCNASZaiH8KT2dW .marker.cross{stroke:#333333;}#mermaid-svg-QRCNASZaiH8KT2dW svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-QRCNASZaiH8KT2dW p{margin:0;}#mermaid-svg-QRCNASZaiH8KT2dW .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-QRCNASZaiH8KT2dW .cluster-label text{fill:#333;}#mermaid-svg-QRCNASZaiH8KT2dW .cluster-label span{color:#333;}#mermaid-svg-QRCNASZaiH8KT2dW .cluster-label span p{background-color:transparent;}#mermaid-svg-QRCNASZaiH8KT2dW .label text,#mermaid-svg-QRCNASZaiH8KT2dW span{fill:#333;color:#333;}#mermaid-svg-QRCNASZaiH8KT2dW .node rect,#mermaid-svg-QRCNASZaiH8KT2dW .node circle,#mermaid-svg-QRCNASZaiH8KT2dW .node ellipse,#mermaid-svg-QRCNASZaiH8KT2dW .node polygon,#mermaid-svg-QRCNASZaiH8KT2dW .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-QRCNASZaiH8KT2dW .rough-node .label text,#mermaid-svg-QRCNASZaiH8KT2dW .node .label text,#mermaid-svg-QRCNASZaiH8KT2dW .image-shape .label,#mermaid-svg-QRCNASZaiH8KT2dW .icon-shape .label{text-anchor:middle;}#mermaid-svg-QRCNASZaiH8KT2dW .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-QRCNASZaiH8KT2dW .rough-node .label,#mermaid-svg-QRCNASZaiH8KT2dW .node .label,#mermaid-svg-QRCNASZaiH8KT2dW .image-shape .label,#mermaid-svg-QRCNASZaiH8KT2dW .icon-shape .label{text-align:center;}#mermaid-svg-QRCNASZaiH8KT2dW .node.clickable{cursor:pointer;}#mermaid-svg-QRCNASZaiH8KT2dW .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-QRCNASZaiH8KT2dW .arrowheadPath{fill:#333333;}#mermaid-svg-QRCNASZaiH8KT2dW .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-QRCNASZaiH8KT2dW .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-QRCNASZaiH8KT2dW .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-QRCNASZaiH8KT2dW .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-QRCNASZaiH8KT2dW .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-QRCNASZaiH8KT2dW .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-QRCNASZaiH8KT2dW .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-QRCNASZaiH8KT2dW .cluster text{fill:#333;}#mermaid-svg-QRCNASZaiH8KT2dW .cluster span{color:#333;}#mermaid-svg-QRCNASZaiH8KT2dW div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-QRCNASZaiH8KT2dW .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-QRCNASZaiH8KT2dW rect.text{fill:none;stroke-width:0;}#mermaid-svg-QRCNASZaiH8KT2dW .icon-shape,#mermaid-svg-QRCNASZaiH8KT2dW .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-QRCNASZaiH8KT2dW .icon-shape p,#mermaid-svg-QRCNASZaiH8KT2dW .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-QRCNASZaiH8KT2dW .icon-shape .label rect,#mermaid-svg-QRCNASZaiH8KT2dW .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-QRCNASZaiH8KT2dW .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-QRCNASZaiH8KT2dW .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-QRCNASZaiH8KT2dW :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-QRCNASZaiH8KT2dW .node>*{fill:#e6f7ff!important;stroke:#1890ff!important;stroke-width:2px!important;}#mermaid-svg-QRCNASZaiH8KT2dW .node span{fill:#e6f7ff!important;stroke:#1890ff!important;stroke-width:2px!important;} 配置文件
主程序main.py
代理工厂
BaseAgent
BaseAgentAStock
BaseAgentCrypto
MCP工具客户端
数学工具
搜索工具
价格工具
交易工具
外部数据源
搜索引擎
市场数据API
交易执行
分层架构设计,包含配置层、代理层、工具层和数据层,实现职责清晰分离,显著提升系统的可维护性与可扩展性。其核心由代理类(Agent)、MCP工具服务与配置文件系统构成,通过JSON配置文件定义交易参数,驱动AI模型进行决策,真正实现"配置即策略"的灵活部署。系统支持美股、A股和加密货币三大市场的AI交易,每类市场配备专用代理:BaseAgent(美股)、BaseAgentAStock(A股日线)、BaseAgentCrypto(加密货币),精准匹配不同市场的交易规则与频率需求。
通过FastMCP框架实现工具服务,每个工具作为独立HTTP服务运行,支持高内聚低耦合的模块化设计,支持通过环境变量覆盖配置参数,如INIT_DATE、END_DATE,实现运行时动态配置。
实战
基于源码部署:
bash
git clone https://github.com/HKUDS/AI-Trader.git
cd AI-Trader
pip install -r requirements.txt
vim .env
# A股交易流程,依次执行数据准备、MCP服务启动和交易运行脚本
bash main_a_stock_step1.sh && bash main_a_stock_step2.sh && bash main_a_stock_step3.sh
# 验证A股交易代理是否成功运行,检查数据存储目录中是否生成交易日志和持仓记录
python -m cli.main --help
OpenAlice
官网,一款面向个人的开源(GitHub,5.3K Star,849 Fork)AI交易代理工具,定位:个人专属的华尔街工作站,能将研究、量化分析、交易执行、风险管理等全流程能力集成在个人笔记本电脑上,实现24/7不间断运行。
特征:
- 文件驱动:通过Markdown定义智能体角色和任务、JSON配置参数、JSONL存储对话,无需数据库和容器,仅依靠文件读写完成人机与AI对系统的控制,兼顾易用性和灵活性。
- 推理驱动:所有交易决策基于持续的逻辑推理和多信号融合,而非简单的规则触发,保障决策的合理性。
- 系统原生:深度适配操作系统能力,可调用浏览器实现网页搜索、通过Telegram发送消息、连接本地设备,打破应用级别的交互限制。
- 实验性与风险提示:处于活跃开发阶段,功能和接口可能频繁变更,严禁用于实盘资金交易(除非完全理解并承担风险),开发者不承诺正确性、可靠性和盈利性,也不承担财务损失责任。
核心功能
- 多维度交易能力
- 统一交易账户(UTA):隔离AI与经纪商交互,所有订单基于IBKR类型系统,适配Alpaca/CCXT等经纪商;
- 类Git交易流程:挂单(stage)-提交(commit)-执行(push),全流程可追溯,支持tradingLog/tradingShow查看历史;
- 前置安全校验(Guard Pipeline):交易执行前的多重防护,避免违规或高风险操作。
- 市场数据与研究能力
- 全品类市场数据:覆盖股票、加密货币、大宗商品、外汇、宏观数据,提供统一的标的搜索和技术指标计算;
- 股权研究:公司档案、财务报表、估值比率、分析师预测、财报日历、内幕交易、市场异动(涨幅/跌幅/成交量榜);
- 新闻管理:RSS源收集+归档检索,支持多维度新闻筛选与阅读。
- AI与智能体能力
- 多AI提供商切换:运行时切换CC/Vercel AI SDK/Agent SDK,无需重启;
- 认知状态持久化:工作记忆、情绪追踪、提交历史,保障智能体记忆连续性;
- 进化模式:双权限体系,普通模式仅可操作
data/brain/,进化模式可访问全项目(包括Bash),支持AI自修改源码。
- 系统级特性
- 热重载:连接器、交易引擎支持运行时启用、禁用、重连,无需重启系统;
- 事件日志:JSONL格式的追加式日志,支持实时订阅和崩溃恢复;
- 跨渠道交互:消息自动分发至最近交互渠道(Telegram/Web UI等),保障交互连贯性。
原理
模块化分层式架构
#mermaid-svg-l56RcTPwO2chVNv1{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-l56RcTPwO2chVNv1 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-l56RcTPwO2chVNv1 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-l56RcTPwO2chVNv1 .error-icon{fill:#552222;}#mermaid-svg-l56RcTPwO2chVNv1 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-l56RcTPwO2chVNv1 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-l56RcTPwO2chVNv1 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-l56RcTPwO2chVNv1 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-l56RcTPwO2chVNv1 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-l56RcTPwO2chVNv1 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-l56RcTPwO2chVNv1 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-l56RcTPwO2chVNv1 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-l56RcTPwO2chVNv1 .marker.cross{stroke:#333333;}#mermaid-svg-l56RcTPwO2chVNv1 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-l56RcTPwO2chVNv1 p{margin:0;}#mermaid-svg-l56RcTPwO2chVNv1 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-l56RcTPwO2chVNv1 .cluster-label text{fill:#333;}#mermaid-svg-l56RcTPwO2chVNv1 .cluster-label span{color:#333;}#mermaid-svg-l56RcTPwO2chVNv1 .cluster-label span p{background-color:transparent;}#mermaid-svg-l56RcTPwO2chVNv1 .label text,#mermaid-svg-l56RcTPwO2chVNv1 span{fill:#333;color:#333;}#mermaid-svg-l56RcTPwO2chVNv1 .node rect,#mermaid-svg-l56RcTPwO2chVNv1 .node circle,#mermaid-svg-l56RcTPwO2chVNv1 .node ellipse,#mermaid-svg-l56RcTPwO2chVNv1 .node polygon,#mermaid-svg-l56RcTPwO2chVNv1 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-l56RcTPwO2chVNv1 .rough-node .label text,#mermaid-svg-l56RcTPwO2chVNv1 .node .label text,#mermaid-svg-l56RcTPwO2chVNv1 .image-shape .label,#mermaid-svg-l56RcTPwO2chVNv1 .icon-shape .label{text-anchor:middle;}#mermaid-svg-l56RcTPwO2chVNv1 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-l56RcTPwO2chVNv1 .rough-node .label,#mermaid-svg-l56RcTPwO2chVNv1 .node .label,#mermaid-svg-l56RcTPwO2chVNv1 .image-shape .label,#mermaid-svg-l56RcTPwO2chVNv1 .icon-shape .label{text-align:center;}#mermaid-svg-l56RcTPwO2chVNv1 .node.clickable{cursor:pointer;}#mermaid-svg-l56RcTPwO2chVNv1 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-l56RcTPwO2chVNv1 .arrowheadPath{fill:#333333;}#mermaid-svg-l56RcTPwO2chVNv1 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-l56RcTPwO2chVNv1 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-l56RcTPwO2chVNv1 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-l56RcTPwO2chVNv1 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-l56RcTPwO2chVNv1 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-l56RcTPwO2chVNv1 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-l56RcTPwO2chVNv1 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-l56RcTPwO2chVNv1 .cluster text{fill:#333;}#mermaid-svg-l56RcTPwO2chVNv1 .cluster span{color:#333;}#mermaid-svg-l56RcTPwO2chVNv1 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-l56RcTPwO2chVNv1 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-l56RcTPwO2chVNv1 rect.text{fill:none;stroke-width:0;}#mermaid-svg-l56RcTPwO2chVNv1 .icon-shape,#mermaid-svg-l56RcTPwO2chVNv1 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-l56RcTPwO2chVNv1 .icon-shape p,#mermaid-svg-l56RcTPwO2chVNv1 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-l56RcTPwO2chVNv1 .icon-shape .label rect,#mermaid-svg-l56RcTPwO2chVNv1 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-l56RcTPwO2chVNv1 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-l56RcTPwO2chVNv1 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-l56RcTPwO2chVNv1 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Scheduling --- what fires
Alice进程---agent运行时+研究
Surfaces --- where users interact
Core --- orchestration
spawns headless run
HTTP
.mcp.json
inbox_push
UTA service --- broker carrier
Trading Git
Guards
Brokers
FX + Snapshots
Domain --- Alice-side
Market Data
Analysis
News
Workspace agent's home
(dir + git + native CLI)
claude/codex/opencode
pi/shell session
Web UI
Inbox tab
MCP Server
ToolCenter
- Workspace ToolCenter
InboxStore
Credential vault
injected into workspaces
UTA SDK
HTTP client
Cron / Webhook
解读:
- 核心层(Core)。作为系统的中枢,负责核心能力的调度与管理:
- ProviderRouter:AI提供商路由,实现不同AI后端的动态切换;
- AgentCenter:智能体中心,统筹AI代理的核心逻辑;
- ToolCenter:工具中心,管理所有扩展工具的注册与调用;
- Session Store:会话存储,维护交互会话状态;
- Event Log:事件日志,基于JSONL的追加式持久化日志,支持实时订阅和崩溃恢复;
- ConnectorCenter:连接器中心,管理所有外部交互接口的注册与消息分发。
- AI 提供商层(Providers)。提供AI能力的底层支撑,支持运行时动态切换:
- CC CLI(子进程模式);
- Vercel AI SDK(进程内模式);
- Anthropic Agent SDK(
@anthropic-ai/claude-agent-sdk)
- 扩展层(Extensions)。系统功能的核心载体,每个扩展为独立工具包:
- OpenBB Data(opentypebb):TypeScript原生的市场数据引擎,覆盖股票、加密货币、大宗商品、外汇、宏观数据,提供统一的符号搜索和技术指标计算能力,还可暴露兼容OpenBB的HTTP API;
- Analysis Kit:分析工具集,支撑各类量化与基本面分析;
- Unified Trading Account (UTA):统一交易账户,核心交易实体,包含:
- Trading Git:类Git的交易流程(挂单、提交、执行),每笔提交生成8位哈希,支持历史回溯;
- Guards:执行前安全校验(最大持仓、冷却时间、标的白名单等);
- Brokers:经纪商连接(基于 IBKR 类型系统,Alpaca/CCXT 适配兼容);
- News Collector:新闻收集器,基于可配置RSS源收集新闻,提供globNews/grepNews/readNews等检索工具;
- Brain:智能体认知状态,包含工作记忆、情绪追踪、提交历史,实现持久化大脑;
- Browser:浏览器集成,支持网页搜索等系统级交互。
- 任务层(Tasks)。负责定时任务与核心触发逻辑:
- Cron Engine:事件驱动的定时任务系统,由AI驱动任务执行,消息自动分发至最近交互渠道;
- Heartbeat:心跳机制,定期检查市场状态,通过
HEARTBEAT_OK/CHAT_YES/CHAT_NO协议反馈状态。
- 接口层(Interfaces)。用户交互的入口,支持多端适配:
- Web UI:本地聊天界面,支持实时SSE流、子频道(按频道配置AI)、投资组合仪表盘、全维度配置管理(交易、数据源、连接器、AI提供商等);
- 连接器:Telegram、MCP Ask等外部交互接口,支持运行时热插拔。
技术栈
- TypeScript:全项目核心开发语言,保障类型安全,适配前端、后端、工具链全场景
- AI 相关:
@anthropic-ai/claude-agent-sdk、Vercel AI SDK、Claude Code CLI; - 交易相关:
@traderalice/ibkr(IBKR 类型系统)、Alpaca API、CCXT; - 市场数据:OpenBB(opentypebb,TypeScript原生封装);
- 前端/UI:Vite(构建工具)、HTML5、SSE(实时流)、Web UI相关组件;
- 工程化:pnpm(包管理)、vitest(测试)、Git(版本控制)、Cron(定时任务);
- 运行时:Node.js(后端)、浏览器(前端)、子进程(Claude Code调用);
- 数据存储:文件系统(Markdown/JSON/JSONL),无数据库依赖;
- 通信协议:SSE(实时流)、HTTP(OpenBB API)、自定义连接器协议(Telegram/MCP Ask)
- 配置文件:
- tsconfig.json(TypeScript 配置)
- vitest.config.ts(测试配置)
- vite.config.ts(前端构建)
- pnpm-workspace.yaml(多包管理)
bash
git clone https://github.com/TraderAlice/OpenAlice.git
cd OpenAlice
pnpm install
pnpm start
pnpm dev
可选:配置经纪商API(IBKR/Alpaca/CCXT)、Telegram Bot Token(如需Telegram连接器)、AI提供商密钥(Claude/Anthropic)。
ai-provider.json:配置AI提供商(Claude Code/Vercel AI SDK/Agent SDK);
交易配置:UTA信息、经纪商API密钥、Guard规则(最大持仓、标的白名单等);
数据源配置:OpenBB数据来源、RSS新闻源等;
连接器配置:Telegram/MCP Ask 密钥、Web UI端口等。
浏览器打开http://localhost:5173开始体验。
AKQuant
开源(GitHub,1.5K Star,199 Fork)Python量化投研(回测)项目,官方文档。
| 指标名 | 含义 | 单位/类型 | 计算说明 |
|---|---|---|---|
start_time |
回测开始时间 | Datetime | 对应回测数据的第一个Bar的时间 |
end_time |
回测结束时间 | Datetime | 对应回测数据的最后一个Bar的时间 |
duration |
回测总时长 | Timedelta | end_time-start_time |
total_bars |
总Bar数量 | Int | 回测经历的K线总数 |
trade_count |
交易笔数 | Int | 完成平仓的交易总数(Round-trip) |
initial_market_value |
初始市值 | Float | 初始资金(通常为Cash) |
end_market_value |
结束市值 | Float | 回测结束时的总资产(Cash+持仓市值) |
total_pnl |
总盈亏 | Float | end_market_value-initial_market_value |
unrealized_pnl |
未实现盈亏 | Float | 结束时持仓的浮动盈亏 |
total_return_pct |
总收益率 | %(百分比) | (结束市值-初始市值)/初始市值*100 |
annualized_return |
年化收益率 | Ratio(小数) | (1+总收益率)^(1/年数)-1 |
volatility |
年化波动率 | Ratio(小数) | 收益率标准差*sqrt(252) |
total_profit |
总盈利 | Float | 所有盈利交易的盈利之和 |
total_loss |
总亏损 | Float | 所有亏损交易的亏损之和 |
total_commission |
总手续费 | Float | 交易产生的总佣金 |
max_drawdown |
最大回撤比率 | Ratio(小数) | 历史最大回撤幅度 |
max_drawdown_value |
最大回撤金额 | Float | 历史最大回撤的绝对金额 |
max_drawdown_pct |
最大回撤百分比 | %(百分比) | max_drawdown*100 |
win_rate |
胜率 | %(百分比) | 盈利次数/总交易次数*100 |
loss_rate |
败率 | %(百分比) | 亏损次数/总交易次数*100 |
winning_trades |
盈利次数 | Int | 盈利大于0的交易次数 |
losing_trades |
亏损次数 | Int | 盈利小于0的交易次数 |
avg_pnl |
平均盈亏 | Float | 每笔交易的平均净盈亏 |
avg_return_pct |
平均收益率 | %(百分比) | 每笔交易收益率的平均值 |
avg_trade_bars |
平均持仓K线数 | Float | 平均每笔交易持有的Bar数量 |
avg_profit |
平均盈利 | Float | 盈利交易的平均金额 |
avg_profit_pct |
平均盈利比例 | %(百分比) | 盈利交易的平均收益率 |
avg_winning_trade_bars |
平均盈利持仓时长 | Float | 盈利交易的平均持仓Bar数 |
avg_loss |
平均亏损 | Float | 亏损交易的平均金额 |
avg_loss_pct |
平均亏损比例 | %(百分比) | 亏损交易的平均收益率 |
avg_losing_trade_bars |
平均亏损持仓时长 | Float | 亏损交易的平均持仓Bar数 |
largest_win |
最大单笔盈利 | Float | 单笔交易的最大盈利金额 |
largest_win_pct |
最大单笔盈利比例 | %(百分比) | 单笔交易的最大收益率 |
largest_win_bars |
最大盈利持仓时长 | Float | 产生最大盈利那笔交易的持仓Bar数 |
largest_loss |
最大单笔亏损 | Float | 单笔交易的最大亏损金额 |
largest_loss_pct |
最大单笔亏损比例 | %(百分比) | 单笔交易的最大亏损率 |
largest_loss_bars |
最大亏损持仓时长 | Float | 产生最大亏损那笔交易的持仓Bar数 |
max_wins |
最大连续盈利次数 | Int | 连续盈利的最多次数 |
max_losses |
最大连续亏损次数 | Int | 连续亏损的最多次数 |
sharpe_ratio |
夏普比率 | Ratio | (年化收益率-无风险利率)/年化波动率。无风险利率默认0 |
sortino_ratio |
索提诺比率 | Ratio | (年化收益率-无风险利率)/下行波动率。只考虑下行风险 |
profit_factor |
盈亏比 | Ratio | 总盈利/abs(总亏损) |
ulcer_index |
溃疡指数 | Ratio | 衡量回撤深度和持续时间的指标 |
upi |
溃疡绩效指数 | Ratio | (年化收益率-无风险利率)/溃疡指数 |
equity_r2 |
权益曲线R² | Ratio | 权益曲线相对于时间的线性回归拟合度(0-1),越接近1表示收益越稳定 |
std_error |
标准误差 | Float | 权益曲线回归的标准误差 |
calmar_ratio |
卡尔玛比率 | Ratio | 年化收益率/最大回撤比率 |
exposure_time_pct |
市场暴露时间百分比 | %(百分比) | 持有仓位(非空仓)的时间占比 |
var_95 |
95%风险价值 | Ratio(小数) | 95%置信度下的每日最大亏损比例 |
var_99 |
99%风险价值 | Ratio(小数) | 99%置信度下的每日最大亏损比例 |
cvar_95 |
95%条件风险价值 | Ratio(小数) | 超过95%VaR阈值后的平均亏损比例(预期亏损) |
cvar_99 |
99%条件风险价值 | Ratio(小数) | 超过99%VaR阈值后的平均亏损比例(预期亏损) |
sqn |
系统质量指数(SQN) | Float | (平均盈亏/盈亏标准差)*sqrt(交易次数) |
kelly_criterion |
凯利公式比例 | Ratio(小数) | 胜率-(败率/盈亏比) |
解读:
-
风险类
- 最大回撤(Max Drawdown):衡量策略在最坏情况下的表现。例如30%的最大回撤意味着如果你在最高点买入,最多可能会亏损30%。通常认为最大回撤越小越好。
- 波动率(Volatility):衡量收益的不确定性。波动率越高,收益起伏越大。
- 风险价值(VaR)与条件风险价值(CVaR):
- VaR(Value at Risk):在特定置信度下(如95%),策略在一天内可能发生的最大损失。
- CVaR(Conditional VaR):又称Expected Shortfall,衡量当损失超过VaR时的平均损失。比VaR更能反映极端尾部风险。
- 市场暴露时间(Exposure Time):策略持有头寸(非空仓)的时间占比。低暴露时间意味着资金大部分时间是安全的(现金),但也可能错失机会。
-
收益风险比类
- 夏普比率(Sharpe Ratio):投资界的"性价比"指标。它衡量的是每承担一单位总风险,产生了多少超额收益。通常大于1是可接受的,大于2是非常优秀的。
- 索提诺比率(Sortino Ratio):类似于夏普比率,但只考虑"有害的波动"(下行波动)。如果一个策略经常暴涨(上行波动大),夏普比率可能会低估它,而索提诺比率则更公允。
- 卡尔玛比率(Calmar Ratio):年化收益率与最大回撤之比。衡量"收益回撤比",是很多基金经理非常看重的指标。
- 系统质量指数(SQN):衡量交易系统的稳定性。SQN越高,越容易通过加大仓位来获利。一般认为>2.0为合格,>3.0为优秀,>7.0为圣杯。
- 凯利公式(Kelly Criterion):基于胜率和盈亏比计算的理论最佳仓位比例。注意凯利公式通常过于激进,实盘中常使用半凯利(Half-Kelly)甚至更低比例。
实战
安装:pip install akquant akshare
py
import akshare as ak
from akquant import Strategy, run_backtest
# 1. 准备数据,利用AKShare来获取数据
df = ak.stock_zh_a_daily(symbol="sh600000", start_date="20250101", end_date="20260212")
# 2. 策略定义
class MyStrategy(Strategy):
# 3. 策略逻辑
def on_bar(self, bar):
# 获取当前持仓
current_pos = self.get_position(bar.symbol)
# 1. 当收盘价 > 开盘价 (阳线) -> 买入
if current_pos == 0 and bar.close > bar.open:
self.buy(bar.symbol, 100) # 买入 100 股
# 2. 当收盘价 < 开盘价 (阴线) -> 卖出
elif current_pos > 0 and bar.close < bar.open:
self.close_position(bar.symbol) # 卖出所有持仓
# 3. 运行回测
print("开始回测...")
result = run_backtest(
data=df, # 输入数据
strategy=MyStrategy, # 输入策略
cash=100000.0, # 初始资金
symbol="sh600000" # 交易的股票代码
)
# 4. 查看结果
print(result) # 跟 print(result.metrics_df) 等效
# 查看详细的成交指标
print(result.trades_df)
# 查看详细的订单指标
print(result.orders_df)
# 查看详细的持仓指标
print(result.positions_df)
result.trades_df包含每笔平仓交易的详细信息。
| 指标名 | 含义 | 单位/类型 | 计算说明 |
|---|---|---|---|
symbol |
标的代码 | String | 交易标的 |
entry_time |
开仓时间 | Datetime | 开仓成交时间 |
exit_time |
平仓时间 | Datetime | 平仓成交时间 |
entry_price |
开仓均价 | Float | 开仓成交均价 |
exit_price |
平仓均价 | Float | 平仓成交均价 |
quantity |
交易数量 | Float | 成交数量 |
side |
交易方向 | String | long(做多)或short(做空) |
pnl |
毛盈亏 | Float | 不包含手续费的盈亏 |
net_pnl |
净盈亏 | Float | pnl-commission |
return_pct |
收益率 | Float | 交易收益率(小数) |
commission |
手续费 | Float | 交易产生的佣金 |
duration_bars |
持仓K线数 | Int | 持仓期间经历的Bar数量 |
duration |
持仓时长 | Timedelta | exit_time-entry_time |
result.orders_df包含所有历史订单记录(包括已成交、取消、拒绝等)。
| 指标名称(Name) | 含义(Description) | 单位/类型 | 计算说明 |
|---|---|---|---|
id |
订单ID | String | 唯一标识符 |
symbol |
标的代码 | String | 交易标的 |
side |
订单方向 | String | buy(买入)或sell(卖出) |
order_type |
订单类型 | String | market(市价),limit(限价),stop(止损) |
quantity |
订单数量 | Float | 下单数量 |
filled_quantity |
成交数量 | Float | 实际成交数量 |
limit_price |
限价 | Float | 限价单的价格(Market单为NaN) |
stop_price |
触发价 | Float | 止损单的触发价格 |
avg_price |
成交均价 | Float | 实际成交的平均价格 |
commission |
手续费 | Float | 订单产生的手续费 |
status |
订单状态 | String | filled,cancelled,rejected等 |
time_in_force |
有效期 | String | gtc,day,ioc等 |
created_at |
创建时间 | Datetime | 订单创建时间 |
result.positions_df包含每日(或每Bar)持仓快照。
| 指标名称(Name) | 含义(Description) | 单位/类型 | 计算说明 |
|---|---|---|---|
date |
日期 | Datetime | 持仓快照时间 |
symbol |
标的代码 | String | 交易标的 |
long_shares |
多头持仓 | Float | 多头方向的持仓数量 |
short_shares |
空头持仓 | Float | 空头方向的持仓数量 |
close |
收盘价 | Float | 当时的收盘价 |
equity |
账户权益 | Float | 包含持仓盈亏的账户总权益 |
market_value |
持仓市值 | Float | 当前持仓的市场价值 |
margin |
占用保证金 | Float | 当前持仓占用的保证金 |
unrealized_pnl |
未实现盈亏 | Float | 持仓浮动盈亏 |