第1章 什么是 Lean?
本章介绍 Lean 量化交易引擎的基本概念、核心功能以及 Lean 与 Lean CLI 的区别。
1.1 项目简介
Lean 是 QuantConnect 开源的事件驱动算法交易平台,专为量化交易开发者设计。它提供了完整的策略研究、历史回测、参数优化和实盘交易能力。
核心功能
| 功能模块 | 说明 |
|---|---|
| 策略研究 | 支持在 Jupyter Notebook 中进行数据探索和策略验证 |
| 历史回测 | 基于历史数据模拟交易策略表现 |
| 参数优化 | 自动搜索最优策略参数 |
| 实盘交易 | 支持多家券商的实盘接入 |
| 多资产类别 | 股票、期权、期货、外汇、加密货币等 |
支持的编程语言
- C# - 原生语言,性能最佳
- Python - 通过 Python.NET 集成,生态丰富
1.2 Lean vs Lean CLI
Lean Engine(本项目)
Lean Engine 是核心交易引擎,包含:
Lean/
├── Engine/ # 核心引擎
├── Algorithm/ # 算法基类
├── Algorithm.CSharp/ # C# 示例策略
├── Algorithm.Python/ # Python 示例策略
├── Algorithm.Framework/ # 框架化模型
├── Common/ # 通用组件
├── Brokerages/ # 券商接口
└── Launcher/ # 程序入口
Lean CLI(推荐用于策略开发)
Lean CLI 是命令行工具,简化了 Lean 的使用:
# 安装 CLI
pip install lean
# 创建项目
lean project-create
# 运行回测
lean backtest
# 启动研究环境
lean research
何时使用哪个?
| 场景 | 推荐工具 |
|---|---|
| 开发交易策略 | Lean CLI |
| 贡献 Lean 源码 | Lean Engine |
| 学习内部机制 | Lean Engine |
| 快速验证想法 | Lean CLI |
1.3 核心特性
事件驱动架构
Lean 采用事件驱动架构,算法响应各种事件:
from AlgorithmImports import *
class MyAlgorithm(QCAlgorithm):
def Initialize(self):
# 初始化设置
self.AddEquity("SPY", Resolution.Minute)
def OnData(self, data):
# 每个数据点触发
pass
def OnOrderEvent(self, orderEvent):
# 订单事件触发
pass
def OnEndOfDay(self, symbol):
# 每日收盘时触发
pass
多资产类别支持
| 资产类型 | Add 方法 | 市场示例 |
|---|---|---|
| 股票 | AddEquity() |
USA, China, India |
| 外汇 | AddForex() |
EURUSD, USDJPY |
| 期货 | AddFuture() |
ES, NQ, CL |
| 期权 | AddOption() |
SPY, AAPL |
| 加密货币 | AddCrypto() |
BTCUSD, ETHUSD |
| CFD | AddCfd() |
各种差价合约 |
| 指数 | AddIndex() |
SPX, VIX |
模块化设计
Lean 的每个组件都可以自定义:
┌─────────────────────────────────────────────┐
│ QCAlgorithm │
│ ┌──────────────────────────────────────┐ │
│ │ Alpha Model (交易信号生成) │ │
│ │ Portfolio Model (组合构建) │ │
│ │ Execution Model (订单执行) │ │
│ │ Risk Model (风险控制) │ │
│ │ Universe Model (证券选择) │ │
│ └──────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────┐ │
│ │ Brokerage (券商接口) │ │
│ │ Data Feed (数据源) │ │
│ │ Fill Model (成交模型) │ │
│ │ Fee Model (手续费模型) │ │
│ │ Slippage Model (滑点模型) │ │
│ └──────────────────────────────────────┘ │
└─────────────────────────────────────────────┘
1.4 架构概览
┌─────────────┐
│ 用户输入 │
└──────┬──────┘
│
┌──────▼──────┐
│ Launcher │
└──────┬──────┘
│
┌──────────────────────┼──────────────────────┐
│ │ │
┌───────▼────────┐ ┌────────▼────────┐ ┌───────▼────────┐
│ Algorithm │ │ Data Feed │ │ Transaction │
│ (策略逻辑) │ │ (数据提供器) │ │ (交易处理) │
└───────┬────────┘ └────────┬────────┘ └───────┬────────┘
│ │ │
└──────────────────────┼──────────────────────┘
│
┌──────▼──────┐
│ Results │
│ (结果输出) │
└─────────────┘
1.5 本地与云端混合开发
Lean 支持本地开发和云端部署的混合模式:
┌─────────────┐ ┌─────────────┐
│ 本地开发 │ <---> │ 云端平台 │
│ (Lean CLI) │ │(QuantConnect)│
└─────────────┘ └─────────────┘
• 完整控制 • 数据获取
• 调试方便 • 云计算资源
• 数据隐私 • 策略分享
1.6 示例:第一个 Lean 算法
下面是一个最简单的 Lean 算法示例:
from AlgorithmImports import *
class HelloWorldAlgorithm(QCAlgorithm):
"""
最简单的 Lean 算法示例
功能:买入并持有 SPY
"""
def Initialize(self):
# 1. 设置回测时间范围
self.SetStartDate(2023, 1, 1) # 开始日期
self.SetEndDate(2023, 12, 31) # 结束日期
self.SetCash(100000) # 初始资金
# 2. 添加证券
self.AddEquity("SPY", Resolution.Daily)
# 3. 设置benchmark
self.SetBenchmark("SPY")
def OnData(self, data):
# 4. 如果还没有持仓,买入SPY
if not self.Portfolio.Invested:
self.SetHoldings("SPY", 1) # 使用100%资金买入
self.Debug("Purchased SPY")
Top comments (0)