程序员的量化交易之路(38)--Lean之实时事件处理接口IRealTimeHandler和RealTimeEvent6
2023-09-14 08:56:49 时间
转载需注明出处:http://blog.csdn.net/minimicall?viewmode=contents,http://cloudtrade.top/
这节开始我们要开始说明另外一个模块:实时事件处理模块。
这个模块的工作是什么呢。它就是用来设置一些在特定时间需要执行的任务。比如,每天开盘的时候,你可以做一个什么动作,比如每天收盘的时候你也可以做一个动作。当然还有更为广泛的运用。
在Lean中,是开启一个单独的线程来处理这种定时任务的。
实时事件:RealTimeEvent
实时事件处理接口:IRealTimeHandler
下面我们通过代码来说明,说明都在注释里面。废话少说:
/* * 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 QuantConnect.Logging; namespace QuantConnect.Lean.Engine.RealTime /// summary /// Realtime event object for holding information on the event time and callback. /// 实时时间对象:保存时间相关的的事件信息和回调 /// /summary public class RealTimeEvent /******************************************************** * CLASS VARIABLES *********************************************************/ // Trigger Timing private readonly DateTime _triggerTime;//触发时间 private readonly Action _callback;//回调方法(没有参数、返回值) private readonly bool _logging;//是否写日志 // Trigger Action private bool _triggered;//是否已经触发 /******************************************************** * CLASS PROPERTIES *********************************************************/ /// summary /// Flag indicating the event has been triggered /// 事件是否已经触发了的标志 /// /summary public bool Triggered get { return _triggered; } /******************************************************** * CONSTRUCTOR METHODS *********************************************************/ /// summary /// Setup new event to fire at a specific time. Managed by a RealTimeHandler thread. /// 设置一个新的事件,在特定的时间触发,由RealTimeHandler线程管理 /// /summary /// param name="triggerTime" Time of day to trigger this event /param /// param name="callback" Action to run when the time passes. /param /// param name="logging" Enable logging the realtime events /param /// seealso cref="IRealTimeHandler"/ public RealTimeEvent(DateTime triggerTime, Action callback, bool logging = false) _triggered = false; _triggerTime = triggerTime; _callback = callback; _logging = logging; /******************************************************** * CLASS METHODS: *********************************************************/ /// summary /// Scan this event to see if this real time event has been triggered. /// 扫描,检查该事件是否已经被触发 /// /summary /// param name="time" Current real or simulation time 当前时间(真实交易或者模拟交易的时间) /param public void Scan(DateTime time) if (_triggered) {//如果已经触发过,就直接返回,不需要返回了 return; //When the time passes the trigger time, trigger the event. //如果当前时间比设定的触发时间更晚了,那么就需要触发该事件 if (time _triggerTime) _triggered = true;//标志为已经触发 if (_logging) Log.Trace("RealTimeEvent.Scan(): Eventhandler Called: " + time.ToString("u")); _callback();//调用回调函数 catch (Exception err) Log.Error("RealTimeEvent.Scan(): Error in callback: " + err.Message); /// summary /// Reset the triggered flag. /// /summary public void Reset() _triggered = false;
/* * 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 QuantConnect.Packets; namespace QuantConnect.Lean.Engine.RealTime /// summary /// Real time event handler, trigger functions at regular or pretimed intervals /// 实时事件处理,周期性触发回调方法,或者在设定的时间触发 /// /summary public interface IRealTimeHandler /******************************************************** * INTERFACE PROPERTIES *********************************************************/ /// summary /// The real time handlers internal record of current time used to scan the events. /// 现在的时间 /// /summary DateTime Time get; /// summary /// List of events were monitoring. /// 我们监控的事件列表 /// /summary List RealTimeEvent Events get; /// summary /// Thread status flag. /// 本线程是否活跃 /// /summary bool IsActive get; /// summary /// Data for the Market Open Hours Today /// 市场交易时间 /// /summary Dictionary SecurityType, MarketToday MarketToday get; /******************************************************** * INTERFACE METHODS *********************************************************/ /// summary /// Main entry point to scan and trigger the realtime events. /// 线程入口 /// /summary void Run(); /// summary /// Given a list of events, set it up for this day. /// /summary void SetupEvents(DateTime day); /// summary /// Add a new event to the processing list /// 增加事件 /// /summary /// param name="newEvent" Event information /param void AddEvent(RealTimeEvent newEvent); /// summary /// Trigger a scan of the events. /// 触发事件 /// /summary void ScanEvents(); /// summary /// Reset all the event flags for a new day. /// 重置所有事件标志,为新的一天 /// /summary /// remarks Realtime events are setup as a timespan hours since /remarks void ResetEvents(); /// summary /// Clear all the events in the list. /// /summary void ClearEvents(); /// summary /// Set the current time for the event scanner (so we can use same code for backtesting and live events) /// 设置现在的时间 /// /summary /// param name="time" Current real or backtest time. /param void SetTime(DateTime time); /// summary /// Trigger and exit signal to terminate real time event scanner. /// 退出该线程 /// /summary void Exit();
在上一篇文章中,我们初步了解了在HTML中处理用户操作的知识,最主要的,就是如何对指定的DOM元素添加事件监听以获取用户操作,并进行后续的处理。这里所使用到的这种基于事件的处理方式,其本质是一种消息传递机制,我们称之为事件机制。
《社交网站界面设计(原书第2版)》——1.5 实践(或最佳实践):做事的习惯性行为或方式 本节书摘来自华章计算机《社交网站界面设计(原书第2版)》一书中的第1章,第1.5节,作者:(美)克里斯蒂安·克鲁姆里什(Christian Crumlish),艾琳·马洛恩(Erin Malone)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
相关文章
- 纳米数据足球篮球实时数据,实时更新比赛比分数据,体育数据接口api
- signal 聊天记录_实时查看车辆位置app
- 最新Netdata1.28版本安装以及汉化和使用(Linux 性能实时监测工具)
- SpringBoot实现实时监听文件变化
- 新浪实时股票数据接口1
- vivo 实时计算平台建设实践
- vue.js客服系统实时聊天项目开发(八)使用axios post请求访客初始化接口
- 【Linux 内核】实时调度类 ③ ( 实时调度类 rt_sched_class 源码 | 调度类 sched_class 源码 )
- 实时流处理Kafka
- 高性能、高稳定、高扩展:解读ByteHouse实时导入技术演进
- 进程实时监控pidstat命令详解程序员
- Linux守护进程实时监控的全景.(linux守护进程查看)
- 日志监测Linux实时日志实时监控系统(linux实时)
- time replicationMySQL实时复制:以速度兼容你的需求(mysqlreal)
- PyFlink 场景案例 – PyFlink实现CDN日志实时分析
- 监测Linux网卡实时流量监控:明确控制传输带宽(linux网卡实时流量)
- 使用Oracle实时备份软件确保安全备份(oracle实时备份软件)
- MSSQL实现实时消息推送机制(mssql 消息推送)
- 3M Mysql状态实时监控全面解析(3m mysql状态查看)
- 从Web端查看Redis的实时状态(web查看redis)
- 利用Redis实时聊天-秒级响应让沟通更简单(利用redis聊天)