Overall Statistics
Total Trades
22
Average Win
1.79%
Average Loss
-6.00%
Compounding Annual Return
-100.000%
Drawdown
74.700%
Expectancy
-0.900
Net Profit
-53.780%
Sharpe Ratio
-0.373
Probabilistic Sharpe Ratio
19.111%
Loss Rate
92%
Win Rate
8%
Profit-Loss Ratio
0.30
Alpha
-0.82
Beta
0.859
Annual Standard Deviation
2.678
Annual Variance
7.173
Information Ratio
-0.296
Tracking Error
2.669
Treynor Ratio
-1.163
Total Fees
$62.90
Estimated Strategy Capacity
$130000000.00
Lowest Capacity Asset
CL XYME7AM671S1
# CrudeOilWTI TrueRange


class LogicalBrownKoala(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2022, 4, 15)
        self.SetCash(100000)
        future = self.AddFuture(Futures.Energies.CrudeOilWTI, Resolution.Minute)
        future.SetFilter(timedelta(10), timedelta(180))

        self.slow_sma = None
        self.slow_sma_period = 25
        self.fast_sma = None
        self.fast_sma_period = 12
        self.CCIPeriod = 30 
        self.CCIupperBound = 100 
        self.CCIlowerBound = -100 
        self.volume_sma_period = 30
        self.consolidator_by_symbol = {}
        
        
    def OnData(self, slice):

        stop_time_start = self.Time.replace(hour=15, minute=00)
        stop_time_end = self.Time.replace(hour=16, minute=30)
        if self.Time > stop_time_end or self.Time < stop_time_start:
            return
        
        for chain in slice.FutureChains.Values:
            contracts = chain.Contracts
            if len(contracts) == 0:
                continue
            sorted_by_oi_contracts = sorted(contracts.Values, key=lambda k: k.OpenInterest, reverse=True)
            popular_contract = sorted_by_oi_contracts[0]

            if popular_contract.Symbol not in self.consolidator_by_symbol:
                Consolidator = TradeBarConsolidator(timedelta(minutes=3))
                self.consolidator_by_symbol[popular_contract.Symbol] = Consolidator
                
                self.slow_sma = LinearWeightedMovingAverage(self.slow_sma_period)
                self.RegisterIndicator(popular_contract.Symbol, self.slow_sma, Consolidator)

                self.fast_sma = LinearWeightedMovingAverage(self.fast_sma_period)
                self.RegisterIndicator(popular_contract.Symbol, self.fast_sma, Consolidator)

                self.volume_sma = LinearWeightedMovingAverage(self.fast_sma_period)
                self.RegisterIndicator(popular_contract.Symbol, self.volume_sma, Consolidator, Field.Volume)

                self.cci = self.CCI(popular_contract.Symbol, self.CCIPeriod,  MovingAverageType.Simple, Resolution.Daily)
                self.RegisterIndicator(popular_contract.Symbol, self.cci, Consolidator)

                self.true_range = TrueRange()
                self.RegisterIndicator(popular_contract.Symbol, self.true_range, Consolidator)

            self.Plot("Indicator", "TrueRange", self.true_range.Current.Value)    
            '''
            self.Plot("Indicator", "SMA slow", self.slow_sma.Current.Value)
            self.Plot("Indicator", "SMA fast", self.fast_sma.Current.Value)
            self.Plot("Indicator 2", "SMA Volume", self.volume_sma.Current.Value)
            self.Plot("CCI", "CCI value", self.cci.Current.Value)
            '''
            
            if self.slow_sma.Current.Value > self.fast_sma.Current.Value:
                self.SetHoldings(popular_contract.Symbol, 1)