Overall Statistics
Total Trades
0
Average Win
0%
Average Loss
0%
Compounding Annual Return
0%
Drawdown
0%
Expectancy
0
Net Profit
0%
Sharpe Ratio
0
Probabilistic Sharpe Ratio
0%
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
0
Beta
0
Annual Standard Deviation
0
Annual Variance
0
Information Ratio
0
Tracking Error
0
Treynor Ratio
0
Total Fees
$0.00
Estimated Strategy Capacity
$0
Lowest Capacity Asset
class StochMeanReverter(QCAlgorithm):

    # ==================================================================================
    def Initialize(self):
        self.InitAlgoParams()
        self.InitBacktestParams()

    # ==================================================================================
    def InitAlgoParams(self):
        self.symbol           = "BTCUSD" 
        self.SetBrokerageModel(BrokerageName.GDAX, AccountType.Cash)
        self.AddCrypto(self.symbol, Resolution.Hour)   
        self.smPriceWindow  = SmartRollingWindow[float](4)

    # ==================================================================
    def InitBacktestParams(self):
        self.initCash = 100000           # todo: use this to track buy+hold     
        self.SetStartDate(2021, 11, 1)  # Set Start Date 
        self.SetCash(self.initCash)     # Set Strategy Cash
        self.SetBenchmark(self.symbol)


    # ============================================================================
    def OnData(self, dataSlice):
        
        self.smPriceWindow.Add(dataSlice[self.symbol].Close )
        hasAtLeast = self.smPriceWindow.hasAtLeast(3)
        return
    
    
    

###################################################
#
#  Smart Rolling window
#  ========================
#  Convenience class that extends RollingWindow
#
#  Methods:
#  -------------------------
#  mySmartWindow.IsRising()
#  mySmartWindow.IsFalling()
#  mySmartWindow.CrossesAbove(value)
#  mySmartWindow.CrossesBelow(value)
#  mySmartWindow.IsFlat(decimalPrecision)
#  mySmartWindow.hasAtLeastThisMany(value)
#
###################################################
class SmartRollingWindow(RollingWindow):
    
    ## Return True if rolling window has at least minCount many elements
    def hasAtLeast(self,minCount):
        
        # Do something here
        
        return False