| Overall Statistics |
|
Total Trades 123 Average Win 0.69% Average Loss -0.55% Compounding Annual Return 19.835% Drawdown 4.600% Expectancy 0.188 Net Profit 7.116% Sharpe Ratio 1.944 Probabilistic Sharpe Ratio 70.465% Loss Rate 48% Win Rate 52% Profit-Loss Ratio 1.26 Alpha 0.106 Beta 0.337 Annual Standard Deviation 0.082 Annual Variance 0.007 Information Ratio 0.03 Tracking Error 0.09 Treynor Ratio 0.472 Total Fees $455.10 |
class UncoupledVentralPrism(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2017, 1, 1)
self.SetEndDate(2017, 5, 19)
self.SetCash(100000)
equity = self.AddEquity("SPY")
future = self.AddFuture(Futures.Indices.SP500EMini)
future.SetFilter(TimeSpan.Zero, TimeSpan.FromDays(60))
self.sma5 = self.SMA(equity.Symbol, 5)
self.sma9 = self.SMA(equity.Symbol, 9)
self.Schedule.On(self.DateRules.EveryDay("SPY"), \
self.TimeRules.AfterMarketOpen(equity.Symbol, 10), \
self.Trade)
def Trade(self):
if self.Portfolio.Invested:
return
for chain in self.CurrentSlice.FutureChains:
contracts = [contract for contract in chain.Value if contract.Expiry > self.Time + timedelta(days=5)]
sorted_contracts = sorted(contracts, key=lambda x: x.Expiry)
if len(sorted_contracts) == 0:
continue
contract = sorted_contracts[0]
quantity = 2 if self.sma5 > self.sma9 else -2
self.MarketOrder(contract.Symbol, quantity)
def OnEndOfDay(self):
self.Liquidate()