/* * 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 QuantConnect.Util; using QuantConnect.Packets; using QuantConnect.Commands; using QuantConnect.Interfaces; using QuantConnect.Data.UniverseSelection; using QuantConnect.Lean.Engine.DataFeeds.Transport; namespace QuantConnect.Lean.Engine.Server { /// /// NOP implementation of the ILeanManager interface /// public class LocalLeanManager : ILeanManager { private IAlgorithm _algorithm; private AlgorithmNodePacket _job; private ICommandHandler _commandHandler; private LeanEngineSystemHandlers _systemHandlers; private LeanEngineAlgorithmHandlers _algorithmHandlers; /// /// Empty implementation of the ILeanManager interface /// /// Exposes lean engine system handlers running LEAN /// Exposes the lean algorithm handlers running lean /// The job packet representing either a live or backtest Lean instance /// The Algorithm manager public void Initialize(LeanEngineSystemHandlers systemHandlers, LeanEngineAlgorithmHandlers algorithmHandlers, AlgorithmNodePacket job, AlgorithmManager algorithmManager) { _algorithmHandlers = algorithmHandlers; _systemHandlers = systemHandlers; _job = job; } /// /// Sets the IAlgorithm instance in the ILeanManager /// /// The IAlgorithm instance being run public void SetAlgorithm(IAlgorithm algorithm) { _algorithm = algorithm; algorithm.SetApi(_systemHandlers.Api); RemoteFileSubscriptionStreamReader.SetDownloadProvider((Api.Api)_systemHandlers.Api); } /// /// Execute the commands using the IAlgorithm instance /// public void Update() { if(_commandHandler != null) { foreach (var commandResultPacket in _commandHandler.ProcessCommands()) { _algorithmHandlers.Results.Messages.Enqueue(commandResultPacket); } } } /// /// This method is called after algorithm initialization /// public void OnAlgorithmStart() { if (_algorithm.LiveMode) { _commandHandler = new FileCommandHandler(); _commandHandler.Initialize(_job, _algorithm); } } /// /// This method is called before algorithm termination /// public void OnAlgorithmEnd() { // NOP } /// /// Callback fired each time that we add/remove securities from the data feed /// public void OnSecuritiesChanged(SecurityChanges changes) { // NOP } /// /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. /// public void Dispose() { _commandHandler.DisposeSafely(); } } }