Overall Statistics
Total Trades
25
Average Win
0%
Average Loss
0%
Compounding Annual Return
28992.823%
Drawdown
10.500%
Expectancy
0
Net Profit
26.249%
Sharpe Ratio
65.845
Probabilistic Sharpe Ratio
100%
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
18.087
Beta
0.393
Annual Standard Deviation
0.282
Annual Variance
0.079
Information Ratio
57.009
Tracking Error
0.305
Treynor Ratio
47.194
Total Fees
$24.83
Estimated Strategy Capacity
$140000.00
Lowest Capacity Asset
WBTCUSD XJ
class FocusedBrownOwl(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2021, 4, 20)
        self.SetEndDate(2021, 4, 22)
        self.SetCash(10000)
        self.SetBrokerageModel(BrokerageName.GDAX, AccountType.Cash)

        symbols = [
            Symbol.Create("BTCUSD", SecurityType.Crypto, Market.GDAX),
            Symbol.Create("ETHUSD", SecurityType.Crypto, Market.GDAX),
            Symbol.Create("LTCUSD", SecurityType.Crypto, Market.GDAX),
            Symbol.Create("BCHUSD", SecurityType.Crypto, Market.GDAX),
            Symbol.Create("ETCUSD", SecurityType.Crypto, Market.GDAX),
        ]
        self.SetUniverseSelection(ManualUniverseSelectionModel(symbols))
        self.SetBrokerageModel(BrokerageName.GDAX, AccountType.Cash)

    def OnData(self, data):
        if not self.Portfolio.Invested:
            self.SetHoldings("BTCUSD", .2)
            self.SetHoldings("ETHUSD", .2)
            self.SetHoldings("LTCUSD", .2)
            self.SetHoldings("BCHUSD", .2)
            self.SetHoldings("ETCUSD", .2)

        self.SetRuntimeStatistic("Test", 123)
class FocusedBrownOwl(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2021, 4, 20)
        self.SetEndDate(2021, 4, 22)
        self.SetCash(10000)
        self.SetBrokerageModel(BrokerageName.GDAX, AccountType.Cash)

        symbols = [ 
            Symbol.Create("BTCUSD", SecurityType.Crypto, Market.GDAX),
            Symbol.Create("ETHUSD", SecurityType.Crypto, Market.GDAX),
            Symbol.Create("LTCUSD", SecurityType.Crypto, Market.GDAX),
            Symbol.Create("BCHUSD", SecurityType.Crypto, Market.GDAX),
            Symbol.Create("ETCUSD", SecurityType.Crypto, Market.GDAX),
            ]
        self.SetUniverseSelection( ManualUniverseSelectionModel(symbols) )
        self.SetBrokerageModel(BrokerageName.GDAX, AccountType.Cash)

        self.taxRate = 0

        self.benchStart = 0
        self.benchBTC = 0
        self.benchETH = 0
        self.benchLTC = 0
        self.benchBCH = 0
        self.benchETC = 0
        
        from System.Drawing import Color
        mainPlot = Chart('Main Plot')
        mainPlot.AddSeries(Series('Total Value', SeriesType.Line, '$', Color.Blue))
        mainPlot.AddSeries(Series('Buy and Hold', SeriesType.Line, '$', Color.Black))
        self.AddChart(mainPlot)

    def OnData(self, data):

        if self.benchStart == 0 :
            self.benchStart = self.Portfolio.TotalPortfolioValue
            self.benchBTC = self.Securities["BTCUSD"].Price
            self.benchETH = self.Securities["ETHUSD"].Price
            self.benchLTC = self.Securities["LTCUSD"].Price
            self.benchBCH = self.Securities["BCHUSD"].Price
            self.benchETC = self.Securities["ETCUSD"].Price

        hodlBTC = self.Securities["BTCUSD"].Price / self.benchBTC
        hodlETH = self.Securities["ETHUSD"].Price / self.benchETH
        hodlLTC = self.Securities["LTCUSD"].Price / self.benchLTC
        hodlBCH = self.Securities["BCHUSD"].Price / self.benchBCH
        hodlETC = self.Securities["ETCUSD"].Price / self.benchETC
        sumHodl = self.benchStart * (hodlBTC + hodlETH + hodlLTC + hodlBCH + hodlETC) / 5

        if self.benchStart < sumHodl:
            adjHodl = (sumHodl - self.benchStart) * (1 - self.taxRate)
        else:
            adjHodl = (sumHodl - self.benchStart)

        if not self.Portfolio.Invested:
            self.SetHoldings("BTCUSD", .2)
            self.SetHoldings("ETHUSD", .2)
            self.SetHoldings("LTCUSD", .2)
            self.SetHoldings("BCHUSD", .2)
            self.SetHoldings("ETCUSD", .2)
            
        if self.Time.minute == 1:
            self.Plot('Main Plot', 'Buy and Hold', adjHodl)
            self.Plot('Main Plot', 'Total Value', self.Portfolio.TotalPortfolioValue)
class FocusedBrownOwl(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(int(self.GetParameter("startYear")), int(self.GetParameter("startMonth")),
                          int(self.GetParameter("startDay")))
        self.SetEndDate(int(self.GetParameter("endYear")), int(self.GetParameter("endMonth")),
                        int(self.GetParameter("endDay")))
        self.SetCash(10000)
        self.SetBrokerageModel(BrokerageName.GDAX, AccountType.Cash)

        # region Add Stock Data
        self.coinList = []

        self.addList = [
            ["btc", "BTCUSD"],
            ["eth", "ETHUSD"],
            ["ltc", "LTCUSD"],
            ["bch", "BCHUSD"],
            ["etc", "ETCUSD"],
            ["oxt", "OXTUSD"],
            ["mkr", "MKRUSD"],
            ["xlm", "XLMMUSD"],  #
            ["atom", "ATOMUSD"],
            ["omg", "OMGUSD"],
            ["zec", "ZECUSD"],  #
            ["link", "LINKUSD"],
            ["bat", "BATUSD"],  #
            ["zrx", "ZRXUSD"],
            ["algo", "ALGOUSD"],
            ["dai", "DAIUSD"],
            ["mana", "MANAUSD"],  #
            ["knc", "KNCUSD"],
            ["comp", "COMPUSD"],
            ["mir", "MIRUSD"],  #
            ["band", "BANDUSD"],
            ["ogn", "OGNUSD"],  #
            ["nmr", "NMRUSD"],
            ["cgld", "CGLDUSD"],
            ["uma", "UMAUSD"],
            ["lrc", "LRCUSD"],
            ["yfi", "YFIUSD"],
            ["uni", "UNIUSD"],
            ["ren", "RENUSD"],
            ["bal", "BALUSD"],
            ["wbtc", "WBTCUSD"],
            ["nu", "NUUSD"],  #
            ["fil", "FILUSD"],  #
            ["aave", "AAVEUSD"],  #
            ["rlc", "RLCUSD"],  #
            ["grt", "GRTUSD"],  #
            ["bnt", "BNTUSD"],  #
            ["nkn", "NKNUSD"],  #
            ["snx", "SNXUSD"],  #
            ["matic", "MATICUSD"],  #
            ["skl", "SKLUSD"],  #
            ["ada", "ADAUSD"],  #
            ["ankr", "ANKRUSD"],  #
            ["crv", "CRVUSD"],  #
            ["storj", "STORJUSD"],  #
            ["icp", "ICPUSD"]  #
        ]

        for add in self.addList: exec(f"""
try:
    self.{add[0]} = self.AddCrypto("{add[1]}", Resolution.Minute, Market.GDAX)
    self.coinList.append({add})
except: pass
        """)
        # endregion

        from System.Drawing import Color
        mainPlot = Chart('Main Plot')
        mainPlot.AddSeries(Series('Equity', SeriesType.Line, '$', Color.Green))
        self.AddChart(mainPlot)

        self.SetWarmUp(2000)
        self.benchStart = 0

    def OnData(self, data):

        # region Warmup
        if self.benchStart == 0:
            for coin in self.coinList:
                if self.Securities[coin[1]].Price == 0: self.coinList.remove(coin)  # Removes coins that do not have data
        if self.IsWarmingUp:
            return
        self.Debug(str(self.coinList))
        self.benchStart = 1
        # endregion

        if not self.Portfolio.Invested:
            self.PortDivide = 1 / len(self.coinList)
            for coin in self.coinList: exec(f'self.SetHoldings("{coin[1]}", {self.PortDivide})')

        if self.Time.minute == 1:
            self.Plot('Main Plot', 'Equity', self.Portfolio.TotalPortfolioValue)