algo-trader
algo-trader 是一款基于 Python 开发的开源算法交易策略构建与执行框架,旨在帮助开发者打造、回测并运行自定义的交易机器人。它主要解决了量化交易中策略验证难、实时执行门槛高的问题,让用户能够在本地环境中对策略进行严谨的历史数据回测,并在条件成熟时通过对接券商 API 实现实时自动交易。
该工具特别适合具备一定编程基础的量化开发者、金融研究人员以及希望尝试自动化交易的极客用户。虽然其实时交易功能目前仍需用户自行适配具体的券商接口(如 Interactive Brokers),但其回测引擎已完全就绪,可立即投入使用。
algo-trader 的技术亮点在于其灵活的流水线(Pipeline)架构:数据从源头流入,经过一系列可自由组合的处理器(如技术指标计算),最终输出交易信号。系统支持将完整的策略流程序列化为 JSON 文件,便于保存、加载及集成到各类界面中。此外,它内置了 MongoDB 作为数据存储后端,并集成了 tulipy 库以高效计算各类技术分析指标,为策略研发提供了坚实的技术底座。需要注意的是,该项目仍在持续迭代中,是探索算法交易逻辑的理想实验场。
使用场景
一位量化交易开发者希望验证基于均线交叉的自定义策略在历史数据中的表现,并准备将其部署到实盘环境中。
没有 algo-trader 时
- 回测框架从零搭建:开发者需要手动编写代码来加载历史 K 线数据、管理时间序列状态以及计算技术指标,耗费大量时间在基础设施而非策略逻辑上。
- 策略迭代效率低下:每次修改策略参数或逻辑后,必须重新运行整个脚本,缺乏统一的流水线机制来序列化配置和复用上下文,导致实验记录混乱。
- 实盘对接门槛高:将本地回测代码迁移至实盘时,需重写数据摄入和订单执行模块,难以保证回测环境与实盘逻辑的一致性,存在巨大的“过拟合”风险。
- 技术指标集成困难:需要自行寻找并绑定底层 C 库来计算复杂的金融指标,容易因环境配置问题导致开发中断。
使用 algo-trader 后
- 开箱即用的回测引擎:直接利用内置的 MongoDB 后端和 Tulip Indicators 绑定,几行代码即可构建包含数据源、处理器和策略执行的完整流水线,专注核心算法。
- 灵活的管道式架构:通过 JSON 序列化保存完整的 Pipeline 配置,轻松在不同参数组合间切换并复用共享上下文(SharedContext),大幅提升策略研发与复现效率。
- 回测到实盘的无缝衔接:依托统一的 Processor 接口,同一套策略逻辑既可在本地进行高精度回测,也能在接入 IB 等券商 API 后直接用于实时交易,确保逻辑一致性。
- 丰富的扩展能力:支持自定义处理器顺序和数据附件(Attachments),方便在 K 线流转过程中动态添加元数据或中间计算结果,满足复杂策略需求。
algo-trader 通过标准化的流水线架构,消除了从策略构思、历史回测到实盘部署之间的技术断层,让量化开发者能专注于策略本身的盈利逻辑。
运行环境要求
- 未说明 (基于 Python 和 Docker,通常支持 Linux
- macOS
- Windows)
不需要
未说明

快速开始
算法交易员
交易策略构建器、回测工具和实时交易系统。
pip install algorithmic-trader
简介
algo-trader 是一个算法交易策略执行器和回测工具的实现。 它能够在本地进行策略回测,并通过您的经纪商 API 实现实时交易。
请注意,这目前仍处于 开发中,该交易系统缺少外部市场数据和交易提供商支持。 如果您希望使用该交易系统进行真实交易,您需要自行实现与经纪商 API 的对接。 尽管实时交易功能尚未完成,但回测功能已经完全可用,因此您可以先对已实现的策略进行回测,并在实时交易功能完善后将其应用于实际交易中。
algo-trader 使用 Python 编写,当前的技术栈包括:
- MongoDB 作为回测策略的后端数据存储;
- tulipy —— Tulip Indicators 的 Python 绑定库, 用于计算技术指标;
- ib_client(可选)—— 用于与 Interactive Brokers 网关通信的 Python 库。仅当您计划通过 IB 进行实盘交易时才需要此库。
架构

流水线
Pipeline 是流式处理的基本协调者。它负责从 Source 读取数据, 并将其传递给流水线中的各个处理器。除了协调各组件外,它本身并不包含任何业务逻辑。 流水线及其所有子组件都可以被序列化为 JSON 格式,这样系统就可以在文件中定义、加载和保存整个流水线及其配置。 这一特性非常重要,因为它可以作为基于 UI/CLI 的运行程序的前端界面。 示例的可序列化(且可运行)流水线可以在 examples/pipeline-templates 目录中找到。 如何将这些流水线加载到 Pipeline 中,并使用 PipelineRunner 来运行它们的示例,可以在 main.py 中找到。
PipelineRunner
PipelineRunner 接受一个初始的 Pipeline 列表或单个流水线,
以及一个可选的起始 SharedContext。如果在构造时未提供
SharedContext,则会初始化一个新的上下文。
每个 Pipeline 都会按照其在列表中的顺序,使用前一个上下文调用 run() 方法。
上下文会在每个 Pipeline 中传递,从而允许在数据收集和输出之前进行一些操作,
如加载、缓存和验证。
源
Source 是蜡烛数据迭代器的实现。它是流水线的起点, 也是流入流水线并被处理的蜡烛数据的来源。
处理器
Processor 是流水线中的主要处理单元。处理器可以按照任意顺序构建, 而蜡烛数据则会从源开始,依次流经所有处理器。 每个处理器负责将其处理后的蜡烛数据发送到下一个处理器(除非有特殊原因不这样做)。
process() 函数在处理每根蜡烛时,还会接收一个名为 SharedContext 的对象。
该上下文是一个内存中的键值存储实例,用于在处理器之间共享上下文和信息。
另一种在处理器之间共享数据的方式是利用蜡烛本身的 attachments 字段。
该字段用于存储蜡烛的元数据,例如与该时间点相关的计算结果和状态。
蜡烛附件在整个流水线中都是持久化的。
重处理
重处理是一种功能,允许处理器将已经处理过的蜡烛重新发送给下一个处理器。 重处理对于那些在流水线主流程之外执行某些逻辑的处理器非常有用,例如在发生事件、外部触发、市场或交易提供商出现问题等情况时。 重处理的示例可以在 AssetCorrelationProcessor 中找到。
事件
Event 如其名称所示,定义了系统中发生的某个事件。 它遵循与蜡烛相同的流动路径,在处理器之间传递。每个处理器都有责任将事件传播到下一个处理器(如果需要的话)。
由于流水线是数据驱动的,而不是时间驱动的,因此事件可以用作检查点,以指示数据流中发生的事情。 例如,从数据库源和实时市场数据源运行同一套流水线,可能会因为处理器依赖于时间而产生不同的效果。
为了使回测具有参考价值,从数据库快速运行和实时运行必须保持一致的行为。
策略
策略由 StrategyProcessor 按照每根蜡烛逐个执行。 策略负责执行交易逻辑,并发出信号 (StrategySignal)。 当策略发出交易信号时,StrategyProcessor 会捕获该信号,并将其传递给 SignalsExecutor 进行执行。
终止器
Terminator 是流水线中的可选最后一环。它会在流水线的最后阶段执行, 即当 Source 迭代器中的数据被完全消费完毕时。 终止器对于单元测试、回测和环境清理非常有用。
本地运行
algo-trader 使用 MongoDB 作为数据存储。要在本地运行 MongoDB,请使用 docker-compose。
docker-compose -f docker-compose.yml up -d
命令行界面
命令行界面是一个简单的系统运行接口。它可以用来运行流水线、回测策略或实盘运行策略。 目前,命令行界面尚未完全实现,大部分功能仅限于描述和列出可用的处理器和策略。 如果不带任何参数运行命令行界面,将会显示帮助菜单。
通过 PIP 安装该软件包后,即可使用 algo-trader 命令。
如果您选择克隆此仓库,则应使用 python main.py 作为入口点。
algo-trader
列出所有可用的处理器:
algo-trader processor list
描述特定的处理器:
algo-trader processor describe <processor_name>
同样的模式也适用于策略和源。 要运行流水线,您需要创建一个流水线模板文件,并使用命令行界面来运行它。
algo-trader pipeline run <pipeline_template_file>
易于运行的示例:
来自 Yahoo Finance 的数据加载器可在 src/algotrader/examples/pipeline-templates/build_daily_yahoo_loader.py 中找到。
运行此示例管道会将历史数据从 Yahoo Finance 加载到 MongoDB:algo-trader pipeline run examples/pipeline-templates/build_daily_yahoo_loader.json来自 Binance 的数据加载器可在 src/algotrader/examples/pipeline-templates/build_daily_binance_loader.json 中找到。
运行此示例管道会将历史数据从 Binance 加载到 MongoDB:algo-trader pipeline run examples/pipeline-templates/build_daily_binance_loader.json来自 Binance 的实时加密货币管道可在 src/algotrader/examples/pipeline-templates/build_realtime_binance.json 中找到。
运行此示例管道将处理来自 Binance 的实时秒级蜡烛数据:algo-trader pipeline run examples/pipeline-templates/build_realtime_binance.json
代码示例
带有注释的简短代码示例。以下是通常如何将 algo-trader 作为库来使用,以从 Yahoo Finance 将股票数据加载并计算技术指标,然后存储到 MongoDB 中的方法:
from datetime import datetime, timedelta
from algotrader.calc.calculations import TechnicalCalculation
from algotrader.entities.timespan import TimeSpan
from algotrader.pipeline.configs.indicator_config import IndicatorConfig
from algotrader.pipeline.configs.technical_processor_config import TechnicalsProcessorConfig
from algotrader.pipeline.pipeline import Pipeline
from algotrader.pipeline.processors.candle_cache import CandleCache
from algotrader.pipeline.processors.storage_provider_sink import StorageSinkProcessor
from algotrader.pipeline.processors.technicals import TechnicalsProcessor
from algotrader.pipeline.runner import PipelineRunner
from algotrader.pipeline.sources.yahoo_finance_history import YahooFinanceHistorySource
from algotrader.storage.mongodb_storage import MongoDBStorage
def main():
# 创建一个 MongoDB 存储连接器
mongodb_storage = MongoDBStorage()
# 创建一个 Yahoo Finance 数据源连接器
source = YahooFinanceHistorySource(
['AAPL', 'MSFT', 'GOOG'], # 传入要获取的股票代码列表
TimeSpan.Day, # 选择蜡烛时间周期
datetime.now() - timedelta(days=100), # 开始获取数据的日期
datetime.now() # 结束获取数据的日期
)
# 创建一个 MongoDB 汇流处理器,它会使用存储连接器将所有处理后的蜡烛数据保存到 MongoDB。
sink = StorageSinkProcessor(mongodb_storage)
# 缓存处理器充当内存中的缓存,使各个处理器之间可以共享数据。
cache_processor = CandleCache(sink)
# 创建一个技术指标处理器,该处理器会为每根蜡烛添加指标数据。
# 然后我们将蜡烛传递给缓存处理器,以便稍后可以使用这些数据,并在需要时与其他处理器共享。
technicals_config = TechnicalsProcessorConfig([
IndicatorConfig('sma5', TechnicalCalculation.SMA, [5]),
IndicatorConfig('sma20', TechnicalCalculation.SMA, [20]),
IndicatorConfig('cci7', TechnicalCalculation.CCI, [7]),
IndicatorConfig('cci14', TechnicalCalculation.CCI, [14]),
IndicatorConfig('rsi7', TechnicalCalculation.CCI, [7]),
IndicatorConfig('rsi14', TechnicalCalculation.CCI, [14]),
IndicatorConfig('stddev5', TechnicalCalculation.STDDEV, [5]),
])
processor = TechnicalsProcessor(technicals_config, cache_processor)
# 构建管道对象。该对象可以序列化为 JSON,保存并在需要时重新加载。
pipeline = Pipeline(source, processor)
# 将管道对象提供给执行器,由执行器来执行它。
# 执行器可以依次执行多个管道。
# 这使得构建一个管道流程成为可能,其中每个管道都依赖于另一个管道。
PipelineRunner(pipeline).run()
在本地使用此仓库
虚拟环境
最好使用虚拟环境来运行 algo-trader。
python3 -m venv run
source run/bin/activate
pip3 install -r requirements.txt
运行测试
- 单元测试:
./scripts/test-unit.sh - 集成测试(需要运行 IB Gateway):
./scripts/test-integration.sh - 全部测试:
./scripts/test-all.sh
贡献
欢迎并非常需要大家的贡献。 请参阅贡献指南。
版本历史
v0.0.62023/03/02v0.0.52023/01/08v0.0.42022/12/28v0.0.32022/12/28v0.0.22022/12/28v0.0.12022/12/28相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备