| Overall Statistics |
|
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Probabilistic Sharpe Ratio 0% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio 3.304 Tracking Error 0.109 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $0 Lowest Capacity Asset |
/*
* 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.Indicators;
using System.Collections.Generic;
using QuantConnect.Data.Consolidators;
using QuantConnect.Data.Market;
using QuantConnect.Securities.Future;
using System.Globalization;
namespace QuantConnect.Algorithm.CSharp
{
/// <summary>
/// Demonstration of how to rollover futures
/// </summary>
/// <meta name="tag" content="indicators" />
/// <meta name="tag" content="using data" />
/// <meta name="tag" content="consolidating data" />
public class TradeBarConsolidatorTest : QCAlgorithm
{
private Future ESSubscribeFuture;
private FuturesContract ESFrontMonthContract;
private TradeBarConsolidator ESTradeBarConsolidator;
/// <summary>
/// Initializes the algorithm state.
/// </summary>
public override void Initialize()
{
SetStartDate(2021, 3, 15);
SetEndDate(2021, 3, 23);
SetCash(100000);
// Subscribe to futures chain
ESSubscribeFuture = AddFuture(Futures.Indices.SP500EMini, Resolution.Minute, Market.CME, false, 0m);
// Filter for front month contracts
// OnlyApplyFilterAtMarketOpen for performance
ESSubscribeFuture.SetFilter(universe => universe.FrontMonth().OnlyApplyFilterAtMarketOpen());
// Define the TradeBar Consolidator
ESTradeBarConsolidator = new TradeBarConsolidator(TimeSpan.FromMinutes(15));
ESTradeBarConsolidator.DataConsolidated += (sender, consolidated) =>
{
// When a TradeBar is created, call the event handler
OnTradeBarConsolidated(consolidated);
};
}
/// <summary>
/// The framework verifies that this method exists, so we define it.
/// </summary>
public void OnData(TradeBars myData)
{
}
/// <summary>
/// The framework verifies that this method exists, so we define it.
/// </summary>
public void OnData(Slice SliceData)
{
foreach (var chain in SliceData.FutureChains)
{
// Sort our contracts by Expiry in ascending order
var sortedByExpiryContracts = chain.Value.OrderBy(x => x.Expiry).ToList();
// Get first contract from list
ESFrontMonthContract = sortedByExpiryContracts[0];
// Get list of TradeBars from the chain
TradeBars ESTradeBarList = chain.Value.TradeBars;
if (ESTradeBarList.ContainsKey(ESFrontMonthContract.Symbol))
{
// Get TradeBar for ES
TradeBar ESTradeBar = ESTradeBarList[ESFrontMonthContract.Symbol];
// Update TradeBar Consolidator
// When you update with a different symbol, it throws an error
// Next line is commented so I can attach the code in the community
// ESTradeBarConsolidator.Update(ESTradeBar);
}
}
}
public void OnTradeBarConsolidated(TradeBar ESTradeBar)
{
Debug(ESTradeBar.Symbol);
}
}
}