Overall Statistics |
Total Trades 19 Average Win 10.51% Average Loss -11.49% Compounding Annual Return 25947.523% Drawdown 44.100% Expectancy 0.368 Net Profit 144.660% Sharpe Ratio 4.732 Loss Rate 29% Win Rate 71% Profit-Loss Ratio 0.91 Alpha 4.675 Beta 3.139 Annual Standard Deviation 1.052 Annual Variance 1.107 Information Ratio 4.782 Tracking Error 1.021 Treynor Ratio 1.586 Total Fees $832.50 |
using System; using System.Collections.Generic; using System.Linq; using QuantConnect.Data; using QuantConnect.Interfaces; using QuantConnect.Securities; namespace QuantConnect.Algorithm.CSharp { /// <summary> /// This example demonstrates how to add futures for a given underlying asset. /// It also shows how you can prefilter contracts easily based on expirations, and how you /// can inspect the futures chain to pick a specific contract to trade. /// </summary> /// <meta name="tag" content="using data" /> /// <meta name="tag" content="benchmarks" /> /// <meta name="tag" content="futures" /> //public class BasicTemplateFuturesAlgorithm : QCAlgorithm, IRegressionAlgorithmDefinition public class BasicTemplateFuturesAlgorithm : QCAlgorithm { // S&P 500 EMini futures private const string RootES = Futures.Indices.SP500EMini; public Symbol ES = QuantConnect.Symbol.Create(RootES, SecurityType.Future, Market.USA); // 30-yr Treasury futures private const string RootZB = Futures.Financials.Y30TreasuryBond; public Symbol ZB = QuantConnect.Symbol.Create(RootZB, SecurityType.Future, Market.USA); // 10-yr Treasury futures private const string RootZN = Futures.Financials.Y10TreasuryNote; public Symbol ZN = QuantConnect.Symbol.Create(RootZN, SecurityType.Future, Market.USA); // Gold futures private const string RootGC = Futures.Metals.Gold; public Symbol GC = QuantConnect.Symbol.Create(RootGC, SecurityType.Future, Market.USA); // S&P 500 EMini futures private const string RootCL = Futures.Energies.CrudeOilWTI; public Symbol CL = QuantConnect.Symbol.Create(RootCL, SecurityType.Future, Market.USA); /// <summary> /// Initialize your algorithm and add desired assets. /// </summary> public override void Initialize() { SetStartDate(2014, 1, 1); SetEndDate(2014, 3, 1); SetCash(500000); var futureES = AddFuture(RootES); //eMini SP500 var futureZB = AddFuture(RootZB); //30-Year Treasury var futureZN = AddFuture(RootZN); //10-Year Treasury var futureCL = AddFuture(RootCL); //Crude Oil var futureGC = AddFuture(RootGC); //Gold // set our expiry filter for this futures chain futureES.SetFilter(TimeSpan.Zero, TimeSpan.FromDays(182)); futureZB.SetFilter(TimeSpan.Zero, TimeSpan.FromDays(182)); futureZN.SetFilter(TimeSpan.Zero, TimeSpan.FromDays(182)); futureCL.SetFilter(TimeSpan.Zero, TimeSpan.FromDays(182)); futureGC.SetFilter(TimeSpan.Zero, TimeSpan.FromDays(182)); var benchmark = AddEquity("SPY"); SetBenchmark(benchmark.Symbol); Schedule.On(DateRules.MonthStart("SPY"), TimeRules.AfterMarketOpen("SPY", 10), () => { Liquidate(); //Change the above to Reblance(slice)??? How to get slice from sheduled events?? }); } /// <summary> /// Event - v3.0 DATA EVENT HANDLER: (Pattern) Basic template for user to override for receiving all subscription data in a single event /// </summary> /// <param name="slice">The current slice of data keyed by symbol string</param> public override void OnData(Slice slice) { if (!Portfolio.Invested) { Rebalance(slice); } } /// <summary> // This is the reblancing code to set the current portfolio to the desired leverage /// </summary> public void Rebalance(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(45) select futuresContract ).FirstOrDefault(); // if found, trade it if (contract != null) { //Trade the ES Future Contract only if (contract.Symbol.Underlying == RootES) { SetHoldings(contract.Symbol, 5); } else {return;} //Do nothing if underlying is not ES //Trade the ZB Future Contract only if (contract.Symbol.Underlying == RootZB) { SetHoldings(contract.Symbol, 5); } else {return;} //Do nothing if underlying is not ZB } else {return;} //Do nothing if contract == null } } } }