| 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)