Lean — 优秀好用的开源量化交易平台

article/2025/10/25 19:27:58

Lean 是 QuantConnect 开源的一款非常强大的开源量化交易平台,可以回测或运行Python或者C#写的策略,并在代码仓库中内置了上百个C#和Python的策略算法。

这个开源的算法交易引擎,专为让用户方便轻松地进行策略研究、回测和实时交易而构建。它集成了常见的数据提供商和券商,因此还可以快速部署算法交易策略。

168c63c242384005404b7130f7bafdf4.png

LEAN Engine 的核心是用 C# 编写的;但它可以在 Linux、Mac 和 Windows 操作系统上无缝运行。它支持用 Python 3.6+ 或 C# 编写的算法。

引擎分为许多模块化部分,可以在不接触其他文件的情况下对某个模块进行扩展。

最重要的几个模块是:

  • 结果处理(IResultHandler)处理来自算法交易引擎的所有消息。决定应该发送什么,以及消息应该去哪里。结果处理系统可以将消息发送到本地 GUI 或 Web 界面。

  • 数据源(IDataFeed)连接并下载算法交易引擎所需的数据。从磁盘文件中读取文件进行回测;实时交易则连接到一个流并生成数据对象。

  • 事务处理(ITransactionHandler)处理新的订单请求;要么使用算法提供的模拟模型,要么使用实际券商。

  • 实时事件管理(IRealtimeHandler)生成实时事件 - 例如一天结束的事件。触发对实时事件处理程序的回调。

  • 算法状态设置(ISetupHandler)配置算法资金、投资组合和请求的数据。初始化所需的所有状态参数。

这些都可以从 Launcher 项目中的 config.json 文件进行配置。

1.Leon 安装教程

由于Leon是基于C#开发的,因此我推荐使用 Visual Studio 进行开发。

1、克隆项目。从 https://github.com/QuantConnect/Lean 克隆项目到本地(如果你网络不通可在公众号后台回复 Lean 下载)。

2、使用 Visual Studio 打开项目中的 QuantConnect.Lean.sln

eeac3ac37568308b88f3401388bc7e27.png

836945de67e3757de244fd624ca9d330.png

3、点击 生成 - 生成解决方案

5ffc6ff69d890612311c586a91d12f6a.png

4、点击 F5 则可以运行程序。

如果你在生成解决方案的过程中遇到了类似于如下的错误:

38259dae1d3e3570b47db8cd15fb70ac.png

请在工具 - NuGet包管理器 - 程序包管理器设置 中 添加如下的源, 名字任取,链接对了就行: https://api.nuget.org/v3/index.json

ca6011c7ddc32200fef4484766c6909f.png

2.回测 Lean 内置的C#策略

Lean 中比较有意思的一点是,其所有C#策略算法都位于 QuantConnect.Algorithm.CSharp 中,所有的Python策略算法都位于 QuantConnect.Algorithm.Python 中:

7f44445ec0a28e6801587085614e3432.png

如果你想回测C#的策略,你只需要修改 QuantConnect.Lean.Launcher 中的 config.json,将 QuantConnect.Algorithm.CSharp 中对应策略名称,修改到 algorithm-type-name 字段对应的值中,如图所示:

62d9ab7e3b0485fe1aefbedd3a00af2a.png

然后按 F5 运行程序,回测开始,此时会弹出一个cmd窗口,里面有本次回测的统计数据:

4bd7f65e021c9bedcbb32726a5fe17c4.png

3. 回测 Lean 内置的 Python策略

如果你想要回测内置的Python策略,我们需要先指定Lean使用的Python环境位置:

1.打开系统变量(我的电脑-右键属性-高级系统设置->环境变量->系统变量)

2.点击新建变量,name为 PYTHONNET_PYDLL;value则为你的Python环境的dll文件所在文件夹,如我的为 G:\Anaconda3\python36.dll

3.在此Python环境中安装Lean的依赖:

pip install pandas
pip install wrapt==1.11.2


然后在项目的 config.json 中需要多改几个配置:

13baa7db14b75878a388c101212523c0.png

然后按F5进行回测,效果如下:

2bb393e4131500c174e375b451f5c137.png

这些统计指标令人眼花缭乱,对于股票的回测我们只要重点关注这些即可:

  • Total Trades: 总交易量

  • Average Win: 平均盈利率

  • Average Loss: 平均亏损率

  • Compounding Annual Return: 复合年回报率

  • Drawdown: 最大回撤率

  • Expectancy: 期望值

  • Net Profit: 净利润

  • Sharpe Ratio: 夏普比率

  • Probabilistic Sharpe Ratio: 概率性夏普比率

  • Loss Rate: 失败率

  • Win Rate: 胜率

  • Profit-Loss Ratio: 盈亏比

  • Alpha: Alpha值

  • Beta: Beta值

  • Total Fees: 总手续费

其他的,按需关注即可。

4. Lean 策略是怎么写的?

开始之前,让我们先学习下 Lean 内置策略的写法:

上滑查看更多代码

 
from AlgorithmImports import *class MACDTrendAlgorithm(QCAlgorithm):def Initialize(self):'''Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.'''self.SetStartDate(2004, 1, 1) #Set Start Dateself.SetEndDate(2015, 1, 1) #Set End Dateself.SetCash(100000) #Set Strategy Cash# Find more symbols here: http://quantconnect.com/dataself.AddEquity("SPY", Resolution.Daily)# define our daily macd(12,26) with a 9 day signalself.__macd = self.MACD("SPY", 12, 26, 9, MovingAverageType.Exponential, Resolution.Daily)self.__previous = datetime.minself.PlotIndicator("MACD", True, self.__macd, self.__macd.Signal)self.PlotIndicator("SPY", self.__macd.Fast, self.__macd.Slow)def OnData(self, data):'''OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.'''# wait for our macd to fully initializeif not self.__macd.IsReady: return# only once per dayif self.__previous.date() == self.Time.date(): return# define a small tolerance on our checks to avoid bouncingtolerance = 0.0025holdings = self.Portfolio["SPY"].QuantitysignalDeltaPercent = (self.__macd.Current.Value - self.__macd.Signal.Current.Value)/self.__macd.Fast.Current.Value# if our macd is greater than our signal, then let's go longif holdings <= 0 and signalDeltaPercent > tolerance:  # 0.01%# longterm says buy as wellself.SetHoldings("SPY", 1.0)# of our macd is less than our signal, then let's go shortelif holdings >= 0 and signalDeltaPercent < -tolerance:self.Liquidate("SPY")self.__previous = self.Time

可以看到,其实它和Backtrader的写法相差无几,Initialize 函数设置基本的回测参数,如:

  • self.SetStartDate: 回测起始时间

  • self.SetEndDate: 回测结束时间

  • self.setCash: 回测资金

  • self.AddEquity: 回测对象(Resolution.Daily 是指按日回测)

  • self.PlotIndicator: 绘图时添加指标

而 onData 函数则会在每个数据点上做操作,如果是日线,则每天的数据都会流入到这个函数并运行一遍。因此 onData 就是算法分析的主逻辑。

在这里,你可以检查需要的指标是否已经准备完毕,因为可能存在一些滞后性指标在回测刚开始的时候并没有对应的值;此外,在日线的情况下,你还可以检测上一个数据点是不是和这个点在同一天上,如果是的话则不作任何操作返回:

if not self.__macd.IsReady: return
if self.__previous.date() == self.Time.date(): return

然后就是核心的买入卖出逻辑:

tolerance = 0.0025holdings = self.Portfolio["SPY"].QuantitysignalDeltaPercent = (self.__macd.Current.Value - self.__macd.Signal.Current.Value)/self.__macd.Fast.Current.Value# if our macd is greater than our signal, then let's go long
if holdings <= 0 and signalDeltaPercent > tolerance: # 0.01%# longterm says buy as wellself.SetHoldings("SPY", 1.0)# of our macd is less than our signal, then let's go short
elif holdings >= 0 and signalDeltaPercent < -tolerance:self.Liquidate("SPY")self.__previous = self.Time

如果我持仓的股数<=0, 且信号值大于我设定的阈值,则将我资产的1%买入这只股票。这里和backtrader最大的不同,买入是以资产的百分比为单位的动态买入。当然,你也可以使用限定数量的买入方式:

self.LimitOrder("IBM", 100, self.Securities["IBM"].Price)

如果持仓股市>=0, 且触发卖出信号,则进行清仓操作:

elif holdings >= 0 and signalDeltaPercent < -tolerance:self.Liquidate("SPY")

如果你不希望全部清仓,也可以使用 SetHoldings 来调整仓位。

可以看到,Lean相对于Backtrader有更灵活的仓位管理方式,甚至能够进行自动仓位调整、构建投资组合、实时交易等等。而且针对一些比较复杂的策略,你还可以用C#而不是Python来编写以提高运行速度。

综上所述,Lean是一个非常值得深入学习的量化交易平台,有兴趣的同学可以在他们官网学习到更多的内容:

https://www.quantconnect.com/docs

我们的文章到此就结束啦,如果你喜欢今天的Python 实战教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应红字验证信息,进入互助群询问。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!

点击下方阅读原文可获得更好的阅读体验

Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

8808558c97a0796a78aa4083e512f64f.png


http://chatgpt.dhexx.cn/article/5nZSPSZt.shtml

相关文章

基于聚宽量化交易平台实现量化交易策略

一、入门量化策略 JoinQuant聚宽API文档&#xff1a;https://www.joinquant.com/help/api/help?nameapi 1、策略内容 设置股票池为沪深300的所有成分股 如果当前股价小于10元/股且当前不持仓&#xff0c;则买入&#xff1b; 如果当前股价比买入时上涨了25%&#xff0c;则清仓止…

手把手搭建Python量化交易平台-1:系统架构

个人量化交易的系统架构图&#xff1a; 个人量化交易平台特点&#xff1a; 个性化&#xff1a;开源参考设计 自行个性化设计数据化&#xff1a;python数据分析可视化&#xff1a;phthon前台显示智能化&#xff1a;人工智能及机器学习自动化&#xff1a;通过自动化机制&#x…

Python量化交易平台:QMT (日内交易策略示例)

QMT /Ptrade是一款面向个人投资者,尤其是中高净值个人投资者的专业交易系统。系统采用先进的技术框架,具有功能丰富、风控全面、管理灵活、架构精简、高效稳定等核心优势。PTrade终端不仅支持多品种普通交易、日内回转交易、量化交易等场景;还集成了期权组合交易、期权无风险…

量化交易平台Quantopian学习的笔记(一)

最近对量化感兴趣&#xff0c;每周末带孩子上辅导班等候时在星巴克记录的一些笔记&#xff0c;记录一下便于以后查阅&#xff0c;一并分享出来希望对大家有帮助。 Quantopian量化交易平台主要针对美股&#xff0c;国内也有几个针对A股的&#xff0c;对A股感兴趣的可以去网上找…

如何通过量化交易平台接口搭建自己的平台?

市面上其实已经有那么多的可以使用的相对比较完善的量化平台了&#xff0c;但是为什么还是有那么多人选择自己搭平台呢&#xff1f;毕竟重复造轮子&#xff0c;是一件吃力不讨好的事情。因为每个人的选择是不一样的&#xff0c;而且在整个搭建的过程中&#xff0c;也能学习到很…

支持python的量化交易平台

现在支持python的量化平台有很多&#xff0c;其中的“佼佼者”无疑是聚宽量化平台和讯投QMT。 简单介绍下两款量化平台&#xff1a; 迅投QMT量化交易平台&#xff1a;支持VBA、python语言编程&#xff0c;可交易的标的包括股票、ETF、可转债。 优点包括&#xff1a;智能算法行…

主流量化交易与程序化交易平台整理

本文整理了主流的股票、期货与外汇程序化交易的平台与相关资料介绍&#xff0c;部分内容来自网络&#xff0c;图片来自各平台官网截图。 国内大众版 【名称】掘金量化 | MyQquant 【官网】https://www.myquant.cn/ 【简介】成立于2013年&#xff0c;深耕量化投资领域&#xf…

ISE 14.7安装教程——新版(普通安装环境以及难搞的Win10)

对于学习Xilinx系列FPGA的同学们一定少不了和ISE软件的接触&#xff0c;ISE软件最新的版本就是ISE14.7&#xff0c;但是这个版本在win10系统64位的电脑上安装可谓是问题百出&#xff0c;这篇文章的目的是让你会在你的电脑上安装ISE14.7&#xff0c;也是让ISE14.7在64位的win10电…

第2章 Linux操作系统应用入门

嵌入式系统就是一个专用的计算机系统&#xff0c;其上运行的操作系统一般采用Linux系统&#xff0c;既然如此我们就要学会如何使用Linux操作系统。 2.1启动Linux系统 1.在宿主机上启动虚拟机,点击启动Ubuntu系统。 如下图所示&#xff1a; 2、Ubuntu系统启动以后&#xff0c;…

HPS SoC和FPGA联合使用例程

本教程演示了如何使用HPS/ARM与FPGA进行通信。我们将为DE10标准开发板介绍如何根据官方的DE10_Standard_GHRD工程开发出自己的My_GRHD工程。之后&#xff0c;我们会在My_GHRD工程上运行我们自己改造过后的HPS_FPGA_LED应用程序。该应用程序会控制连接到DE10标准开发板上FPGA部分…

RV1126与RV1109 AI系统设计概要(一部分)

RV1109与RV1126参数 主要区别 RV1126处理器(例子) 四核核 Cortex-A7&#xff0c;ARM架构V7-A指令&#xff0c;独立Neon SIMD(一种高级单指令多数据扩展指令集&#xff0c;可执行并行数据处理)&#xff0c;与独立FPU(浮点计算)。&#xff08;RV1109双核A7&#xff09; 每核有32…

JTAG学习笔记 (3)

因为WIGGLER的一些不可避免的缺点&#xff0c;我们现在将精力集中在JLink上。 JLink是大家都能够买的起的仿真器&#xff08;当然是D版&#xff09;&#xff0c;已经是白菜价了&#xff0c;可以参考淘宝。他真的是仿真器&#xff0c;虽然目前只能支持ARM系列的芯片&#xff0c…

嵌入式系统设计笔记

难点&#xff1a;第五章&#xff0c;第十章三级流水线组织&#xff0c;第十一章 第一章 嵌入式系统导论 1、ARM是RISC架构 2、Cortex&#xff0c;ARM11以后的产品使用Cortex命名&#xff0c;并分为A/R/M三类 3、ARM指令分为数据处理、数据传递、控制指令 4、CM 2835 在树莓派上…

JTAG接口无法连接的问题

题目&#xff1a;JTAG接口无法连接问题 本文包含两部分内容&#xff1a;1&#xff09;续写TI DSP连接不上的问题&#xff1b;2&#xff09;顺便提一下Xilinx FPGA的JTAG口连接不上的问题。 一、TI DSP为啥连接不上&#xff1f; 半年前发过一篇博文《DSP为啥连接不上&#xff1…

STM32夺命100问!你知道几个?

点击上方“小麦大叔”&#xff0c;选择“置顶/星标公众号” 福利干货&#xff0c;第一时间送达 1、AHB系统总线分为APB1&#xff08;36MHz&#xff09;和APB2&#xff08;72MHz&#xff09;&#xff0c;其中2>1&#xff0c;意思是APB2接高速设备 2、Stm32f10x.h相当于reg52.…

智能教室控制系统

智能教室控制系统 引言 概述 该系统通过上位机C#控制下位机STM32&#xff0c;实现教室打卡考勤功能&#xff0c;通过打卡对数据库SQLserver进行增删改查&#xff0c;同时能将数据库的数据导出表格&#xff0c;下位机用到RFID的RC522模块&#xff0c;舵机、风扇&#xff0c;w…

基于stm32电梯管理系统设计

基于stm32电梯管理系统设计 这里记录一下以前自己做的嵌入式课程设计&#xff0c;报告中的图片和文字太多了&#xff0c;全部一个一个把搬过来太麻烦了,需要完整文本和代码自行主页私我 摘要关键词一、课题概述1.1市场调研1.2 需求分析 二、课题实施方案2.1 硬件总体方案2.2 性…

基于Xilinx的Kintex-7系列XC7K325T的硬件加速卡

产品型号: B-PCIE-K7F5XILINX的Kintex-7系列FPGA处理器 B-PCIE-K7F5是一款基于PCI Express总线架构的高性能FPGA算法加速卡&#xff0c;该板卡采用Xilinx的高性能28nm 7系列FPGA作为运算节点。Xilinx的28nm 7系列FPGA通过对资源、接口以及时钟的优化&#xff0c;在高性能计算&a…

基于STM32设计的车库监控报警系统

一、前言 随着社会的发展,人们的生活水平不断提高对安防问题的关注度越来越高,因而各类防盗设备也层出不穷,本文采用红外测距传感器、摄像头、STM32单片机以及ESP8266无线通信模块设计一种车库防盗报警器,其可安装在车库的里,通过红外线测距检测是否有人入侵,产生报警信号…

dnw驱动更新,支持全系统(xp,win7,win8/win10)

前言: 本文用于解决win7以上系统使用dnw难装驱动问题&#xff0c;使用新驱动: zadig-2.3.exe&#xff0c;支持xp&#xff0c;win7/win8/win10系统&#xff0c;安装方便、高效&#xff0c;欢迎试用。 对于裸板开发&#xff0c;我们一般使用JTAG工具&#xff0c;比如OpenJTAG、…