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

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

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

bb92a23e4530df9e4ef4a1605dcdfa55.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 克隆项目到本地。

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

bb9b8672fc86bcc43b591319a2d0dd4b.png

d33a9bea368bb4ca334f2d165d6d665e.png

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

5d225d1f18f0ad20473663a3ab57a88a.png

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

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

bc9f413ce3e97765b86e50cd9683c35a.png

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

94d3b993b9d18f78a75e88e9f1c1301a.png

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

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

e6888fcae99a13cb6b3da39d07c1bd74.png

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

abc5909507b737257b7f02154e611772.png

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

d4dfb3c280adf84f14c8dcc603587e14.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 中需要多改几个配置:

a9994050765e7f1d1dbd33a405835ab1.png

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

29e6bf66dda5b3c2df2f4a93fb7440fd.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 实战教程,请持续关注我们哦~

觉得还不错就给我一个小小的鼓励吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/68225.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 飞翔的小鸟

mainvoid #音效存放picture #图片存放need #各种计算相关的函数play.py #运行db.db #数据库loadding.py #对图片进行加载下面为主逻辑部分 def MainGame(info):#主游戏模块global distance,bird_x,bird_y,mask,tempname , level , default , color inforeal_bgrandom.choice…

PAT 1118 Birds in Forest(并查集)

题目链接:1118 Birds in Forest 原本以为自己代码写得很丑&#xff0c;特别是对每组中头节点的处理时&#xff0c;总感觉自己错了&#xff0c;但是看了好多人写的答案&#xff0c;发现自己代码还算是写的比较漂亮的。注意最后的并集操作啊&#xff0c;就是u 附上一个并查集写…

Python游戏 (胖鸟快飞Flappybird)

python游戏开发&#xff1a;&#xff08;胖鸟快飞&#xff09; 利用python提供的第三方库pygame和python的基础语法来开发此款小游戏&#xff0c;此款游戏代码行数不超过100行&#xff0c;即使是初学者也可以轻松的了解。最重要的是&#xff0c;通过此款游戏不仅打结实了pytho…

234树到红黑树

2-3-4 树 1. 2-3-4树的定义 2-3-4树是一种阶为4的B树。它是一种自平衡的数据结构&#xff0c;可以保证在O(lgn)的时间内完成查找、插入和删除操作。它主要满足以下性质&#xff1a; &#xff08;1&#xff09;每个节点每个节点有1、2或3个key&#xff0c;分别称为2&#xff…

飞翔小鸟思路及代码

昨天跳着看视频把飞翔小鸟做出来了&#xff0c;下面分享一下我的思路。 先放成品图 和上一篇飞机大战的思路相似&#xff1a; 1.先把窗体做出把背景图放在面板中 2.把游戏背景中地面移动实现 3.把柱子在面板中实现进场及移动 4.把小鸟放在面板中 5.鼠标监听控制小鸟飞行轨…

luogu p4556 [Vani有约会]雨天的尾巴 树上差分,最近公共祖先,线段树合并

命运的选择 题意神一般的过程及题解. 本来有信仰用 m a p map map套 s e t set set跑过去的,结果调了一天都没调出来,时间还比暴力都慢.只好写线段树合并. 题意 给 一 棵 树 , 每 次 用 一 种 颜 色 覆 盖 树 上 一 条 路 径 . 求 每 一 个 点 覆 盖 次 数 最 多 的 颜 色 , 如…

一文详解数字源表

一、数字源表的基本功能 集多种功能为一体的精密测量仪器&#xff0c;主要是测量电气性能 SMU可以当电源,万用表或电源/测量组合. 当电源时&#xff1a; 可编程电压源 可编程电流源 当万用表时&#xff1a; 数字电压表(电流源,输出电流为0,测电压) 数字电流表(电压源,输…

1044 火星数字( ( ఠൠఠ )搞我心态 )【!!常看!!】

火星人是以 13 进制计数的&#xff1a; 地球人的 0 被火星人称为 tret。地球人数字 1 到 12 的火星文分别为&#xff1a;jan, feb, mar, apr, may, jun, jly, aug, sep, oct, nov, dec。火星人将进位以后的 12 个高位数字分别称为&#xff1a;tam, hel, maa, huh, tou, kes, h…

机械制图之图线基础知识

1.图线的型式 1)常用基本图线: 8 种。 粗实线、细实线、细虚线、细点画线、波浪线、细双点画线、双折线、粗点画线。 2)线宽: 粗、细两种。 线宽比2:1 &#xff0c; 粗线宽度优先采用0.5 mm、0.7㎜。 不同的线型具有不同的含义。 2.图线的应用 3.图线的画法 1)同一图样中同…

机械制图哪个软件好用?浩辰CAD机械2021你值得拥有!

浩辰CAD机械 2021不仅能完美兼容主流CAD设计数据&#xff0c;还拥有业内更完备的智能专业设计功能&#xff0c;集机械制图、机构设计和数据管理等功能模块于一体。本篇机械制图CAD教程小编将详细介绍浩辰CAD机械 2021&#xff0c;帮助大家更好地了解和上手这款最新版本CAD软件。…

UML画图工具汇总

最近学习了UML&#xff0c;搜集了一把各类的画图工具以及它们的特点。最后选出我认为最好用的一款工具。 rose 《大象》书里面就是用的这款软件&#xff0c;但是这个貌似要钱&#xff0c;破解版版本很低&#xff0c;界面看起来也比较复古。不推荐。 star uml 挺有名的软件&…

超详细的热图绘制教程(5000余字),真正的保姆级教程

生物信息学习的正确姿势 NGS系列文章包括NGS基础、高颜值在线绘图和分析、转录组分析 &#xff08;Nature重磅综述|关于RNA-seq你想知道的全在这&#xff09;、ChIP-seq分析 &#xff08;ChIP-seq基本分析流程&#xff09;、单细胞测序分析 (重磅综述&#xff1a;三万字长文读懂…

机械制图-画、读组合体的视图

制图是什么&#xff1f;制图就是投影&#xff01; 依照惯例&#xff0c;雷老师上课前还是带领大家复习了上节课组合体的组合形式和物体分类的知识点&#xff0c;并且讲解了上次作业中需要注意的问题。比如对于涉及弧的问题&#xff0c;一些人没有投影线&#xff0c;一般点和特…

超好用的两款作图工具,用起来~~~

前言 作为程序员&#xff0c;项目开发过程中肯定会需要画一大堆图&#xff0c;原型图、流程图、UML图、思维导图、拓扑图等等&#xff0c;找到一个好工具肯定是能大大提高工作效率&#xff0c;这里就来分享两款我平时用得比较多的画图工具(这不是广告&#xff0c;也不是推广&a…

机械制图——常见的机件表达

文章目录 标准件与常用件1. 螺纹与螺纹紧固件螺纹旋合画法螺栓装配简化画法螺钉装配简化画法双头螺钉装配简化画法六角头螺栓连接画法双头螺柱连接画法开槽圆柱头螺钉连接画法开槽沉头螺钉连接画法 2. 键&#xff08;平键&#xff09;3. 销圆柱销圆锥销 4. 齿轮 零件图与装配图…

绘图小能手gunplot

下面的安装过程是在ubuntu20.04上进行的。 安装gnuplot需要依赖lua5.2。所以先安装lua5.2。 安装lua5.2 下载安装包 wget http://www.tecgraf.puc-rio.br/lua/ftp/lua-5.2.0.tar.gz编译安装lua5.2 解压后进入源码目录 make linux sudo make install安装gnuplot gnuplot主…

CAD机械制图入门知识

在计算机技术不断发展的过程中&#xff0c;CAD技术水平也得到了很大的提升&#xff0c;这使得CAD技术在机械制图当中的使用范围越来越大。CAD是常用的制图软件&#xff0c;具有很强的功能性&#xff0c;特别是在3D制图方面CAD有着较强的实用性。 对于大部分的人来说&#xff0c…

机械制图笔记

机械图纸上Φ50H7什么意思&#xff1f; 一般代表直径50的孔&#xff0c;H7的公差在这里是0.025mm/-0mm。 理论值M6的外径就是6毫米&#xff0c;实际上达不到&#xff0c;因为螺纹的尖顶都是圆角,通过查表m6的最大外径是5.92MM,这是基本数值。 机械制图中EQS&#xff0c;表示…

使用MapBox自定义地图

一、什么是MapBox&#xff0c;相对国内地图厂商的优势 MapBox是一家美国的地图厂商&#xff0c;2010 年成立于美国华盛顿&#xff0c;2017 年获得软银 1.64 亿美元 C 轮融资&#xff0c;完全开源的开发工具&#xff0c;帮助您在现有产品中实现灵活、轻量、稳定的地图、搜索、导…

企业网络设计,看这6个案例就够了

百度、美团的网络我们都可以称他们为企业网络。因为他们的网络本身是为自己提供服务&#xff0c;不提供网络的接入服务。 企业网主要包括三块内容&#xff1a;园区网、广域网和数据中心。按照网络用途来分&#xff0c;也可以分为办公网和生产网。 以上术语都是根据自己公司的…