Overall Statistics |
Total Orders 1 Average Win 0% Average Loss 0% Compounding Annual Return 133.195% Drawdown 42.300% Expectancy 0 Start Equity 200000.00 End Equity 468377.11 Net Profit 134.189% Sharpe Ratio 3.006 Sortino Ratio 3.903 Probabilistic Sharpe Ratio 78.483% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha -1.066 Beta 0.73 Annual Standard Deviation 0.547 Annual Variance 0.299 Information Ratio -9.458 Tracking Error 0.219 Treynor Ratio 2.253 Total Fees $763.94 Estimated Strategy Capacity $110000.00 Lowest Capacity Asset BTCBUSD 18N Portfolio Turnover 0.13% |
from AlgorithmImports import * from QuantConnect.DataSource import * from QuantConnect.Data.UniverseSelection import * class CoinAPIDataAlgorithm(QCAlgorithm): def initialize(self) -> None: self.set_start_date(2020, 6, 1) self.set_end_date(2021, 6, 1) self.set_cash("BUSD", 100000) self.universe_settings.asynchronous = True # Binance accepts both Cash and Margin account types. self.set_brokerage_model(BrokerageName.BINANCE, AccountType.MARGIN) # Warm up the security with the last known price to avoid conversion error self.set_security_initializer(lambda security: security.set_market_price(self.get_last_known_price(security))) # Requesting data crypto = self.add_crypto("BTCBUSD", Resolution.MINUTE, Market.BINANCE) self.btcbusd = crypto.symbol self.minimum_order_size = crypto.symbol_properties.minimum_order_size # Historical data history = self.history(self.btcbusd, 30, Resolution.DAILY) self.debug(f"We got {len(history)} items from our history request") # Add Crypto Universe Selection self._universe = self.add_universe(CryptoUniverse.binance(self.universe_selection_filter)) # Historical Universe data universe_history = self.history(self._universe, 30, Resolution.DAILY) self.debug(f"We got {len(universe_history)} items from our universe history request") for (univere_symbol, time), universe_day in universe_history.items(): for universe_item in universe_day: self.debug(f"{universe_item.symbol} price at {universe_item.end_time}: {universe_item.close}") def universe_selection_filter(self, universe_day): return [universe_item.symbol for universe_item in universe_day if universe_item.volume >= 100 and universe_item.volume_in_usd > 10000] def on_data(self, slice: Slice) -> None: if self.portfolio.cash_book['BTC'].amount == 0: free_cash = self.portfolio.cash_book['BUSD'].amount * (1-self.settings.free_portfolio_value_percentage) quantity = free_cash / slice[self.btcbusd].price quantity -= quantity % self.minimum_order_size if quantity > 0: self.market_order(self.btcbusd, quantity)