Files
quantconnect--lean/Engine/Setup/SetupHandlerParameters.cs
Stefano Raggi d407307566 Add IObjectStore interface with LocalObjectStore implementation
This commit is squashed from iterative development:

- More consistent method naming
- Storage root path updated to be absolute and include algorithm name
- Storage root path created only if object store is actually used
- Implemented XML save/load
- Added missing unit tests
- Replaced Log.Trace with Log.Error calls
- Added the object store name logging in Engine.Main
- Read storage root from config
- Create algorithm storage root folder in Initialize
- Remove empty folder in Dispose
- Added null checks in all methods
- Added missing XML parameter docs
- make Initialize and Dispose virtual
- make AlgorithmStorageRoot protected

The IObjectStore abstraction provides algorithms with a persistent
storage mechanism. While the algorithm is running, data is maintained
in memory as a dictionary of raw bytes (string -> byte[]). This ensures
we avoid any reference type shenanigans. Periodically, the data in the
object store is persisted and additionally, when the algorithm shuts
down, the object store's data will again be persisted. This ensures that
when the algorithm starts up again, it will have access to any state
that has been saved into the object store.

A great use case for IObjectStore is saving a compute heavy model.
For example, computing the weights of a deep neural network is very
CPU intensive, but after the weights are computed, evaluation is fairly
quick. An initial backtest can be used to solved for the network's weights
and then subsequent backtests or even in live mode, the weights will be
available to the algorithm provided they were saved into the object store.

Also, some libraries require a file path to load model data. The object
store provides a `GetFilePath(key)` method which will copy the data for
the provided key to the disk and return that path so the library can load
the model data.
2019-12-17 22:21:11 -05:00

103 lines
3.6 KiB
C#

/*
* 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.Interfaces;
using QuantConnect.Lean.Engine.DataFeeds;
using QuantConnect.Lean.Engine.RealTime;
using QuantConnect.Lean.Engine.Results;
using QuantConnect.Lean.Engine.TransactionHandlers;
using QuantConnect.Packets;
namespace QuantConnect.Lean.Engine.Setup
{
/// <summary>
/// Defines the parameters for <see cref="ISetupHandler"/>
/// </summary>
public class SetupHandlerParameters
{
/// <summary>
/// Gets the universe selection
/// </summary>
public UniverseSelection UniverseSelection { get; }
/// <summary>
/// Gets the algorithm
/// </summary>
public IAlgorithm Algorithm { get; }
/// <summary>
/// Gets the Brokerage
/// </summary>
public IBrokerage Brokerage { get; }
/// <summary>
/// Gets the algorithm node packet
/// </summary>
public AlgorithmNodePacket AlgorithmNodePacket { get; }
/// <summary>
/// Gets the algorithm node packet
/// </summary>
public IResultHandler ResultHandler { get; }
/// <summary>
/// Gets the TransactionHandler
/// </summary>
public ITransactionHandler TransactionHandler { get; }
/// <summary>
/// Gets the RealTimeHandler
/// </summary>
public IRealTimeHandler RealTimeHandler { get; }
/// <summary>
/// Gets the ObjectStore
/// </summary>
public IObjectStore ObjectStore { get; }
/// <summary>
/// Creates a new instance
/// </summary>
/// <param name="universeSelection">The universe selection instance</param>
/// <param name="algorithm">Algorithm instance</param>
/// <param name="brokerage">New brokerage output instance</param>
/// <param name="algorithmNodePacket">Algorithm job task</param>
/// <param name="resultHandler">The configured result handler</param>
/// <param name="transactionHandler">The configured transaction handler</param>
/// <param name="realTimeHandler">The configured real time handler</param>
/// <param name="objectStore">The configured object store</param>
public SetupHandlerParameters(UniverseSelection universeSelection,
IAlgorithm algorithm,
IBrokerage brokerage,
AlgorithmNodePacket algorithmNodePacket,
IResultHandler resultHandler,
ITransactionHandler transactionHandler,
IRealTimeHandler realTimeHandler,
IObjectStore objectStore
)
{
UniverseSelection = universeSelection;
Algorithm = algorithm;
Brokerage = brokerage;
AlgorithmNodePacket = algorithmNodePacket;
ResultHandler = resultHandler;
TransactionHandler = transactionHandler;
RealTimeHandler = realTimeHandler;
ObjectStore = objectStore;
}
}
}