| Overall Statistics |
|
Total Orders 39700 Average Win 0.02% Average Loss -0.01% Compounding Annual Return 17.894% Drawdown 18.500% Expectancy 0.394 Start Equity 1000000 End Equity 6108811.23 Net Profit 510.881% Sharpe Ratio 0.834 Sortino Ratio 0.923 Probabilistic Sharpe Ratio 45.579% Loss Rate 42% Win Rate 58% Profit-Loss Ratio 1.39 Alpha 0.057 Beta 0.605 Annual Standard Deviation 0.125 Annual Variance 0.016 Information Ratio 0.241 Tracking Error 0.105 Treynor Ratio 0.172 Total Fees $63283.74 Estimated Strategy Capacity $7300000.00 Lowest Capacity Asset SPY R735QTJ8XC9X Portfolio Turnover 15.14% Drawdown Recovery 306 |
#region imports
from AlgorithmImports import *
#endregion
from Risk.TrailingStopRiskManagementModel import TrailingStopRiskManagementModel
from Execution.StandardDeviationExecutionModel import StandardDeviationExecutionModel
class SPY_PLUS(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2015, 1, 1)
self.SetCash(1_000_000)
self.SetRiskManagement(TrailingStopRiskManagementModel(0.03250))
self.SetExecution(StandardDeviationExecutionModel(50, 0.95, Resolution.Minute))
self.indicatorPeriod = 120
self.resolution = Resolution.Minute
self.spy = self.AddEquity("SPY", self.resolution).Symbol
self.sh = self.AddEquity("SH", self.resolution).Symbol
self.uvxy = self.AddEquity("UVXY", self.resolution).Symbol
self.std = self.STD(self.spy, self.indicatorPeriod, self.resolution)
self.SetWarmUp(self.indicatorPeriod, self.resolution)
self.Schedule.On(self.DateRules.EveryDay(self.spy),self.TimeRules.AfterMarketOpen(self.spy, 5),self.Rebalance)
def Rebalance(self):
if self.IsWarmingUp or not self.std.IsReady:
return
if self.std.Current.Value < 2.6:
self.SetHoldings(self.sh, 0)
self.SetHoldings(self.spy, 1.0)
self.SetHoldings(self.uvxy, 0.00)
else:
self.SetHoldings(self.spy, 0)
self.SetHoldings(self.sh, 0.95)
self.SetHoldings(self.uvxy, 0.05)
def OnData(self, data: Slice):
pass