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 0 Tracking Error 0 Treynor Ratio 0 Total Fees $0.00 |
/* * 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 QuantConnect.Data; using QuantConnect.Data.Market; using QuantConnect.Securities; using System.Collections.Generic; using QuantConnect.Data.Consolidators; namespace QuantConnect.Algorithm.CSharp { /// <summary> /// A demonstration of Micro Futures /// </summary> /// <meta name="tag" content="futures" /> public class MicroFutures : QCAlgorithm { // A list of symbols stored in hashset private HashSet<Symbol> _futureContracts = new HashSet<Symbol>(); public override void Initialize() { SetStartDate(2019, 9, 19); SetEndDate(2019, 9, 23); SetCash(1000000); // this works for E-Mini S&P 500 var future_ES = AddFuture("ES", Resolution.Minute, Market.USA, true, 0m); future_ES.SetFilter(TimeSpan.Zero, TimeSpan.FromDays(182)); // this does not work for Micro E-Mini S&P 500 var future_MES = AddFuture("MES", Resolution.Minute, Market.USA, true, 0m); future_MES.SetFilter(TimeSpan.Zero, TimeSpan.FromDays(182)); } public override void OnData(Slice slice) { foreach(var chain in slice.FutureChains) { // find the front contract expiring no earlier than in 90 days var contract = ( from futuresContract in chain.Value.OrderBy(x => x.Expiry) where futuresContract.Expiry > Time.Date.AddDays(90) select futuresContract ).FirstOrDefault(); // proceed if there is a new front end contract if (contract != null) { // if necessary, add to hash set and add consolidator if (!_futureContracts.Contains(contract.Symbol)) { _futureContracts.Add(contract.Symbol); var consolidator = new TradeBarConsolidator(TimeSpan.FromMinutes(720)); consolidator.DataConsolidated += OnDataConsolidated; SubscriptionManager.AddConsolidator(contract.Symbol, consolidator); Log("Added new consolidator for " + contract.Symbol + " :: " + contract.Symbol.Value); } } } } public void OnDataConsolidated(object sender, TradeBar quoteBar) { Log("OnDataConsolidated called for " + quoteBar.Symbol); } } }