Overall Statistics |
Total Trades 3 Average Win 0% Average Loss -6.95% Compounding Annual Return -19.550% Drawdown 7.400% Expectancy -1 Net Profit -6.955% Sharpe Ratio -2.231 Probabilistic Sharpe Ratio 0.001% Loss Rate 100% Win Rate 0% Profit-Loss Ratio 0 Alpha -0.16 Beta 0.009 Annual Standard Deviation 0.072 Annual Variance 0.005 Information Ratio -0.17 Tracking Error 0.499 Treynor Ratio -17.866 Total Fees $3.97 |
class VerticalNadionGearbox(QCAlgorithm): def Initialize(self): self.SetStartDate(2020, 2, 20) # Set Start Date self.SetCash(100000) # Set Strategy Cash symbols = [ Symbol.Create("SPY", SecurityType.Equity, Market.USA) ] self.SetUniverseSelection( ManualUniverseSelectionModel(symbols) ) self.UniverseSettings.Resolution = Resolution.Daily self.AddAlpha(MyAlphaModel()) self.SetPortfolioConstruction(EqualWeightingPortfolioConstructionModel()) self.SetRiskManagement(MaximumDrawdownPercentPerSecurityCustom(0.05)) self.SetExecution(ImmediateExecutionModel()) def OnData(self, data): pass class MyAlphaModel(AlphaModel): emitted = False def Update(self, algorithm, data): if self.emitted: return [] else: self.emitted = True return [Insight.Price("SPY", timedelta(365), InsightDirection.Up)] class MaximumDrawdownPercentPerSecurityCustom(RiskManagementModel): def __init__(self, maximumDrawdownPercent = 0.05): self.maximumDrawdownPercent = -abs(maximumDrawdownPercent) self.liquidated = set() def ManageRisk(self, algorithm, targets): targets = [] for kvp in algorithm.Securities: security = kvp.Value pnl = security.Holdings.UnrealizedProfitPercent if pnl < self.maximumDrawdownPercent or security.Symbol in self.liquidated: # liquidate targets.append(PortfolioTarget(security.Symbol, 0)) if algorithm.Securities[security.Symbol].Invested: self.liquidated.add(security.Symbol) algorithm.Log(f"Liquidating {security.Symbol}") return targets