Overall Statistics
Total Trades
39
Average Win
10.27%
Average Loss
-13.21%
Compounding Annual Return
-99.992%
Drawdown
95.900%
Expectancy
-0.667
Net Profit
-86.310%
Sharpe Ratio
-0.308
Probabilistic Sharpe Ratio
19.570%
Loss Rate
81%
Win Rate
19%
Profit-Loss Ratio
0.78
Alpha
-2.706
Beta
13.399
Annual Standard Deviation
2.648
Annual Variance
7.01
Information Ratio
-0.381
Tracking Error
2.514
Treynor Ratio
-0.061
Total Fees
$81.40
import clr
import decimal as d

import pandas as pd


class FuturesMovingAverageCrossOverExample2(QCAlgorithm):

    def Initialize(self):
        
        self.contract = None

        self.SetStartDate(2018, 1, 1)    #Set Start Date
        self.SetEndDate(2018, 6,6)      #Set End Date
        self.SetCash(100000)             #Set Strategy Cash
        self.SetWarmUp(TimeSpan.FromDays(5)) # Set warm up
        self.SetTimeZone('America/Los_Angeles') # Set timezone
        
        self.new_day = True
        self.reset = True
        self.limitOrderTicket = None
        self.profitTargetOrderTicket = None
        self.stopLossOrderTicket = None
        
        # Risk management
        
        # Subscribe and set our expiry filter for the futures chain
        self.SymbolData = { }
        futureES = self.AddFuture(Futures.Indices.SP500EMini)
        futureES.SetFilter(TimeSpan.Zero, TimeSpan.FromDays(360))
        self.Schedule.On(self.DateRules.Every(DayOfWeek.Monday), self.TimeRules.At(9, 30), self.ScheduleDemo)
        
        # Indicators
        
    def OnData(self, slice):
        # Reset any open positions based on a contract rollover.
        if self.reset:
            self.reset = False
            self.Log('RESET: closing all positions')
            self.Liquidate()
            
            
    def OnSecuritiesChanged(self, changes):
        for s in changes.AddedSecurities:
            if s.Symbol not in self.SymbolData:
                history = self.History(s.Symbol, 30, Resolution.Hour)
                self.__macd = self.MACD(s.Symbol, 12, 26, 9, MovingAverageType.Exponential, Resolution.Minute)
                self.SymbolData[s.Symbol] = self.__macd
                
        
    def ScheduleDemo(self):
        for symbol, assetData in self.SymbolData.items():
            price = self.ActiveSecurities[symbol].Price
            if assetData:
                self.Log("2")
                signalDeltaPercent = (assetData.Current.Value - assetData.Signal.Current.Value)
                currentPrice = price
                tolerance = 0.003
                stopLossPrice = currentPrice - 100
                profitTargetPrice = currentPrice + 50
                holdings = self.Portfolio[symbol].Quantity

                if holdings <= 0 and signalDeltaPercent < 0 and signalDeltaPercent < -tolerance :
                    # Go long
                    self.Buy(symbol, 1)
                    self.LimitOrder(symbol, -1, profitTargetPrice)
                    self.StopMarketOrder(symbol, -1, stopLossPrice)
                    self.Log("0")
                        
                if  holdings >= 0 and signalDeltaPercent > 0 and signalDeltaPercent > tolerance :
                    #Go short
                    self.Buy(symbol, -1)
                    self.LimitOrder(symbol, 1, profitTargetPrice)
                    self.StopMarketOrder(symbol, 1, stopLossPrice)
                    self.Log("1")