Created with Highcharts 12.1.2EquityJul 2020Jan 2021Jul 2021Jan 2022Jul 2022Jan 2023Jul 2023Jan 2024Jul 2024Jan 2025Jul 2025100,000
Overall Statistics
Total Orders
0
Average Win
0%
Average Loss
0%
Compounding Annual Return
0%
Drawdown
0%
Expectancy
0
Start Equity
100000
End Equity
100000
Net Profit
0%
Sharpe Ratio
0
Sortino 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.769
Tracking Error
0.174
Treynor Ratio
0
Total Fees
$0.00
Estimated Strategy Capacity
$0
Lowest Capacity Asset
Portfolio Turnover
0%
from AlgorithmImports import *

class CryptoMarketCapUniverseAlgorithm(QCAlgorithm):

    def initialize(self) -> None:
        self.set_start_date(2020, 1, 1)
        self.set_start_date(2020, 3, 1)

        self.set_account_currency("USD") 
        self._market = Market.COINBASE
        self._market_pairs = [
            x.key.symbol 
            for x in self.symbol_properties_database.get_symbol_properties_list(self._market) 
            if x.value.quote_currency == self.account_currency
        ]
        self._universe = self.add_universe(CoinGeckoUniverse, self._select_assets)

    def _select_assets(self, data: List[CoinGeckoUniverse]) -> List[Symbol]:
        for datum in data:
            self.debug(f'{datum.coin},{datum.market_cap},{datum.price}')

        # Select the coins that our brokerage supports and have a quote currency that matches
        # our account currency.
        tradable_coins = [d for d in data if d.coin + self.account_currency in self._market_pairs]
        # Select the largest coins and create their Symbol objects.
        return [
            c.create_symbol(self._market, self.account_currency) 
            for c in sorted(tradable_coins, key=lambda x: x.market_cap)[-10:]
        ]

# class GeekyLightBrownPigeon(QCAlgorithm):

#     def initialize(self) -> None:
#         # Setup
#         self.set_start_date(2021, 1, 1)
#         self.set_end_date(2021, 3, 1)
#         self.set_account_currency("USD") 
#         self.set_cash(100_000)
#         self.set_brokerage_model(BrokerageName.COINBASE, AccountType.CASH)

#         # Universe
#         self.universe_settings.resolution = Resolution.HOUR
#         self._market = Market.COINBASE
#         self._market_pairs = [
#             x.key.symbol 
#             for x in self.symbol_properties_database.get_symbol_properties_list(self._market) 
#             if x.value.quote_currency == self.account_currency
#         ]
#         self.debug(f"Market pairs {self._market_pairs}")
#         self._universe = self.add_universe(CoinGeckoUniverse, self._select_assets)

#         # Init
#         self._data_symbol = {}

#     def _select_assets(self, data: List[CoinGeckoUniverse]) -> List[Symbol]:
#         for datum in data:
#             self.debug(f'{datum.coin},{datum.market_cap},{datum.price}')

#         # Select the coins that our brokerage supports and have a quote currency that matches
#         # our account currency.
#         [self.debug(f"Coin {d.coin}") for d in data]
#         tradable_coins = [d for d in data if d.coin + self.account_currency in self._market_pairs]
#         # Select the largest coins and create their Symbol objects.
#         return [
#             c.create_symbol(self._market, self.account_currency) 
#             for c in sorted(tradable_coins, key=lambda x: x.market_cap)[-50:]
#         ]
#         #  2
#         # selected = sorted(data, key=lambda x: x.market_cap, reverse=True)[:5]
            
#         # # Use the CreateSymbol method to generate the Symbol object for
#         # return [x.create_symbol(Market.BINANCE, "USD") for x in selected]

#     def on_securities_changed(self, changes):
#         for security in changes.added_securities:
#             symbol = security.symbol
#             if symbol not in self._data_symbol:
#                 self._data_symbol[symbol] = SymbolData(symbol, self)
#             self.debug("Symbol added {symbol}")

#         for security in chagnes.removed_securities:
#             symbol = security.symbol
#             self.debug("Symbol removed {symbol}")

#     def on_data(self, data: Slice):
        
#         self.debug("Time {self.time}")

#         for x in self.active_securities.values:
#             symbol = x.symbol
#             self.set_holdings(symbol, 0.02)

#         for x in self._universe:
#             symbol = x.symbol
#             self.set_holdings(symbol, 0.02)

#         symbols = [symbol for symbol in self._universe.selected if self.securities[symbol].price]
#         for s in symbols:
#             self.debug(f"Symbol {symbol}")
#             self.set_holdings(symbol, 0.02)


# class SymbolData(object):
#     def __init__(self, symbol, algo):
#         self.symbol = symbol
#         self.algo = algo

#         history_df = self.algo.history(self.symbol, 30, Resolution.HOUR, flatten=True)
#         # self.debug(f"history {history_df}")