| Overall Statistics |
|
Total Trades 929 Average Win 0.43% Average Loss -0.27% Compounding Annual Return 11.986% Drawdown 11.800% Expectancy 1.005 Net Profit 225.462% Sharpe Ratio 1.138 Probabilistic Sharpe Ratio 61.961% Loss Rate 22% Win Rate 78% Profit-Loss Ratio 1.58 Alpha 0.102 Beta 0.003 Annual Standard Deviation 0.09 Annual Variance 0.008 Information Ratio -0.163 Tracking Error 0.179 Treynor Ratio 31.621 Total Fees $1296.43 Estimated Strategy Capacity $55000.00 Lowest Capacity Asset XVZ UZ6Q81R5NIW5 |
from QuantConnect.Data.Custom.CBOE import *
class RetrospectiveFluorescentOrangeScorpion(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2011,1, 1) # Set Start Date
self.SetEndDate(2021,6,1) # Set End Date
self.SetCash(100000) # Set Strategy Cash
self.regime = 0
self.regime_threshold = 22
vix = self.AddData(CBOE, "VIX").Symbol
self.history = self.History(CBOE, vix, 30, Resolution.Daily)
# Define the security universe
self.SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage)
self.tickers = ['PGJ','GLD','TLT','AIA','VWO','XLF','FXY','IYW','IYG','XVZ',"SPY"]
for symbol in self.tickers:
self.AddEquity(symbol, Resolution.Daily)
self.Schedule.On(self.DateRules.EveryDay(),self.TimeRules.AfterMarketOpen("SPY", 180), self.SignalRefresh)
self.Schedule.On(self.DateRules.MonthStart(),self.TimeRules.AfterMarketOpen("SPY", 180), self.Rebalance)
self.SetBenchmark("SPY")
def Rebalance(self):
# Rebalance portfolio monthly
if self.regime == 0:
self.SetHoldings('PGJ',0.03)
self.SetHoldings('GLD',0.05)
self.SetHoldings('TLT',0.36)
self.SetHoldings('AIA',0.03)
self.SetHoldings('VWO',0.03)
self.SetHoldings('XLF',0.03)
self.SetHoldings('FXY',0.03)
self.SetHoldings('IYW',0.36)
self.SetHoldings('IYG',0.03)
self.SetHoldings('XVZ',0.03)
else:
self.SetHoldings('PGJ',0.14)
self.SetHoldings('GLD',0.08)
self.SetHoldings('TLT',0.06)
self.SetHoldings('AIA',0.12)
self.SetHoldings('VWO',0.03)
self.SetHoldings('XLF',0.03)
self.SetHoldings('FXY',0.08)
self.SetHoldings('IYW',0.15)
self.SetHoldings('IYG',0.03)
self.SetHoldings('XVZ',0.25)
def SignalRefresh(self):
vix = self.AddData(CBOE, "VIX").Symbol
self.history = self.History(CBOE, vix, 30, Resolution.Daily)
self.signal_series = [1 if x>self.regime_threshold else 0 for x in self.history.close.values]
if 1 in self.signal_series:
if self.regime != 1:
self.regime = 1
self.Rebalance()
else:
if self.regime != 0:
self.regime = 0
self.Rebalance()