| Overall Statistics |
|
Total Orders 997 Average Win 2.79% Average Loss -1.86% Compounding Annual Return 31.295% Drawdown 90.700% Expectancy 0.294 Start Equity 100000.00 End Equity 884228.81 Net Profit 784.229% Sharpe Ratio 1.018 Sortino Ratio 1.412 Probabilistic Sharpe Ratio 23.984% Loss Rate 48% Win Rate 52% Profit-Loss Ratio 1.50 Alpha -0.233 Beta 0.938 Annual Standard Deviation 0.853 Annual Variance 0.728 Information Ratio -0.588 Tracking Error 0.519 Treynor Ratio 0.925 Total Fees $235885.11 Estimated Strategy Capacity $1600000.00 Lowest Capacity Asset JASMYUSD 2XR Portfolio Turnover 1.53% |
# 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.set_brokerage_model(BrokerageName.COINBASE, AccountType.CASH)
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.95/len(symbols)) for s in symbols], True)