/* * 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 Newtonsoft.Json; using QuantConnect.Util; using QuantConnect.Packets; using QuantConnect.Interfaces; using QuantConnect.Brokerages; using System.Collections.Generic; namespace QuantConnect { /// /// This class includes algorithm configuration settings and parameters. /// This is used to include configuration parameters in the result packet to be used for report generation. /// public class AlgorithmConfiguration { /// /// The algorithm's name /// public string Name { get; set; } /// /// List of tags associated with the algorithm /// public ISet Tags { get; set; } /// /// The algorithm's account currency /// [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] public string AccountCurrency { get; set; } /// /// The algorithm's brokerage model /// /// Required to set the correct brokerage model on report generation. public BrokerageName Brokerage { get; set; } /// /// The algorithm's account type /// /// Required to set the correct brokerage model on report generation. public AccountType AccountType { get; set; } /// /// The parameters used by the algorithm /// public IReadOnlyDictionary Parameters { get; set; } /// /// Backtest maximum end date /// public DateTime? OutOfSampleMaxEndDate { get; set; } /// /// The backtest out of sample day count /// public int OutOfSampleDays { get; set; } /// /// The backtest start date /// [JsonConverter(typeof(DateTimeJsonConverter), DateFormat.UI)] public DateTime StartDate { get; set; } /// /// The backtest end date /// [JsonConverter(typeof(DateTimeJsonConverter), DateFormat.UI)] public DateTime EndDate { get; set; } /// /// Number of trading days per year for Algorithm's portfolio statistics. /// public int TradingDaysPerYear { get; set; } /// /// Initializes a new instance of the class /// public AlgorithmConfiguration(string name, ISet tags, string accountCurrency, BrokerageName brokerageName, AccountType accountType, IReadOnlyDictionary parameters, DateTime startDate, DateTime endDate, DateTime? outOfSampleMaxEndDate, int outOfSampleDays = 0, int tradingDaysPerYear = 0) { Name = name; Tags = tags; OutOfSampleMaxEndDate = outOfSampleMaxEndDate; TradingDaysPerYear = tradingDaysPerYear; OutOfSampleDays = outOfSampleDays; AccountCurrency = accountCurrency; Brokerage = brokerageName; AccountType = accountType; Parameters = parameters; StartDate = startDate; EndDate = endDate; } /// /// Initializes a new empty instance of the class /// public AlgorithmConfiguration() { // use default value for backwards compatibility TradingDaysPerYear = 252; } /// /// Provides a convenience method for creating a for a given algorithm. /// /// Algorithm for which the configuration object is being created /// The associated backtest node packet if any /// A new AlgorithmConfiguration object for the specified algorithm public static AlgorithmConfiguration Create(IAlgorithm algorithm, BacktestNodePacket backtestNodePacket) { return new AlgorithmConfiguration( algorithm.Name, algorithm.Tags, algorithm.AccountCurrency, BrokerageModel.GetBrokerageName(algorithm.BrokerageModel), algorithm.BrokerageModel.AccountType, algorithm.GetParameters(), algorithm.StartDate, algorithm.EndDate, backtestNodePacket?.OutOfSampleMaxEndDate, backtestNodePacket?.OutOfSampleDays ?? 0, // use value = 252 like default for backwards compatibility algorithm?.Settings?.TradingDaysPerYear ?? 252); } } }