| Overall Statistics |
|
Total Orders 1715 Average Win 0.42% Average Loss -0.38% Compounding Annual Return 2.013% Drawdown 35.400% Expectancy 0.006 Start Equity 100000 End Equity 102017.18 Net Profit 2.017% Sharpe Ratio 0.189 Sortino Ratio 0.224 Probabilistic Sharpe Ratio 16.582% Loss Rate 53% Win Rate 47% Profit-Loss Ratio 1.12 Alpha 0.201 Beta -0.863 Annual Standard Deviation 0.325 Annual Variance 0.106 Information Ratio -0.178 Tracking Error 0.562 Treynor Ratio -0.071 Total Fees $5787.70 Estimated Strategy Capacity $26000000.00 Lowest Capacity Asset SPY R735QTJ8XC9X Portfolio Turnover 824.50% |
from AlgorithmImports import *
class MultiResolutionAlgorithm(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2020, 1, 1)
self.SetEndDate(2021, 1, 1)
self.SetCash(100000)
self.spy = self.AddEquity("SPY", Resolution.Hour)
self.spy.SetDataNormalizationMode(DataNormalizationMode.Raw)
self.SetUniverseSelection(ManualUniverseSelectionModel(["SPY"]))
self.SetAlpha(CompositeAlphaModel(
HourlyStrategy(),
DailyStrategy()
))
self.SetPortfolioConstruction(EqualWeightingPortfolioConstructionModel())
self.SetExecution(ImmediateExecutionModel())
self.SetRiskManagement(NullRiskManagementModel())
def OnData(self, data):
self.Log(f"OnData called at {self.Time}: Data type: {data.GetType().Name}")
class HourlyStrategy(AlphaModel):
def __init__(self):
self.last_hour = None
def Update(self, algorithm: QCAlgorithm, data: Slice) -> List[Insight]:
if not data.ContainsKey("SPY"):
return []
current_hour = algorithm.Time.hour
if self.last_hour == current_hour:
return []
self.last_hour = current_hour
spy_data = data["SPY"]
if spy_data is None or spy_data.Price == 0:
return []
price = spy_data.Price
insight = Insight.Price("SPY", timedelta(hours=1), InsightDirection.Up if current_hour % 2 == 0 else InsightDirection.Down)
algorithm.Log(f"Hourly Strategy: Generated {'Up' if current_hour % 2 == 0 else 'Down'} insight at {algorithm.Time}. Price: {price}")
return [insight]
class DailyStrategy(AlphaModel):
def __init__(self):
self.last_date = None
def Update(self, algorithm: QCAlgorithm, data: Slice) -> List[Insight]:
if not data.ContainsKey("SPY"):
return []
current_date = algorithm.Time.date()
if self.last_date == current_date:
return []
self.last_date = current_date
spy_data = data["SPY"]
if spy_data is None or spy_data.Price == 0:
return []
price = spy_data.Price
insight = Insight.Price("SPY", timedelta(days=1), InsightDirection.Up if current_date.day % 2 == 0 else InsightDirection.Down)
algorithm.Log(f"Daily Strategy: Generated {'Up' if current_date.day % 2 == 0 else 'Down'} insight at {algorithm.Time}. Price: {price}")
return [insight]