Overall Statistics
Total Orders
0
Average Win
0%
Average Loss
0%
Compounding Annual Return
0%
Drawdown
0%
Expectancy
0
Start Equity
100000000
End Equity
100000000
Net Profit
0%
Sharpe Ratio
0
Sortino 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
Estimated Strategy Capacity
$0
Lowest Capacity Asset
Portfolio Turnover
0%
#region imports
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Globalization;
using System.Drawing;
using QuantConnect;
using QuantConnect.Algorithm.Framework;
using QuantConnect.Algorithm.Framework.Selection;
using QuantConnect.Algorithm.Framework.Alphas;
using QuantConnect.Algorithm.Framework.Portfolio;
using QuantConnect.Algorithm.Framework.Portfolio.SignalExports;
using QuantConnect.Algorithm.Framework.Execution;
using QuantConnect.Algorithm.Framework.Risk;
using QuantConnect.Algorithm.Selection;
using QuantConnect.Api;
using QuantConnect.Parameters;
using QuantConnect.Benchmarks;
using QuantConnect.Brokerages;
using QuantConnect.Commands;
using QuantConnect.Configuration;
using QuantConnect.Util;
using QuantConnect.Interfaces;
using QuantConnect.Algorithm;
using QuantConnect.Indicators;
using QuantConnect.Data;
using QuantConnect.Data.Auxiliary;
using QuantConnect.Data.Consolidators;
using QuantConnect.Data.Custom;
using QuantConnect.Data.Custom.IconicTypes;
using QuantConnect.DataSource;
using QuantConnect.Data.Fundamental;
using QuantConnect.Data.Market;
using QuantConnect.Data.Shortable;
using QuantConnect.Data.UniverseSelection;
using QuantConnect.Notifications;
using QuantConnect.Orders;
using QuantConnect.Orders.Fees;
using QuantConnect.Orders.Fills;
using QuantConnect.Orders.OptionExercise;
using QuantConnect.Orders.Slippage;
using QuantConnect.Orders.TimeInForces;
using QuantConnect.Python;
using QuantConnect.Scheduling;
using QuantConnect.Securities;
using QuantConnect.Securities.Equity;
using QuantConnect.Securities.Future;
using QuantConnect.Securities.Option;
using QuantConnect.Securities.Positions;
using QuantConnect.Securities.Forex;
using QuantConnect.Securities.Crypto;
using QuantConnect.Securities.CryptoFuture;
using QuantConnect.Securities.IndexOption;
using QuantConnect.Securities.Interfaces;
using QuantConnect.Securities.Volatility;
using QuantConnect.Storage;
using QuantConnect.Statistics;
using QCAlgorithmFramework = QuantConnect.Algorithm.QCAlgorithm;
using QCAlgorithmFrameworkBridge = QuantConnect.Algorithm.QCAlgorithm;
using Calendar = QuantConnect.Data.Consolidators.Calendar;

#endregion
namespace QuantConnect.Algorithm.CSharp
{
    public class FuturesVolatilityBreakout : QCAlgorithm
    {
        private int historyLength = 500;

        private Resolution resolution = Resolution.Daily;

        protected Dictionary<Symbol, RollingWindow<TradeBar>> DataSnapshot = new Dictionary<Symbol, RollingWindow<TradeBar>>();

        private static List<string> FUTURES_TICKERS = new List<string>()
        {
            // Futures.Indices.SP500EMini,
            // Futures.Energy.CrudeOilWTI,
            // Futures.Metals.Gold,
            // Futures.Currencies.EUR,
            // Futures.Financials.Y10TreasuryNote,

            Futures.Indices.SP500EMini,      // ES
            // Futures.Indices.NASDAQ100EMini,  // NQ
            // Futures.Indices.Dow30EMini,      // YM
            // Futures.Indices.Russell2000EMini,// RTY
            Futures.Grains.Corn,              // ZC
            Futures.Grains.Soybeans,          // ZS
            Futures.Grains.Wheat,             // ZW
            Futures.Grains.Oats,              // ZO
            // Futures.Grains.SoybeanMeal,       // ZM
            // Futures.Grains.SoybeanOil,        // ZL
            // Futures.Softs.Cocoa,              // CC
            Futures.Softs.Coffee,             // KC
            Futures.Meats.LiveCattle,        // LE
            //Futures.Meats.LeanHogs,          // HE
            Futures.Meats.FeederCattle,      // GF
            Futures.Energy.CrudeOilWTI,      // CL
            Futures.Energy.NaturalGas,       // NG
            Futures.Energy.HeatingOil,       // HO
            Futures.Energy.Gasoline,         // RB
            Futures.Metals.Gold,             // GC
            Futures.Metals.Silver,           // SI
            Futures.Metals.Copper,           // HG
            Futures.Metals.Platinum,         // PL
            Futures.Metals.Palladium,        // PA
            Futures.Currencies.EUR,         // 6E
            Futures.Currencies.GBP, // 6B
            Futures.Currencies.JPY,  // 6J
            // Futures.Currencies.CHF,   // 6S
            // Futures.Currencies.CAD, // 6C
            // Futures.Currencies.AUD, // 6A
            // Futures.Currencies.NZD, // 6N
            Futures.Financials.Y2TreasuryNote,  // ZT
            //Futures.Financials.Y5TreasuryNote,  // ZF
           //Futures.Financials.Y10TreasuryNote, // ZN
            Futures.Financials.Y30TreasuryBond, // ZB
           //Futures.Financials.EuroDollar
        };

        private List<Future> futures = new List<Future>();


        public override void Initialize()
        {
            SetStartDate(2010,1,1);   SetCash(100_000_000);

            foreach (string futureTicker in FUTURES_TICKERS)
            {
                var future = AddFuture(futureTicker,
                resolution,
                extendedMarketHours: true,
                dataNormalizationMode: DataNormalizationMode.BackwardsRatio,
                dataMappingMode: DataMappingMode.OpenInterest,
                contractDepthOffset: 0);

                future.SetFilter(futureFilterUniverse => futureFilterUniverse.FrontMonth());

                futures.Add(future);
            }

            SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage, AccountType.Margin);

            SetSecurityInitializer(
                new BrokerageModelSecurityInitializer(
                    BrokerageModel,
                    new FuncSecuritySeeder(GetLastKnownPrices)
                )
            );            
        }

        public override void OnData(Slice slice)
        {
            var budget = Portfolio.MarginRemaining;// / this.futures.Count;

            foreach (var kvp in slice.Bars)
            {
                var mappedSymbol = kvp.Key;

                Future owningFuture = null;

                foreach (var future in futures)
                {
                    if (future.Mapped == mappedSymbol)
                    {
                        owningFuture = future;
                        break;
                    }
                }

                
            }
        }
    }
}