DEV Community

Henry Lin
Henry Lin

Posted on

第1章 什么是 QuantConnect/Lean

第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/            # 程序入口
Enter fullscreen mode Exit fullscreen mode

Lean CLI(推荐用于策略开发)

Lean CLI 是命令行工具,简化了 Lean 的使用:

# 安装 CLI
pip install lean

# 创建项目
lean project-create

# 运行回测
lean backtest

# 启动研究环境
lean research
Enter fullscreen mode Exit fullscreen mode

何时使用哪个?

场景 推荐工具
开发交易策略 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
Enter fullscreen mode Exit fullscreen mode

多资产类别支持

资产类型 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     (滑点模型)        │  │
│  └──────────────────────────────────────┘  │
└─────────────────────────────────────────────┘
Enter fullscreen mode Exit fullscreen mode

1.4 架构概览

                        ┌─────────────┐
                        │   用户输入   │
                        └──────┬──────┘
                               │
                        ┌──────▼──────┐
                        │  Launcher   │
                        └──────┬──────┘
                               │
        ┌──────────────────────┼──────────────────────┐
        │                      │                      │
┌───────▼────────┐    ┌────────▼────────┐    ┌───────▼────────┐
│  Algorithm     │    │   Data Feed     │    │   Transaction  │
│  (策略逻辑)    │    │  (数据提供器)    │    │   (交易处理)    │
└───────┬────────┘    └────────┬────────┘    └───────┬────────┘
        │                      │                      │
        └──────────────────────┼──────────────────────┘
                               │
                        ┌──────▼──────┐
                        │   Results    │
                        │  (结果输出)   │
                        └─────────────┘
Enter fullscreen mode Exit fullscreen mode

1.5 本地与云端混合开发

Lean 支持本地开发和云端部署的混合模式:

┌─────────────┐         ┌─────────────┐
│  本地开发    │  <--->  │  云端平台    │
│  (Lean CLI) │         │(QuantConnect)│
└─────────────┘         └─────────────┘
     • 完整控制              • 数据获取
     • 调试方便              • 云计算资源
     • 数据隐私              • 策略分享
Enter fullscreen mode Exit fullscreen mode

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")
Enter fullscreen mode Exit fullscreen mode

Top comments (0)