Overall Statistics
Total Trades
649
Average Win
0.79%
Average Loss
-0.40%
Compounding Annual Return
10.652%
Drawdown
10.200%
Expectancy
0.613
Net Profit
117.808%
Sharpe Ratio
0.783
Probabilistic Sharpe Ratio
18.383%
Loss Rate
45%
Win Rate
55%
Profit-Loss Ratio
1.95
Alpha
0.067
Beta
0.104
Annual Standard Deviation
0.099
Annual Variance
0.01
Information Ratio
-0.124
Tracking Error
0.17
Treynor Ratio
0.745
Total Fees
$3198.59
Estimated Strategy Capacity
$12000000.00
Lowest Capacity Asset
BIL TT1EBZ21QWKL
Portfolio Turnover
6.50%
from AlgorithmImports import *
from datetime import datetime, timedelta

class CustomDataWeighAlgorithm(QCAlgorithm):

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

        # Define the symbol and "type" of our generic data:
        self.AddData(Weigh, "Weigh")
        self.symbols = "SPY", "SPXL", "UVXY", "SSO","BIL","TQQQ","QLD","USD","SOXL"

        # 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}, SPY: {index_data['SPY']}")
        self.Debug(f"Data Time: {index_data.Time}, SPXL: {index_data['SPXL']}")
        self.Debug(f"Data Time: {index_data.Time}, UVXY: {index_data['UVXY']}")
        self.Debug(f"Data Time: {index_data.Time}, SSO: {index_data['SSO']}")
        self.Debug(f"Data Time: {index_data.Time}, BIL: {index_data['BIL']}")
        self.Debug(f"Data Time: {index_data.Time}, TQQQ: {index_data['TQQQ']}")
        self.Debug(f"Data Time: {index_data.Time}, QLD: {index_data['QLD']}")
        self.Debug(f"Data Time: {index_data.Time}, USD: {index_data['USD']}")
        self.Debug(f"Data Time: {index_data.Time}, SOXL: {index_data['SOXL']}")
       
       
      
        
        
        #self.SetHoldings("MDY",index_data['QQQ'])
        self.SetHoldings("UVXY",index_data['UVXY'])
        self.SetHoldings("SSO",index_data['SSO'])
        self.SetHoldings("BIL",index_data['BIL'])
        self.SetHoldings("QLD",index_data['QLD'])
        self.SetHoldings("USD",index_data['USD'])


       # self.SetHoldings("QQQ",index_data['QQQ'])

        
       
        

        
class Weigh(PythonData):
    '''Weigh Custom Data Class'''
    def GetSource(self, config, date, isLiveMode):
        return SubscriptionDataSource("https://www.dropbox.com/scl/fi/x0yq2s83yvcwuy1m7kay7/Weightss_0.csv?rlkey=i2jdzdb1g9xhuradamnf150wg&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["SPY"] = float(data[1])
            index["SPXL"] = float(data[2])
            index["UVXY"] = float(data[3])
            index["SSO"] = float(data[4])
            index["BIL"] = float(data[5])
            index["TQQQ"] = float(data[6])
            index["QLD"] = float(data[7])
            index["USD"] = float(data[8])
            index["SOXL"] = float(data[9])
          #  index["QQQ"] = float(data[5])
            
        except ValueError as e:
            self.Debug(f"Errore nella lettura dei dati: {str(e)}")
            return None

        return index