Overall Statistics
Total Trades
0
Average Win
0%
Average Loss
0%
Compounding Annual Return
0%
Drawdown
0%
Expectancy
0
Net Profit
0%
Sharpe Ratio
0
Probabilistic Sharpe Ratio
0%
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
0
Beta
0
Annual Standard Deviation
0
Annual Variance
0
Information Ratio
0
Tracking Error
0
Treynor Ratio
0
Total Fees
$0.00
Estimated Strategy Capacity
$0
Lowest Capacity Asset
# region imports
from AlgorithmImports import *
# endregion

# ----------------------------------------------------------
STOCKS = ["BTCUSD", "ETHUSD"]

# ----------------------------------------------------------

class NewestAdditions(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2022, 9, 30)  # Set Start Date
        self.SetCash(100000)  # Set Strategy Cash

        # These lists are filled out by the universe selection filtering method:
        self.ListOfCryptosOlderThan1Y = []
        self.ListOfYoungCryptos = [] # contains elements such as { "symbol": "BTCUSD", "age": 2000 }

        # FTX universe
        self.UniverseSettings.Resolution = Resolution.Daily
        self.AddUniverse(CryptoCoarseFundamentalUniverse(Market.FTX, self.UniverseSettings, self.UniverseSelectionFilter))

    def UniverseSelectionFilter(self, crypto_coarse):
        selectedCryptos = [ x for x in crypto_coarse if x.Symbol not in self.ListOfCryptosOlderThan1Y ]
        for crypto in selectedCryptos:
            history = self.History([crypto.Symbol], 365, Resolution.Daily)
            symbolData = history.loc[crypto.Symbol]
            if len(symbolData) >= 365:
                self.ListOfCryptosOlderThan1Y.append(crypto.Symbol)
            else:    
                #if any(x['symbol'] == crypto.Symbol for x in self.ListOfYoungCryptos):
                for i in range(len(self.ListOfYoungCryptos)):
                    if self.ListOfYoungCryptos[i]["symbol"] == crypto.Symbol:
                        del self.ListOfYoungCryptos[i]
                        break
                self.ListOfYoungCryptos.append({"symbol": crypto.Symbol, "age": len(symbolData)})
        self.ListOfYoungCryptos.sort(key=lambda x: x.get("age"))
        if (len(self.ListOfYoungCryptos) == 0):
            self.Debug("No crypto younger than 1Y found")
        else:               
            for crypto in self.ListOfYoungCryptos: 
                self.Debug(f"Crypto selected: {crypto['symbol']} (age: {crypto['age']})")            
        return [ x["symbol"] for x in self.ListOfYoungCryptos ]

    def OnData(self, data: Slice):
        pass