zl程序教程

您现在的位置是:首页 >  云平台

当前栏目

程序员的量化交易之路(38)--Lean之实时事件处理接口IRealTimeHandler和RealTimeEvent6

实时接口程序员 -- 交易 量化 38 事件处理
2023-09-14 08:56:49 时间

转载需注明出处:http://blog.csdn.net/minimicall?viewmode=contentshttp://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)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。