Overall Statistics |
Total Orders 961 Average Win 2.70% Average Loss -1.85% Compounding Annual Return 37.080% Drawdown 89.100% Expectancy 0.338 Start Equity 100000 End Equity 1248751.72 Net Profit 1148.752% Sharpe Ratio 0.794 Sortino Ratio 1.104 Probabilistic Sharpe Ratio 12.588% Loss Rate 46% Win Rate 54% Profit-Loss Ratio 1.47 Alpha 0.439 Beta 1.149 Annual Standard Deviation 0.67 Annual Variance 0.449 Information Ratio 0.697 Tracking Error 0.647 Treynor Ratio 0.463 Total Fees $0.00 Estimated Strategy Capacity $1400000.00 Lowest Capacity Asset JASMYUSD 2XR Portfolio Turnover 1.45% |
# region imports from AlgorithmImports import * # endregion class StrategicCryptoReserveAlgorithm(QCAlgorithm): def initialize(self) -> None: self.set_end_date(2025, 3, 1) self.set_start_date(self.end_date - timedelta(8*365)) self._market_pairs = [ x.key.symbol for x in self.symbol_properties_database.get_symbol_properties_list(Market.COINBASE) if (x.value.quote_currency == self.account_currency and # Account currency is USD x.value.market_ticker.split('-')[0] not in ['USDT', 'USDC']) # Remove stable coins ] self.time_rules.set_default_time_zone(TimeZones.UTC) date_rule = self.date_rules.month_start() self.universe_settings.schedule.on(date_rule) self.universe_settings.resolution = Resolution.DAILY self._universe = self.add_universe(CryptoUniverse.coinbase(self._select_assets)) self.schedule.on(date_rule, self.time_rules.midnight, self._rebalance) def _select_assets(self, data): selected = [c for c in data if str(c.symbol.id).split()[0] in self._market_pairs] selected = [c.symbol for c in sorted(selected, key=lambda c: c.volume_in_usd)[-10:]] self.plot('Universe', 'Size', len(selected)) return selected def _rebalance(self): symbols = self._universe.selected if not symbols: return self.set_holdings([PortfolioTarget(s, 0.9/len(symbols)) for s in symbols], True)