Overall Statistics |
Total Trades 89 Average Win 0.09% Average Loss -0.11% Compounding Annual Return -49.851% Drawdown 2.300% Expectancy -0.284 Net Profit -1.447% Sharpe Ratio -4.452 Probabilistic Sharpe Ratio 13.229% Loss Rate 61% Win Rate 39% Profit-Loss Ratio 0.85 Alpha -0.888 Beta 0.793 Annual Standard Deviation 0.091 Annual Variance 0.008 Information Ratio -12.724 Tracking Error 0.08 Treynor Ratio -0.512 Total Fees $1317.20 Estimated Strategy Capacity $2600000.00 Lowest Capacity Asset MES XMXYBDF3IXHD |
import datetime from AlgorithmImports import * class BasicTemplateFuturesAlgorithm(QCAlgorithm): def __init__(self): super().__init__() self.signal = None def Initialize(self): self.SetStartDate(2020, 12, 25) self.SetEndDate(2021, 1, 1) self.SetCash(100000) resolution = Resolution.Hour es = self.AddFuture(Futures.Indices.MicroSP500EMini, resolution) vx = self.AddFuture(Futures.Indices.VIX, resolution) es.SetFilter(TimeSpan.FromDays(5), TimeSpan.FromDays(30)) vx.SetFilter(TimeSpan.FromDays(5), TimeSpan.FromDays(130)) def OnMarginCallWarning(self): self.Error("You received a margin call warning..") def OnData(self, slice): for chain in slice.FutureChains: vix_contracts = [contract for contract in chain.Value if contract.Symbol.ID.Symbol == Futures.Indices.VIX] es_contracts = [contract for contract in chain.Value if contract.Symbol.ID.Symbol == Futures.Indices.MicroSP500EMini] if vix_contracts: vix_sorted_exp = sorted(vix_contracts, key=lambda k: k.Expiry, reverse=False) vx1 = slice.Bars[vix_sorted_exp[0].Symbol].Price vx3 = slice.Bars[vix_sorted_exp[2].Symbol].Price self.signal = vx1<vx3 if es_contracts and self.signal is not None: es_sorted_exp = sorted(es_contracts, key=lambda k: k.Expiry, reverse=False) es_front = es_sorted_exp[0] if not self.Portfolio.Invested and self.signal: self.SetHoldings(es_front.Symbol, 0.1) else: self.Liquidate()