| Overall Statistics |
|
Total Trades 8 Average Win 0% Average Loss -6.82% Compounding Annual Return -98.705% Drawdown 23.000% Expectancy -1 Net Profit -23.011% Sharpe Ratio -1.742 Probabilistic Sharpe Ratio 1.991% Loss Rate 100% Win Rate 0% Profit-Loss Ratio 0 Alpha -1.332 Beta -0.376 Annual Standard Deviation 0.553 Annual Variance 0.306 Information Ratio 0.016 Tracking Error 0.968 Treynor Ratio 2.564 Total Fees $10.53 |
class VerticalNadionGearbox(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2020, 2, 20) # Set Start Date
self.SetEndDate(2020, 3, 12)
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):
emited = False
def Update(self, algorithm, data):
if not self.emited:
self.emited = True
return [Insight.Price("SPY", timedelta(365), InsightDirection.Up)]
return []
class MaximumDrawdownPercentPerSecurityCustom(RiskManagementModel):
def __init__(self, maximumDrawdownPercent = 0.01):
self.maximumDrawdownPercent = -abs(maximumDrawdownPercent)
self.liquidated = set()
self.currentTargets = set()
def ManageRisk(self, algorithm, targets):
# Reset liquidated symbols on new targets
algorithm.Log(targets[0].Quantity)
if set(targets) != self.currentTargets:
algorithm.Log("Different")
self.currentTargets = set(targets)
self.liquidated = set()
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