/*
* 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 System.Collections.Generic;
using System.Globalization;
using System.Linq;
using Newtonsoft.Json;
using QuantConnect.Securities;
namespace QuantConnect.Packets
{
///
/// Algorithm backtest task information packet.
///
public class BacktestNodePacket : AlgorithmNodePacket
{
// default random id, static so its one per process
private static readonly string DefaultId
= Guid.NewGuid().ToString("N", CultureInfo.InvariantCulture);
///
/// Name of the backtest as randomly defined in the IDE.
///
[JsonProperty(PropertyName = "sName")]
public string Name = "";
///
/// BacktestId / Algorithm Id for this task
///
[JsonProperty(PropertyName = "sBacktestID")]
public string BacktestId = DefaultId;
///
/// Backtest start-date as defined in the Initialize() method.
///
[JsonProperty(PropertyName = "dtPeriodStart")]
public DateTime? PeriodStart;
///
/// Backtest end date as defined in the Initialize() method.
///
[JsonProperty(PropertyName = "dtPeriodFinish")]
public DateTime? PeriodFinish;
///
/// Estimated number of trading days in this backtest task based on the start-end dates.
///
[JsonProperty(PropertyName = "iTradeableDates")]
public int TradeableDates = 0;
///
/// The initial breakpoints for debugging, if any
///
[JsonProperty(PropertyName = "aBreakpoints")]
public List Breakpoints = new List();
///
/// The initial Watchlist for debugging, if any
///
[JsonProperty(PropertyName = "aWatchlist")]
public List Watchlist = new List();
///
/// True, if this is a debugging backtest
///
public bool IsDebugging => Breakpoints.Any();
///
/// Optional initial cash amount if set
///
public CashAmount? CashAmount;
///
/// Default constructor for JSON
///
public BacktestNodePacket()
: base(PacketType.BacktestNode)
{
Controls = new Controls
{
MinuteLimit = 500,
SecondLimit = 100,
TickLimit = 30
};
}
///
/// Initialize the backtest task packet.
///
public BacktestNodePacket(int userId, int projectId, string sessionId, byte[] algorithmData, decimal startingCapital, string name, UserPlan userPlan = UserPlan.Free)
: this (userId, projectId, sessionId, algorithmData, name, userPlan, new CashAmount(startingCapital, Currencies.USD))
{
}
///
/// Initialize the backtest task packet.
///
public BacktestNodePacket(int userId, int projectId, string sessionId, byte[] algorithmData, string name, UserPlan userPlan = UserPlan.Free, CashAmount? startingCapital = null)
: base(PacketType.BacktestNode)
{
UserId = userId;
Algorithm = algorithmData;
SessionId = sessionId;
ProjectId = projectId;
UserPlan = userPlan;
Name = name;
CashAmount = startingCapital;
Language = Language.CSharp;
Controls = new Controls
{
MinuteLimit = 500,
SecondLimit = 100,
TickLimit = 30
};
}
}
}