Overall Statistics |
Total Trades 829 Average Win 2.29% Average Loss -2.19% Compounding Annual Return 9.286% Drawdown 48.100% Expectancy 0.177 Net Profit 314.242% Sharpe Ratio 0.582 Loss Rate 43% Win Rate 57% Profit-Loss Ratio 1.05 Alpha -0.005 Beta 5.48 Annual Standard Deviation 0.179 Annual Variance 0.032 Information Ratio 0.471 Tracking Error 0.179 Treynor Ratio 0.019 Total Fees $829.00 |
from clr import AddReference AddReference("System") AddReference("QuantConnect.Algorithm") AddReference("QuantConnect.Indicators") AddReference("QuantConnect.Common") from System import * from QuantConnect import * from QuantConnect.Algorithm import * from QuantConnect.Indicators import * from QuantConnect.Python import PythonQuandl from QuantConnect.Securities.Equity import EquityExchange from datetime import datetime, timedelta class BasicTemplateAlgorithm(QCAlgorithm): def Initialize(self): self.SetStartDate(2002, 1, 1) self.SetEndDate(2017, 12, 31) self.SetCash(10000) self.AddEquity('XLU', Resolution.Daily) self.AddEquity('VTI', Resolution.Daily) self.Securities['XLU'].FeeModel = ConstantFeeTransactionModel(1) self.Securities['VTI'].FeeModel = ConstantFeeTransactionModel(1) self.RS = 0 self.SetWarmUp(10) self.Schedule.On(self.DateRules.WeekStart('XLU'), self.TimeRules.AfterMarketOpen('XLU', 1), Action(self.RelativeStrength)) self.Schedule.On(self.DateRules.WeekStart('XLU'), self.TimeRules.AfterMarketOpen('XLU', 2), Action(self.Trade)) def RelativeStrength(self): slices = self.History(['XLU', 'VTI'], 5, Resolution.Daily) if not slices.empty: df_xlu = slices.loc['XLU'] xlu_open = df_xlu['open'][0] xlu_close = df_xlu['close'][-1] df_vti = slices.loc['VTI'] vti_open = df_vti['open'][0] vti_close = df_vti['close'][-1] vtixlu_open = vti_open / xlu_open xluvti_close = xlu_close / vti_close comb = vtixlu_open * xluvti_close self.RS = comb - 1 def Trade(self): if self.RS > 0: if self.Portfolio['XLU'].Quantity > 0 and self.Portfolio['VTI'].Quantity == 0: return elif self.Portfolio['XLU'].Quantity == 0 and self.Portfolio['VTI'].Quantity > 0: self.Liquidate('VTI') self.SetHoldings('XLU', 1) else: self.SetHoldings('XLU', 1) elif self.RS < 0: if self.Portfolio['XLU'].Quantity == 0 and self.Portfolio['VTI'].Quantity > 0: return elif self.Portfolio['XLU'].Quantity > 0 and self.Portfolio['VTI'].Quantity == 0: self.Liquidate('XLU') self.SetHoldings('VTI', 1) else: self.SetHoldings('VTI', 1) else: if self.Portfolio['XLU'].Quantity != 0 or self.Portfolio['VTI'].Quantity != 0: return else: return