| Overall Statistics |
|
Total Trades 1399 Average Win 0.09% Average Loss -0.07% Compounding Annual Return 21.486% Drawdown 13.600% Expectancy 1.081 Net Profit 88.919% Sharpe Ratio 1.157 Probabilistic Sharpe Ratio 56.474% Loss Rate 11% Win Rate 89% Profit-Loss Ratio 1.33 Alpha 0.089 Beta 0.594 Annual Standard Deviation 0.133 Annual Variance 0.018 Information Ratio 0.39 Tracking Error 0.116 Treynor Ratio 0.259 Total Fees $1436.10 Estimated Strategy Capacity $230000.00 Lowest Capacity Asset DBMF X4BEVPB5F3HH Portfolio Turnover 0.75% |
from AlgorithmImports import *
from datetime import datetime, timedelta
class CustomDataWeighAlgorithm(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2020,6, 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", "JEPI", "DBMF", "TQQQ"
# 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}, JEPI: {index_data['JEPI']}")
self.Debug(f"Data Time: {index_data.Time}, DBMF: {index_data['DBMF']}")
self.Debug(f"Data Time: {index_data.Time}, TQQQ: {index_data['TQQQ']}")
#self.SetHoldings("MDY",index_data['QQQ'])
self.SetHoldings("JEPI",index_data['JEPI'])
self.SetHoldings("DBMF",index_data['DBMF'])
self.SetHoldings("TQQQ",index_data['TQQQ'])
# 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/f5adhujnq46chtec27srp/weights_2.csv?rlkey=wogufd7t32ozbuozr7d4fgrzc&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[1])
index["JEPI"] = float(data[2])
index["DBMF"] = float(data[3])
index["TQQQ"] = float(data[4])
# index["QQQ"] = float(data[5])
except ValueError as e:
self.Debug(f"Errore nella lettura dei dati: {str(e)}")
return None
return index