0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Lean:一款非常强大的开源量化交易平台

科技绿洲 来源:Python实用宝典 作者:Python实用宝典 2023-10-31 10:32 次阅读

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

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

图片

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

图片

图片

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

图片

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

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

图片

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

图片

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

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

图片

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

图片

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

图片

3. 回测 Lean 内置的 Python策略

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

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

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

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

pip install pandas
pip install wrapt==1.11.2

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

图片

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

图片

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

  • 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 Date
self.SetEndDate(2015,1,1)#Set End Date
self.SetCash(100000)#Set Strategy Cash
# Find more symbols here: http://quantconnect.com/data
self.AddEquity("SPY", Resolution.Daily)

# define our daily macd(12,26) with a 9 day signal
self.__macd =self.MACD("SPY",12,26,9, MovingAverageType.Exponential, Resolution.Daily)
self.__previous = datetime.min
self.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 initialize
if not self.__macd.IsReady: return

# only once per day
if self.__previous.date() ==self.Time.date():return

# define a small tolerance on our checks to avoid bouncing
tolerance =0.0025

holdings =self.Portfolio["SPY"].Quantity

signalDeltaPercent = (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 <=0and signalDeltaPercent >tolerance:# 0.01%
# longterm says buy as well
self.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

可以看到,其实它和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.0025

holdings = self.Portfolio["SPY"].Quantity

signalDeltaPercent = (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 well
    self.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来编写以提高运行速度。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • WINDOWS
    +关注

    关注

    3

    文章

    3440

    浏览量

    87144
  • 操作系统
    +关注

    关注

    37

    文章

    6284

    浏览量

    121876
  • 开源
    +关注

    关注

    3

    文章

    2985

    浏览量

    41718
  • python
    +关注

    关注

    51

    文章

    4675

    浏览量

    83466
收藏 人收藏

    评论

    相关推荐

    网领先二手车交易平台

    网领先二手车交易平台http://www.1car1.cn/
    发表于 09-17 10:44

    虚拟币交易平台开发带挖矿程序矿机程序app开发

    交易平台而言,未来或将面临业务转型创新,部分平台也会更多专注区块链技术研究等业务。区块链技术的研究将是些拥有大量中外IT技术人员的中国平台的关注点之
    发表于 12-11 10:43

    数字资产交易平台搭建交易所市场

    交易平台可以为用户提供更多的服务。它衍生出了系列的模式,更加能够让用户认识到区块链技术的强大。对于目前较为主流的交易平台模式,主要是场外交易
    发表于 07-20 11:20

    比特币交易平台排名情况

    国内比特币交易平台哪个好,国内十大比特币交易平台排名2017版:搞比特币,选对一个平台是关键中的关键,平台的不稳定性是比特币投资中最大的风险之一,万一找了个不靠谱的
    发表于 12-16 09:41 1.3w次阅读

    以太币交易平台哪个好_以太币交易平台有哪些

    。和其他数字货币一样,以太币可以在交易平台上进行买卖。本文主要介绍了以太币主要功能以及以太币交易平台排行版。
    发表于 01-07 10:50 5750次阅读

    以太币交易平台有哪些_以太币交易平台哪个好

    区块链的技术快速发展,现在很多的基于区块链的币种开始出现,也吸引了很多投资者关注,比特币开创了去中心化密码货币的先河,现在比如比特币、莱特币、以太坊等数字币交易平台非常多。
    发表于 01-10 14:17 3w次阅读

    c2c交易平台系统开发,深圳数字资产c2c交易平台搭建商

    c2c交易平台系统开发,深圳数字资产c2c交易平台搭建商c2c交易平台系统属于场外交易的一种,目前场外点对点交易系统所具有的特点:1)
    发表于 07-06 15:01 239次阅读

    GMQ区块链交易平台模式开发

    币币交易平台体验,并欢迎广大用户给我们提供宝贵的意见与建议。 与传统数字资产交易平台相比,GMQ拥有强大的服务体系:(一)安全、稳定、快捷的交易系统(二)领先优秀的技术开发团队(三)
    发表于 07-12 17:42 376次阅读

    c2c交易平台虚拟货币模式开发

    成型的平台不多,所以它的竞争压力是非常小的,现在开发虚拟币场外交易平台非常不错的选择。虚拟币交易平台开发,场外
    发表于 07-12 18:14 353次阅读

    区块链数字资产交易平台开发

    在当前全球金融科技创新加速的背景下,特别是在国内“互联网 ”浪潮带动下,在区块链基础上创生的数字资产,催生了打着“数字资产”旗号的另类理财市场。比如数字资产交易平台。区块链技术定制开发【Tel+86
    发表于 08-08 12:15 275次阅读

    区块链数字资产交易平台开发

    在当前全球金融科技创新加速的背景下,特别是在国内“互联网 ”浪潮带动下,在区块链基础上创生的数字资产,催生了打着“数字资产”旗号的另类理财市场。比如数字资产交易平台。区块链技术定制开发【Tel+86
    发表于 08-08 14:46 316次阅读

    币币交易平台开发,场外交易平台开发--源中瑞技术开发

        比特币的热潮已经席卷了全球市场,数字资产自身也得到了快速的发展。讲到数字资产这块就不得不说下交易平台,数字资产的火热也带动了交易平台的发展,近两年交易平台数量急剧上升。今天就带大家了解一下
    发表于 10-23 09:52 507次阅读

    数字资产量化交易软件出售区块链交易平台开发

    数字资产量化交易软件出售区块链交易平台开发 [本文由源中瑞涂先生编辑/量化交易系统开发搜索微信:ruiec999] 众所周知,当前的数字资产
    发表于 12-28 21:13 398次阅读

    基于一个共享的数字货币交易平台Kitchan网络介绍

    Kitchan网络是一个共享数字货币交易平台。提供各种投资工具,包括现货交易、保证金交易和融资交易,以及图形化编程工具和量化
    发表于 06-19 11:44 814次阅读

    区块链交易平台是如何盈利的

    交易平台,顾名思义就是用来交易平台,而区块链交易平台自然就是用来交易加密资产的平台,会提供行情
    发表于 11-06 11:37 5009次阅读