Overall Statistics
Total Trades
2
Average Win
5.52%
Average Loss
0%
Compounding Annual Return
0.534%
Drawdown
56.700%
Expectancy
0
Net Profit
5.523%
Sharpe Ratio
0.122
Probabilistic Sharpe Ratio
0.191%
Loss Rate
0%
Win Rate
100%
Profit-Loss Ratio
0
Alpha
0.016
Beta
0.049
Annual Standard Deviation
0.179
Annual Variance
0.032
Information Ratio
-0.401
Tracking Error
0.238
Treynor Ratio
0.448
Total Fees
$74.00
from math import floor

class FuturesHarryBrownStyle(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2010, 4, 20)
        self.SetCash(1000000) 
        self.Settings.FreePortfolioValuePercentage = 0.3
        
        self.usd = self.AddFuture(Futures.Indices.Russell2000EMini, Resolution.Minute) 
        
        # Work:
        #  Futures.Indices.Russell2000EMini
        
        # Don't work: 
        #  Futures.Indices.SP500EMini
        #  Futures.Indices.NASDAQ100EMini
        #  Futures.Indices.Dow30EMini
        
        self.usd.SetFilter(30, 90)
        self.bot = False


    def OnData(self, slice):
        if self.bot:
            return
        
        for chain in slice.FutureChains:
            popularContracts = [contract for contract in chain.Value if contract.LastPrice > 0 ]
  
            if len(popularContracts) == 0:
                continue

            sortedByOIContracts = sorted(popularContracts, key=lambda k : k.OpenInterest, reverse=True)
            self.liquidContract = sortedByOIContracts[0]
            
            if self.liquidContract.Symbol not in slice.Bars:
                continue
            
            # Check if the we are currently invested in the most liquid contract
            if not self.Portfolio[self.liquidContract.Symbol].Invested:
                self.SetHoldings(self.liquidContract.Symbol, 0.08)

            if self.Portfolio.Invested:
                self.Log(f"New Position: {self.liquidContract.Symbol}. Expiry: {self.liquidContract.Expiry}")
                self.Log("\nPortfolio:\n" + "".join([f"{str(i.ID)} Invested: {self.Portfolio[i].Invested}\n" for i in self.Portfolio.keys()]))
                self.bot = True
    
    def OnEndOfAlgorithm(self):
        self.Log("DONE!")
        self.Log("\nPortfolio:\n" + "".join([f"{str(i.ID)} Invested: {self.Portfolio[i].Invested}\n" for i in self.Portfolio.keys()]))