| Overall Statistics |
|
Total Trades 1512 Average Win 0.67% Average Loss -0.70% Compounding Annual Return 4.804% Drawdown 24.000% Expectancy 0.062 Net Profit 31.348% Sharpe Ratio 0.408 Probabilistic Sharpe Ratio 6.056% Loss Rate 46% Win Rate 54% Profit-Loss Ratio 0.96 Alpha 0.016 Beta 0.166 Annual Standard Deviation 0.092 Annual Variance 0.008 Information Ratio -0.579 Tracking Error 0.154 Treynor Ratio 0.226 Total Fees $15394.53 Estimated Strategy Capacity $370000.00 Lowest Capacity Asset TMF UBTUG7D0B7TX Portfolio Turnover 25.22% |
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 = [
"SHY", "VIXM", "BND", "BIL", "TLT", "TECL", "TQQQ", "UPRO",
"TMF", "QID", "TBF", "USDU", "IEI", "GLD", "TIP", "BSV", "SPY"
]
# Inizializza un dizionario per memorizzare le allocazioni iniziali degli asset
# 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}, SHY: {index_data['SHY']}")
self.Debug(f"Data Time: {index_data.Time}, VIXM: {index_data['VIXM']}")
self.Debug(f"Data Time: {index_data.Time}, BND: {index_data['BND']}")
self.Debug(f"Data Time: {index_data.Time}, BIL: {index_data['BIL']}")
self.Debug(f"Data Time: {index_data.Time}, TLT: {index_data['TLT']}")
self.Debug(f"Data Time: {index_data.Time}, TECL: {index_data['TECL']}")
self.Debug(f"Data Time: {index_data.Time}, TQQQ: {index_data['TQQQ']}")
self.Debug(f"Data Time: {index_data.Time}, UPRO: {index_data['UPRO']}")
self.Debug(f"Data Time: {index_data.Time}, TMF: {index_data['TMF']}")
self.Debug(f"Data Time: {index_data.Time}, QID: {index_data['QID']}")
self.Debug(f"Data Time: {index_data.Time}, USDU: {index_data['USDU']}")
self.Debug(f"Data Time: {index_data.Time}, IEI: {index_data['IEI']}")
self.Debug(f"Data Time: {index_data.Time}, GLD: {index_data['GLD']}")
self.Debug(f"Data Time: {index_data.Time}, BSV: {index_data['BSV']}")
self.Debug(f"Data Time: {index_data.Time}, SPY: {index_data['SPY']}")
if index_data['QID'] > 0:
self.SetHoldings("QID",index_data['QID'])
else:
self.Liquidate()
if index_data['USDU'] > 0:
self.SetHoldings("USDU",index_data['USDU'])
else:
self.Liquidate()
if index_data['TBF'] > 0:
self.SetHoldings("TBF",index_data['TBF'])
else:
self.Liquidate()
if index_data['SHY'] > 0:
self.SetHoldings("SHY",index_data['SHY'])
else:
self.Liquidate()
if index_data['TQQQ'] > 0:
self.SetHoldings("TQQQ",index_data['TQQQ'])
else:
self.Liquidate()
if index_data['TECL'] > 0:
self.SetHoldings("TECL",index_data['TECL'])
else:
self.Liquidate()
if index_data['IEI'] > 0:
self.SetHoldings("IEI",index_data['IEI'])
else:
self.Liquidate()
if index_data['GLD'] > 0:
self.SetHoldings("GLD",index_data['GLD'])
else:
self.Liquidate()
if index_data['BSV'] > 0:
self.SetHoldings("BSV",index_data['BSV'])
else:
self.Liquidate()
if index_data['UPRO'] > 0:
self.SetHoldings("UPRO",index_data['UPRO'])
else:
self.Liquidate()
if index_data['TMF'] > 0:
self.SetHoldings("TMF",index_data['TMF'])
else:
self.Liquidate()
class Weigh(PythonData):
'''Weigh Custom Data Class'''
def GetSource(self, config, date, isLiveMode):
return SubscriptionDataSource("https://www.dropbox.com/scl/fi/potp7czdbwk0erwjbybq2/Weights_.csv?rlkey=2c60wr2ulqs4by7kdhnj61nk3&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["SHY"] = float(data[1])
index["VIXM"] = float(data[2])
index["BND"] = float(data[3])
index["BIL"] = float(data[4])
index["TLT"] = float(data[5])
index["TECL"] = float(data[6])
index["TQQQ"] = float(data[7])
index["UPRO"] = float(data[8])
index["TMF"] = float(data[9])
index["QID"] = float(data[10])
index["TBF"] = float(data[11])
index["USDU"] = float(data[12])
index["IEI"] = float(data[13])
index["GLD"] = float(data[14])
index["TIP"] = float(data[15])
index["BSV"] = float(data[16])
index["SPY"] = float(data[17])
except ValueError as e:
self.Debug(f"Errore nella lettura dei dati: {str(e)}")
return None
return index