Overall Statistics
Total Orders
3657
Average Win
0.17%
Average Loss
-0.23%
Compounding Annual Return
43.524%
Drawdown
35.800%
Expectancy
0.076
Start Equity
100000.00
End Equity
143666.19
Net Profit
43.666%
Sharpe Ratio
1.167
Sortino Ratio
1.829
Probabilistic Sharpe Ratio
49.714%
Loss Rate
37%
Win Rate
63%
Profit-Loss Ratio
0.72
Alpha
-0.766
Beta
0.986
Annual Standard Deviation
0.482
Annual Variance
0.232
Information Ratio
-3.295
Tracking Error
0.238
Treynor Ratio
0.57
Total Fees
â‚®11753.34
Estimated Strategy Capacity
â‚®23000000000.00
Lowest Capacity Asset
ENSUSDT 2UZ
Portfolio Turnover
26.83%
# region imports
import datetime
from AlgorithmImports import *
# endregion

class Crypto(QCAlgorithm):
    def Initialize(self):
        # Locally Lean installs free sample data, to download more data please visit https://www.quantconnect.com/docs/v2/lean-cli/datasets/downloading-data
        self.set_start_date(2022, 11, 17)  # Set Start Date
        self.set_end_date(2023, 11, 17)  # Set End Date
        self.set_time_zone(TimeZones.Utc)
        self.set_account_currency("USDT", 100000)
        self.universe_settings.asynchronous = True
        self.universe_settings.resolution = Resolution.DAILY
        self._universe = self.add_universe(CryptoCoarseFundamentalUniverse(Market.BYBIT, self.universe_settings, self.universe_selection_filter))
        self.set_brokerage_model(BrokerageName.BYBIT, AccountType.MARGIN)
        self.set_security_initializer(BrokerageModelSecurityInitializer(self.brokerage_model, FuncSecuritySeeder(self.get_last_known_price)))
    
    def universe_selection_filter(self, data):
        filtered = [datum for datum in data
                if datum.Price >= 10 and datum.VolumeInUsd]
        sorted_by_volume_in_usd = sorted(filtered, key=lambda datum: datum.VolumeInUsd, reverse=True)[:10]
        return [datum.Symbol for datum in sorted_by_volume_in_usd]

    def OnData(self, data):
        for symbol in self.Securities.Keys:
            self.SetHoldings(symbol, 0.1)

    def OnSecuritiesChanged(self, changes):
        self.changes = changes
        self.log(f"on_securities_changed({self.time}):{changes}")
        for security in changes.RemovedSecurities:
            self.Liquidate(security.Symbol)