Overall Statistics
Total Trades
1300
Average Win
0.58%
Average Loss
-0.51%
Compounding Annual Return
15.887%
Drawdown
15.000%
Expectancy
0.639
Net Profit
645.817%
Sharpe Ratio
1.015
Probabilistic Sharpe Ratio
43.257%
Loss Rate
24%
Win Rate
76%
Profit-Loss Ratio
1.15
Alpha
0.101
Beta
0.135
Annual Standard Deviation
0.113
Annual Variance
0.013
Information Ratio
0.088
Tracking Error
0.167
Treynor Ratio
0.849
Total Fees
$7186.52
Estimated Strategy Capacity
$810000.00
Lowest Capacity Asset
SCHC UJANHQ8376N9
Portfolio Turnover
4.75%
from AlgorithmImports import *
from datetime import datetime, timedelta

class CustomDataWeighAlgorithm(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2010,2, 1)
       # self.SetEndDate(2023, 2, 1)
        self.SetCash(100000)

        # Define the symbol and "type" of our generic data:
        self.AddData(Weigh, "Weigh")
        self.symbols = "QQQ", "SPY", "SCHC","VGLT", "TLT", "UUP"

        # Inizializza un dizionario per memorizzare le allocazioni iniziali degli asset
        #self.AddRiskManagement(MaximumDrawdownPercentPerSecurity(0.10))
        
        # Aggiungi tutti gli asset con risoluzione giornaliera (daily)
        for symbol in self.symbols:
            self.AddEquity(symbol, Resolution.Daily)

    def OnData(self, data):
        if not data.ContainsKey("Weigh"):
            return

        index_data = data["Weigh"]
        

        # Stampa i valori degli indici
        self.Debug(f"Data Time: {index_data.Time}, QQQ: {index_data['QQQ']}")
        self.Debug(f"Data Time: {index_data.Time}, SPY: {index_data['SPY']}")
        self.Debug(f"Data Time: {index_data.Time}, VINEX: {index_data['VINEX']}")
        self.Debug(f"Data Time: {index_data.Time}, VUSTX: {index_data['VUSTX']}")
        self.Debug(f"Data Time: {index_data.Time}, TLT: {index_data['TLT']}")
        self.Debug(f"Data Time: {index_data.Time}, UUP: {index_data['UUP']}")
        
        
        self.SetHoldings("QQQ",index_data['QQQ']*0.97)
        self.SetHoldings("SPY",index_data['SPY']*0.97)
        self.SetHoldings("SCHC",index_data['VINEX']*0.97)
        self.SetHoldings("VGLT",index_data['VUSTX']*0.97)
        self.SetHoldings("TLT",index_data['TLT']*0.97)
        self.SetHoldings("UUP",index_data['UUP']*0.97)
      
  
       
        

        
class Weigh(PythonData):
    '''Weigh Custom Data Class'''
    def GetSource(self, config, date, isLiveMode):
        return SubscriptionDataSource("https://www.dropbox.com/scl/fi/23pzvp0fiupylx4o8gm2i/TAADualMomTotTransactionsv1_ALL.csv?rlkey=jeuxksndfzwjqyqua33ccr643&dl=1", SubscriptionTransportMedium.RemoteFile)

    def Reader(self, config, line, date, isLiveMode):
        if not (line.strip() and line[0].isdigit()):
            return None

        index = Weigh()
        index.Symbol = config.Symbol

        try:
            # Example File Format:
            data = line.split(',')
            index.Time = datetime.strptime(data[0], "%Y-%m-%d")
            index.EndTime = index.Time + timedelta(days=1)
            index.Value = data[4]
            index["QQQ"] = float(data[2])
            index["SPY"] = float(data[3])
            index["VINEX"] = float(data[6])
            index["VUSTX"] = float(data[7])
            index["TLT"] = float(data[8])
            index["UUP"] = float(data[9])
        
         
            
        except ValueError as e:
            self.Debug(f"Errore nella lettura dei dati: {str(e)}")
            return None

        return index