| Overall Statistics |
|
Total Trades 19708 Average Win 0.00% Average Loss 0.00% Compounding Annual Return -99.991% Drawdown 22.400% Expectancy -0.849 Net Profit -22.443% Sharpe Ratio -12.314 Loss Rate 90% Win Rate 10% Profit-Loss Ratio 0.55 Alpha -6.261 Beta 0.428 Annual Standard Deviation 0.504 Annual Variance 0.254 Information Ratio -12.584 Tracking Error 0.504 Treynor Ratio -14.478 Total Fees $36789.10 |
from clr import AddReference
AddReference("System")
AddReference("QuantConnect.Algorithm")
AddReference("QuantConnect.Common")
from System import *
from QuantConnect import *
from QuantConnect.Algorithm import *
from QuantConnect.Securities import *
from datetime import timedelta
### <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" />
class BasicTemplateFuturesAlgorithm(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2017, 1, 1)
#self.SetEndDate(2018, 1, 1)
self.SetEndDate(2017, 1, 10)
self.SetCash(1000000)
# Subscribe and set our expiry filter for the futures chain
futureES = self.AddFuture(Futures.Indices.SP500EMini)
futureES.SetFilter(timedelta(0), timedelta(90))
futureNQ = self.AddFuture(Futures.Indices.NASDAQ100EMini)
futureNQ.SetFilter(timedelta(0), timedelta(90))
benchmark = self.AddEquity("SPY");
self.SetBenchmark(benchmark.Symbol);
self.frontES = None
self.frontNQ = None
def OnData(self,slice):
for kvp in slice.Bars:
self.Debug("---> OnData: {}, {}, {}" .format(self.Time, kvp.Key.Value, kvp.Value.Close));
for chain in slice.FutureChains:
if chain.Key.Value == Futures.Indices.SP500EMini:
if self.frontES is None :# Get contracts expiring no earlier than in 90 days
contracts = list(filter(lambda x: x.Expiry > self.Time + timedelta(10), chain.Value))
# if there is any contract, trade the front contract
if len(contracts) == 0: continue
self.frontES = sorted(contracts, key = lambda x: x.Expiry, reverse=True)[0]
if chain.Key.Value == Futures.Indices.NASDAQ100EMini:
if self.frontNQ is None:
# Get contracts expiring no earlier than in 90 days
contracts = list(filter(lambda x: x.Expiry > self.Time + timedelta(10), chain.Value))
# if there is any contract, trade the front contract
if len(contracts) == 0: continue
self.frontNQ = sorted(contracts, key = lambda x: x.Expiry, reverse=True)[0]
#if data.ContainsKey(self.vx1) and data.ContainsKey(self.es1):
# update the rolling window price and time-to-maturity series every day
self.Debug("self.frontES is " + str(self.frontES))
self.Debug("self.frontNQ is " + str(self.frontNQ))
if self.frontES and self.frontNQ:
if not self.Portfolio.Invested:
self.SetHoldings(self.frontES.Symbol , 0.2)
self.SetHoldings(self.frontNQ.Symbol , -0.2)
else:
self.Liquidate()
def OnOrderEvent(self, orderEvent):
self.Log(str(orderEvent))