程序员的量化交易之路(39)--Lean之BacktestingRealTimeHandler回测实时时间事件处理7

量化基金经理(PM)的职业素养 大家好,我是卢旗。我们知道,年入百万乃至千万的基金经理,都必须掌握的一些职业素养。以下,是我做的一些总结及研究。对市场及交易数据进行处理、建模与分析,并通过数据挖掘发掘数据规律、寻找交易逻辑,是基金经理在投资决策过程中的重要环节。 阅读详情

</pre>转载需注明出处:<a target=_blank href="http://blog.youkuaiyun.com/minimicall?viewmode=contents">http://blog.youkuaiyun.com/minimicall?viewmode=contents</a>,<a target=_blank href="http://cloudtrade.top/">http://cloudtrade.top/</a></p><p></p><p>上一节已经说明了实时事件和处理接口。这一节需要说明回测里面的实时事件处理。主要是开启一个新的线程来处理定时事件。例如每天开市的时候的事件和每天闭市时候触发的事件。还有你可以定义任意一个给定时间的事件。</p><p>下面我们通过代码来说 明问题</p><p><pre name="code" class="csharp">/*
 * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals.
 * Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
*/

using System;
using System.Collections.Generic;
using System.Threading;
using QuantConnect.Interfaces;
using QuantConnect.Packets;
using QuantConnect.Logging;

namespace QuantConnect.Lean.Engine.RealTime
{
    /// <summary>
    /// Psuedo realtime event processing for backtesting to simulate realtime events in fast forward.
    /// 伪实时事件处理,为回归测试实时事件(快进)
    /// </summary>
    public class BacktestingRealTimeHandler : IRealTimeHandler
    {
        /******************************************************** 
        * PRIVATE VARIABLES
        *********************************************************/
        //Threading
        private DateTime _time = new DateTime();
        private bool _exitTriggered;
        private bool _isActive = true;
        private AlgorithmNodePacket _job;//相关任务

        //Events:
        private List<RealTimeEvent> _events;

        //Algorithm and Handlers:
        private IAlgorithm _algorithm;//相关算法
        private Dictionary<SecurityType, MarketToday> _today;//今日市场

        /******************************************************** 
        * PUBLIC PROPERTIES
        *********************************************************/
        /// <summary>
        /// Realtime Moment.
        /// </summary>
        public DateTime Time
        {
            get
            {
                return _time;
            }
        }

        /// <summary>
        /// Events array we scan to trigger realtime events.
        /// </summary>
        public List<RealTimeEvent> Events
        {
            get 
            {
                return _events;
            }
        }

        /// <summary>
        /// Flag indicating the hander thread is completely finished and ready to dispose.
        /// </summary>
        public bool IsActive
        {
            get
            {
                return _isActive;
            }
        }

        /// <summary>
        /// Market hours for today for each security type in the algorithm
        /// 为算法中每种证券类型的今日交易时间(例如股票和黄金的交易时间就不一样的,如果该算法涉及到这两种证券类型)
        /// </summary>
        public Dictionary<SecurityType, MarketToday> MarketToday
        {
            get
            {
                throw new NotImplementedException("MarketToday is not currently needed in backtesting mode");//回归测试不需要
                return _today;
            }
        }

        /******************************************************** 
        * PUBLIC CONSTRUCTOR
        *********************************************************/
        /// <summary>
        /// Setup the algorithm data, cash, job start end date etc.
        /// 设置算法数据、现金、任务开始和结束时间等信息,通过algorithm和job即可
        /// </summary>
        public BacktestingRealTimeHandler(IAlgorithm algorithm, AlgorithmNodePacket job) 
        {
            //Initialize:
            _algorithm = algorithm;
            _events = new List<RealTimeEvent>();
            _job = job;
            _today = new Dictionary<SecurityType, MarketToday>();
        }

        /******************************************************** 
        * PUBLIC METHODS
        *********************************************************/
        /// <summary>
        /// Setup the events for this date.
        /// 设置该日的事件
        /// </summary>
        /// <param name="date">Date for event</param>
        public void SetupEvents(DateTime date)
        {
            //Clear any existing events:清除已经存在的事件
            ClearEvents();

            //Set up the events:设置事件
            //1. Default End of Day Times:
            foreach (var security in _algorithm.Securities.Values)//遍历算法中涉及的每一个证券
            {
                //Register Events:注册事件
                Log.Debug("BacktestingRealTimeHandler.SetupEvents(): Adding End of Day: " + security.Exchange.MarketClose.Add(TimeSpan.FromMinutes(-10)));

                //1. Setup End of Day Events:
                //设置事件结束时间(23:50)
                var closingToday = date.Date + security.Exchange.MarketClose.Add(TimeSpan.FromMinutes(-10));
                var symbol = security.Symbol;//证券代号
                AddEvent(new RealTimeEvent( closingToday, () =>
                {//匿名方法
                    try
                    {
                        _algorithm.OnEndOfDay(symbol);//在一天闭市的时候会调用该函数
                    }
                    catch (Exception err)
                    {
                        Engine.ResultHandler.RuntimeError("Runtime error in OnEndOfDay event: " + err.Message, err.StackTrace);
                        Log.Error("BacktestingRealTimeHandler.SetupEvents(): EOD: " + err.Message);
                    }
                }));
            }

            // fire just before the day rolls over, 11:58pm在一天即将结束的时候调用。。。。(尼玛,和上面究竟啥子关系)
            AddEvent(new RealTimeEvent(date.AddHours(23.967), () =>
            {//匿名方法
                try
                {
                    _algorithm.OnEndOfDay();
                    Log.Trace(string.Format("BacktestingRealTimeHandler: Fired On End of Day Event() for Day({0})", _time.ToShortDateString()));
                }
                catch (Exception err)
                {
                    Engine.ResultHandler.RuntimeError("Runtime error in OnEndOfDay event: " + err.Message, err.StackTrace);
                    Log.Error("BacktestingRealTimeHandler.SetupEvents.Trigger OnEndOfDay(): " + err.Message);
                }
            }, true));
        }
        
        /// <summary>
        /// Normally this would run the realtime event monitoring. Backtesting is in fastforward so the realtime is linked to the backtest clock.
        /// This thread does nothing. Wait until the job is over.
        /// </summary>
        public void Run()
        {
            _isActive = false;
        }


        /// <summary>
        /// Add a new event to our list of events to scan.
        /// </summary>
        /// <param name="newEvent">Event object to montitor daily.</param>
        public void AddEvent(RealTimeEvent newEvent)
        {
            _events.Add(newEvent);
        }

        /// <summary>
        /// Scan the event list with the current market time and see if we need to trigger the callback.
        /// </summary>
        public void ScanEvents()
        {
            for (var i = 0; i < _events.Count; i++)
            {
                _events[i].Scan(_time);
            }
        }

        /// <summary>
        /// Clear any outstanding events.
        /// </summary>
        public void ClearEvents()
        {
            _events.Clear();
        }

        /// <summary>
        /// Reset the events for a new day.
        /// </summary>
        public void ResetEvents()
        {
            for (var i = 0; i < _events.Count; i++)
            {
                _events[i].Reset();
            }
        }


        /// <summary>
        /// Set the time for the realtime event handler.
        /// </summary>
        /// <param name="time">Current time.</param>
        public void SetTime(DateTime time)
        {
            //Check for day reset:
            if (_time.Date != time.Date)
            {
                // Backtest Mode Only: 
                // > Scan & trigger any remaining events which haven't been triggered (e.g. daily bar data with "daily event" at 4pm):
                ScanEvents();

                //Reset all the daily events with today's date:
                SetupEvents(time.Date);
            }

            //Set the time:
            _time = time;

            // Backtest Mode Only: 
            // > Scan the event every time we set the time. This allows "fast-forwarding" of the realtime events into sync with backtest.
            ScanEvents();
        }

        /// <summary>
        /// Stop the real time thread
        /// </summary>
        public void Exit()
        {
            _exitTriggered = true;
        }

    } // End Result Handler Thread:

} // End Namespace


2025年量化交易平台对比:付费与开源方案深度分析 国内主流付费量化交易平台可依据“功能复杂度-价格梯度”划分为新手友好型、中高级应用型及机构专业型三大类,均具备显著的本土化优势,包括深度整合A股/期货交易接口、符合国内合规要求的实盘通道及本地化行情数据支持。一、新手友好型平台:低门槛与标准化工具该类平台以降低量化入门门槛为核心,通过简化编程逻辑、提供可视化工具及固定费用模式吸引初级用户。典型代表包括文华财经WH8、恒生Ptrade及金字塔决策系统(基础版)。文华财经WH8。 阅读详情

相关推荐

Python量化交易机器人实战:QuantConnect平台应用

在现代金融市场的复杂性和动态性之中,交易机器人成为了投资者和金融机构不可或缺的工具。交易机器人,也被称作算法交易机器人或量化交易机器人,通过编程实现自动执行交易策略,以适应市场变化,优化投资回报。这一章节我们将探讨交易机器人领域的基础概念,它们如何运作,以及在金融市场中扮演的角色。交易机器人是基于特定算法和预设条件,在金融市场上自动进行买卖决策的软件系统。它们的功能多样,从简单的市场监控到复杂的风险管理,交易机器人涵盖了金融交易的各个方面。

weixin_35835018的博客 4245

基于QuantConnect写一个强化学习多因子选股交易策略

self.state_size = self.num_factors + 3 # 因子值 + 市场状态特征。elif action == 0 and price_change < 0: # 正确卖出。if action == 2 and price_change > 0: # 正确买入。if self.Time.month % 3 == 0: # 每季度重新训练。self.action_size = 3 # 0: 卖出,1: 持有,2: 买入。elif action == 0: # 卖出。

gregmankiw的博客 1139

Mac 环境配置jdk、Maven

3、终端打开配置jdk时候建好的脚本文件: open -e .bash_profile。4、查看maven是否安装成功和系统能不能识别maven/mvn命令:⬇️。输入⬇️并保存: 其中第一行JAVA_HOME替换为自己下的jdk路径。,安装编译好的二进制版本,具体安装zip还是tar.gz我看的。5、查看jdk是否安装成功和系统能不能识别java命令:⬇️。至此,我的Mac系统的环境配置jdk、Maven完成!然后就发现我的maven命令还是没作用,不识别,下载后直接安装即可,很快,点几下就OK了。

weixin_42416791的博客 4403

程序员的量化交易之路(39)--Lean之BacktestingRealTimeHandler回测实时时间事件处理7...

</pre>转载需注明出处:<a target=_blank href="http://blog.youkuaiyun.com/minimicall?viewmode=contents">http://blog.youkuaiyun.com/minimicall?viewmode=contents</a>,<a target=_bl...

weixin_33961829的博客 344

资源描述框架RDF及Turtle

文章目录1. RDF1.1 简介1.2 格式1.3 RDF的要求2. Turtle2.1 语法2.1.1 简单三元组2.1.2 Turtle中的命名空间2.1.3 Base URI2.1.4 谓语列表2.1.5 宾语列表2.1.6 空白节点(bNodes)2.1.7 数据类型2.1.8 Class membership2.1.9 空URI2.1.10 集合 1. RDF 1.1 简介 RDF(Resource Description Framework)语义网的标准数据模型,是一个用于描述 Web 上的资

doublewhite233的博客 2495

从零开始:使用Mask2Former训练你的专属图像分割数据集

本文详细介绍了如何使用Mask2Former训练自定义图像分割数据集,从环境配置、数据集准备到模型训练与优化。通过实战技巧和问题排查指南,帮助开发者高效完成从零开始的图像分割任务,特别适合需要处理自定义数据集的AI研究人员和工程师。

weixin_30566063的博客 645

史上最全Quant资源整理

https://zhuanlan.zhihu.com/p/26368398 量化交易平台 国内在线量化平台: BigQuant - 你的人工智能量化平台 - 可以无门槛地使用机器学习、人工智能开发量化策略,基于python,提供策略自动生成器 镭矿 - 基于量化回测平台果仁网 - 回测量化平台 京东量化 - 算法交易和量化回测平台 聚宽 - 量化回测平台 优矿 - 通联量

Linux Android Web 1万+

Comsol&Matlab 亥姆霍兹共振消声器传递损失理论解与仿真解

当外界噪声以共振频率进入共振器时,共振器内的空气质量发生周期性的振动,从而减少或消除噪声。当特定频率的声波进入共振器时,共振器的空气质量会发生周期性的振动,从而实现对该频率的噪声的减弱或消除。5. 反射和吸收:共振器的几何形状和容积还可以影响共振器内空气振动的反射和吸收。然而,对于不同频率的噪声,需要相应调整共振器的参数以匹配新的共振频率。3. 腔体内的空气振动:当特定频率的声波进入共振器时,共振器内的空气质量会发生振动。2. 声波进入共振器:外界的声波通过共振器的颈部进入共振器的封闭空腔。

声学黑洞仿真工作室 4578

微软开源!世界首个AI量化投资平台 Qlib 基本使用教程

量化往期推荐Easytrader 超简单的股市自动交易神器Lean — 优秀好用的开源量化交易平台30分钟教你搭建普罗监控系统—股票人气榜实时变化!可转债交易薅羊毛策略 — Python ...

Python实用宝典网 6577

从实验室到生活:构建一份全面的手机相机主观画质评测指南

本文详细介绍了如何从实验室数据转向实际体验,构建全面的手机相机主观画质评测指南。通过基础装备清单、室内外场景实战评测及数据之外的感知艺术,帮助用户发现手机相机在色彩还原、动态范围和夜景模式等方面的真实表现。特别关注主观体验与客观参数的差异,提供实用的评测技巧和报告撰写心法。

weixin_30940783的博客 308

用 XCO 库一键找出某个 ABAP 类的全部子类

ABAP XCO库子类枚举技术解析 本文介绍了在ABAP项目中如何利用XCO库高效获取类的继承层次结构。传统方法使用CL_ABAP_CLASSDESCR或手动维护映射表存在效率低、易遗漏的问题。新方法通过XCO库的IF_XCO_AO_CLASS接口,可简洁地获取父类的所有子类(包括间接子类)。 核心API链式调用: 获取类句柄:xco_cp_abap=>class() 导航子类集合:subclasses->all 获取结果:get()返回类引用表或get_names()返回类名列表 典型应用场景

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 127

探索量化交易的未来:QuantConnect深度解读

探索量化交易的未来:QuantConnect深度解读 DocumentationQuantConnect Wiki Style Documentation Behind QuantConnect项目地址:https://gitcode.com/gh_mirrors/documentation11/Documentation 在金融技术的浩瀚宇宙中,QuantConnect犹如一颗璀璨的新星,以...

gitblog_00046的博客 4661

存储硬盘格式怎么把512还原为520格式??

硬盘厂商工具(如SeaChestsg_format)可以调整扇区大小。备份数据,因为调整扇区会清除硬盘内容。根据硬盘型号和接口类型,选择合适的工具进行调整。如果你需要更详细的帮助,请提供你的硬盘型号和存储设备类型。希望如上措施及解决方案能够帮到有需要的你。PS:如若遇到采纳如下方案还是未解决的同学,希望不要抱怨&&急躁,毕竟影响因素众多,我写出来也是希望能够尽最大努力帮助到同类似问题的小伙伴,即把你未解决或者产生新Bug黏贴在评论区,我们大家一起来努力,一起帮你看看,可以不咯。

**My Coding Family** 1146

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

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

Python实用宝典网 6112

PPF函数可视化生产可能性边界线(R语言)

假设产品A的生产函数为A = 2 * R1 + R2,产品B的生产函数为B = R1 + 2 * R2,其中A和B分别表示产品A和产品B的产量,R1和R2表示资源1和资源2的分配数量。首先,让我们定义两种产品:产品A和产品B,它们的生产分别需要不同的资源和技术。现在我们已经计算了每种分配比例下的产品A和产品B的产量,接下来我们可以绘制生产可能性边界线。运行完整的代码后,我们将得到一个图形,显示了生产可能性边界线,该线代表经济体在给定资源和技术条件下所能生产的所有产品组合。

2301_79326559的博客 874

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

如何用Lean生成专业的策略回测PDF分析报告:完整指南

Lean Algorithmic Trading Engine是QuantConnect开发的强大交易策略回测引擎,支持Python和C#语言。本指南将教你如何使用Lean快速生成包含关键绩效指标、图表和风险分析的专业PDF回测报告,帮助你全面评估交易策略表现。 ## Lean回测报告生成流程概述 📊 Lean引擎的报告生成功能是策略开发周期中的关键环节。通过Result Handler模块

gitblog_00489的博客 379

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

量化投资:第1节 择时策略的开发

作者: 阿布阿布量化版权所有 未经允许 禁止转载abu量化系统github地址 (您的star是我的动力!)本节ipython notebook本节界面操作教程视频播放地址量化系统一般分为回测模块、实盘模块。 回测模块:首先交易者编写实现一个交易策略,它基于一段历史的交易数据,根据交易策略进行模拟买入卖出,策略中可以涉及买入规则、卖出规则、选股规则、仓位控制及滑点策略等等,回测的目的是验证交易策略是

bbfamily1314的博客 6100

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

AbuQuant (阿布量化) 的深度解析、安装教程和策略示例

阿布量化(AbuQuant)是一个开源的 Python 量化交易系统框架,由陈阿布(abu)开发并主要在国内量化爱好者社区推广。它的核心目标是简化量化策略的回测过程,让使用者能够专注于策略逻辑本身,而不是繁琐的回测框架搭建和数据处理。AbuQuant 特别适合对量化交易感兴趣的初学者、学生、研究人员以及希望快速验证策略想法的个人投资者。它提供了一套相对完整的、基于因子的回测体系,包含了数据获取(主要依赖 Tushare、baostock 等)、因子定义、信号生成、回测执行、结果度量和可视化等功能。

zhangyunchou2015的博客 3162

从0到1掌握Lean策略回测:胜率、盈亏比与期望收益计算全指南

你还在为策略回测结果失真发愁?明明历史数据表现优异,实盘却亏损连连?本文将用最通俗的语言,带你吃透Lean量化交易引擎中三大核心绩效指标——胜率、盈亏比与期望收益的计算逻辑,让你的策略评估不再踩坑。读完本文你将获得:3个核心指标的计算公式、Lean回测报告解读方法、1套策略优化决策框架。 ## 胜率计算:揭开"高胜率陷阱" 胜率(Win Rate)是指策略盈利交易次数占总交易次数的百分比,公式...

gitblog_00659的博客 1399

量化交易平台——QuantConnect Lean CLI

量化交易平台——QuantConnect Lean CLI lean-cliCLI for running the LEAN engine locally and in the cloud项目地址:https://gitcode.com/gh_mirrors/le/lean-cli QuantConnect的Lean CLI是一个跨平台的命令行工具,专为简化本地和云端LEAN引擎开发而设计。通...

gitblog_00046的博客 5068

Lean量化交易引擎架构解析:多语言策略开发与回测系统深度指南

Lean Algorithmic Trading Engine是一个开源的量化交易引擎,由QuantConnect开发,支持C#和Python双语言策略开发,为量化交易者提供从策略研究到实盘部署的完整解决方案。这个专业的算法交易平台采用模块化架构设计,支持股票、期货、期权、加密货币等多种资产类别,实现了高效的回测引擎和实盘交易系统集成。 ## 核心架构设计与实现原理 ### 多语言运行时架构解

gitblog_00491的博客 361

量化交易策略开发与回测系统:基于Lean开源量化引擎的实践指南

Lean是由QuantConnect开发的开源量化引擎,支持Python和C#编程语言,为算法交易提供全流程解决方案。作为一款功能完备的开源量化引擎,它集成了数据获取、策略编写、回测分析和实盘交易等核心功能,帮助交易者构建稳定可靠的算法交易系统。本文将从基础认知、核心能力到实践进阶三个阶段,全面介绍如何利用Lean引擎进行量化策略开发。 ## 一、基础认知:Lean量化引擎架构与环境部署 ##

gitblog_00539的博客 391

阿布量化系统:引领量化交易新时代

阿布量化系统:引领量化交易新时代 abuabu是面向中国金融市场设计的Python量化投资框架,包含数据获取、策略回测、实盘交易等多个模块,方便投资者快速构建和验证交易策略。项目地址:https://gitcode.com/gh_mirrors/ab/abu 项目介绍 阿布量化系统(Abu Quant)是一款综合性的开源量化交易平台,旨在为投资者提供从基础策略开发到高级机器学习应用的全方位量化解...

gitblog_01009的博客 1605

高效智能的量化交易平台:阿布量化系统

高效智能的量化交易平台:阿布量化系统 项目地址:https://gitcode.com/gh_mirrors/ab/abu 在金融市场中,量化交易已成为投资者追求稳定收益的重要工具。阿布量化系统(Abu量化)是一个强大的开源项目,它将人工智能与量化交易相结合,帮助用户轻松进行策略开发、回测和实盘操作。这个系统不仅提供了易用的图形界面,还支持Python编程,使得无论是新手还是专业开发者都能快速上...

gitblog_00007的博客 1675

量化交易新利器:阿布量化(AbuQuant)——金融研究者的得力助手

阿布量化是一个功能强大且灵活的开源量化交易框架,它为金融领域的研究者和交易者提供了完整的量化交易工作流。如果你对量化交易感兴趣,阿布量化是一个非常值得尝试的工具。立即开始你的量化交易之旅吧!

eclipsercp的博客 2511
上一篇: 程序员的量化交易之路(38)--Lean之实时事件处理接口IRealTimeHandler和RealTimeEvent6
下一篇: 欢迎使用优快云-markdown编辑器
minimicall
博客等级 码龄18年 407粉丝 174原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值