/* * 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 Python.Runtime; using QuantConnect.Data; using QuantConnect.Data.Consolidators; using QuantConnect.Indicators; using System; namespace QuantConnect.Python { /// /// Provides a base class for python consolidators, necessary to use event handler. /// Inherits the built-in rolling window so custom Python consolidators can access their /// consolidated history through the indexer, Current, Previous and Window members. /// public class PythonConsolidator : WindowBase, IDataConsolidator { /// /// Gets the most recently consolidated piece of data. This will be null if this consolidator /// has not produced any data yet. /// public IBaseData Consolidated { get; set; } /// /// Gets a clone of the data being currently consolidated /// public IBaseData WorkingData { get; set; } /// /// Gets the type consumed by this consolidator /// public Type InputType { get; set; } /// /// Gets the type produced by this consolidator /// public Type OutputType { get; set; } /// /// Event handler that fires when a new piece of data is produced /// public event DataConsolidatedHandler DataConsolidated; /// /// Function to invoke the event handler /// /// Reference to the consolidator itself /// The finished data from the consolidator public void OnDataConsolidated(PyObject consolidator, IBaseData data) { // populate the rolling window before firing so a handler sees the new bar at index 0 if (data != null) { Current = data; } DataConsolidated?.Invoke(consolidator, data); } /// /// Resets the consolidator /// public virtual void Reset() { Consolidated = null; WorkingData = null; ResetWindow(); } /// /// Scans this consolidator to see if it should emit a bar due to time passing /// /// The current time in the local time zone (same as ) public virtual void Scan(DateTime currentLocalTime) { } /// /// Updates this consolidator with the specified data /// /// The new data for the consolidator public virtual void Update(IBaseData data) { } public void Dispose() { } } }