Overall Statistics |
Total Trades 5 Average Win 13.26% Average Loss 0% Compounding Annual Return -2.156% Drawdown 44.600% Expectancy 0 Net Profit -1.075% Sharpe Ratio 0.963 Probabilistic Sharpe Ratio 38.309% Loss Rate 0% Win Rate 100% Profit-Loss Ratio 0 Alpha 0.999 Beta 10.596 Annual Standard Deviation 1.302 Annual Variance 1.696 Information Ratio 1.018 Tracking Error 1.208 Treynor Ratio 0.118 Total Fees $1028.60 |
class FuturesAlgo(QCAlgorithm): def Initialize(self): self.SetStartDate(2015, 1, 1) self.SetEndDate(2015, 6, 30) self.SetCash(1000000) self.es = self.AddFuture(Futures.Indices.SP500EMini) # Filter contracts to only front month contract self.es.SetFilter(lambda x : x.FrontMonth()) # 5 period SMA self.ema = ExponentialMovingAverage(200) # Pointer to track front month contract self.frontmonthContract = None def OnData(self, data): for chain in data.FutureChains: # Trades bars for contracts in chain tradebars = chain.Value.TradeBars contracts = [contract for contract in chain.Value] # If front month contract is updated if self.frontmonthContract == None or contracts[0].Symbol != self.frontmonthContract.Symbol: # contracts has only 1 element, the front month contract self.frontmonthContract = contracts[0] symbol = self.frontmonthContract.Symbol # Update SMA with tradebar data price = 0 if symbol in tradebars.Keys: tradebar = tradebars[symbol] price = tradebar.Close self.ema.Update(tradebar.EndTime, tradebar.Close) if self.ema.IsReady: if not self.Portfolio.Invested: if price != 0 and price > self.ema.Current.Value: self.SetHoldings(self.frontmonthContract.Symbol, 0.5) self.Debug(f"Symbol: {symbol}, Expiry: {self.frontmonthContract.Expiry}, SMA: {self.ema.Current.Value}")