Overall Statistics
Total Trades
533
Average Win
0.30%
Average Loss
-0.25%
Compounding Annual Return
8855.739%
Drawdown
11.600%
Expectancy
0.346
Net Profit
49.754%
Sharpe Ratio
40.478
Probabilistic Sharpe Ratio
87.158%
Loss Rate
39%
Win Rate
61%
Profit-Loss Ratio
1.20
Alpha
29.639
Beta
0.326
Annual Standard Deviation
0.762
Annual Variance
0.581
Information Ratio
28.762
Tracking Error
0.943
Treynor Ratio
94.682
Total Fees
$10456.42
Estimated Strategy Capacity
$1800000.00
Lowest Capacity Asset
AVAXUSD E3
from AlgorithmImports import *

class CryptoCoarseFundamentalUniverseSelectionAlgorithm(QCAlgorithm): 
    def Initialize(self):
        self.SetStartDate(2021, 1, 1)
        self.SetEndDate(2021, 2, 1)
        self.SetCash(100000)
        
        self.SetBrokerageModel(BrokerageName.Bitfinex, AccountType.Cash)
        
        # Warm up the security with the last known price to avoid conversion error
        self.SetSecurityInitializer(lambda security: security.SetMarketPrice(self.GetLastKnownPrice(security)));

        self.UniverseSettings.Resolution = Resolution.Daily
        # Add universe selection of cryptos based on coarse fundamentals
        self.AddUniverse(CryptoCoarseFundamentalUniverse(Market.Bitfinex, self.UniverseSettings, self.UniverseSelectionFilter))

    def UniverseSelectionFilter(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):
        for security in changes.RemovedSecurities:
            self.Liquidate(security.Symbol)