Overall Statistics |
Total Trades 229 Average Win 9.71% Average Loss -3.95% Compounding Annual Return 8.558% Drawdown 57.200% Expectancy 1.184 Net Profit 6632.814% Sharpe Ratio 0.604 Probabilistic Sharpe Ratio 0.123% Loss Rate 37% Win Rate 63% Profit-Loss Ratio 2.46 Alpha 0.056 Beta 0.988 Annual Standard Deviation 0.167 Annual Variance 0.028 Information Ratio 0.533 Tracking Error 0.105 Treynor Ratio 0.102 Total Fees $0.00 Estimated Strategy Capacity $0 |
import decimal class FocusedYellowGreenFrog(QCAlgorithm): def Initialize(self): self.SetStartDate(1970, 1, 1) # Set Start Date self.SetCash(100000) # Set Strategy Cash self.spx = self.AddData(SPX, "SPX", Resolution.Daily).Symbol self.yield10yr = self.AddData(Yield10Yr, "yield", Resolution.Daily).Symbol self.period = 90 self.SetWarmup(self.period) self.yield_average = self.SMA(self.yield10yr, self.period, Resolution.Daily) self.yield_std = self.STD(self.yield10yr, self.period, Resolution.Daily) self.thresh = 2.5 self.month = None def OnData(self, data): if not data.ContainsKey(self.yield10yr): return yield_thresh = self.yield_average.Current.Value + self.thresh*self.yield_std.Current.Value yield_value = data[self.yield10yr].Value if self.Time.month != self.month: self.month = self.Time.month self.Plot("Yield", "Threshold", yield_thresh) self.Plot("Yield", "Value", yield_value) self.Plot("Yield Difference", "Difference", yield_value - yield_thresh) if yield_value > yield_thresh: self.SetHoldings(self.spx, 0) elif not self.Portfolio.Invested: self.SetHoldings(self.spx, 1) class SPX(PythonData): '''S&P 500 Index Data''' def GetSource(self, config, date, isLive): source = "https://www.dropbox.com/s/un2e74bixphhl8d/spx.csv?dl=1" return SubscriptionDataSource(source, SubscriptionTransportMedium.RemoteFile); def Reader(self, config, line, date, isLive): # If first character is not digit, pass if not (line.strip() and line[0].isdigit()): return None data = line.split(',') spx = SPX() spx.Symbol = config.Symbol spx.Time = datetime.strptime(data[0], '%d/%m/%Y')# + timedelta(days=1) spx.Value = decimal.Decimal(data[1]) return spx class Yield10Yr(PythonData): '''10 Year Treasury Constant Maturity Rate''' def GetSource(self, config, date, isLive): source = "https://www.dropbox.com/s/mxshxu6rle2jdd1/yield.csv?dl=1" return SubscriptionDataSource(source, SubscriptionTransportMedium.RemoteFile); def Reader(self, config, line, date, isLive): # If first character is not digit, pass if not (line.strip() and line[0].isdigit()): return None data = line.split(',') yield10yr = Yield10Yr() yield10yr.Symbol = config.Symbol yield10yr.Time = datetime.strptime(data[0], '%d/%m/%Y')# + timedelta(days=1) yield10yr.Value = decimal.Decimal(data[1]) return yield10yr