Lean之实时事件处理接口IRealTimeHandler和RealTimeEvent6

转载需注明出处:?viewmode=contents,

这节开始我们要开始说明另外一个模块:实时事件处理模块。

这个模块的工作是什么呢。它就是用来设置一些在特定时间需要执行的任务。比如,每天开盘的时候,你可以做一个什么动作,比如每天收盘的时候你也可以做一个动作。当然还有更为广泛的运用。

在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 * * 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 Timingprivate readonly DateTime _triggerTime;//触发时间private readonly Action _callback;//回调方法(没有参数、返回值)private readonly bool _logging;//是否写日志// Trigger Actionprivate 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;//标志为已经触发try{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 * * 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 we're 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();}}

读书须用意,一字值千金。

Lean之实时事件处理接口IRealTimeHandler和RealTimeEvent6

相关文章:

你感兴趣的文章:

标签云: