Overall Statistics |
Total Trades 74 Average Win 11.49% Average Loss -3.66% Compounding Annual Return 4.138% Drawdown 25.200% Expectancy 0.756 Net Profit 110.978% Sharpe Ratio 0.426 Loss Rate 58% Win Rate 42% Profit-Loss Ratio 3.14 Alpha -0.031 Beta 3.868 Annual Standard Deviation 0.11 Annual Variance 0.012 Information Ratio 0.243 Tracking Error 0.11 Treynor Ratio 0.012 Total Fees $301.11 |
### <summary> ### Simple algorithm that relies entirely on death crosses / golden crosses ### The algorithm will go long until a death cross appears, at which point the algorithm will try: ### The securities will be purchased again if a golden cross appears ### </summary> import decimal class SimpleDeathCrossAlgorithm(QCAlgorithm): '''Basic template algorithm simply initializes the date range and cash''' def Initialize(self): '''Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.''' self.SetStartDate(2000,6, 1) #Set Start Date self.SetEndDate(2018,6,1) #Set End Date self.SetCash(100000) #Set Strategy Cash self.symbol = "SPY" self.slow_period = 100 self.fast_period = 20 self.SetWarmup(self.slow_period) # Find more symbols here: http://quantconnect.com/data self.AddEquity(self.symbol, Resolution.Daily) self.slow_ma = self.SMA(self.symbol, self.slow_period, Resolution.Daily) self.fast_ma = self.SMA(self.symbol, self.fast_period, Resolution.Daily) # Add a small threshold to prevent thrashing self.threshold = decimal.Decimal(1.0002) self.last_run = None def OnData(self, data): '''OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here. Arguments: data: Slice object keyed by symbol containing the stock data ''' # Wait for enough data if not self.slow_ma.IsReady: return # Prevent from running multiple times/day if self.last_run is not None and self.last_run.day == self.Time.day: return else: self.last_run = self.Time if self.fast_ma.Current.Value > self.slow_ma.Current.Value * self.threshold: self.SetHoldings(self.symbol, 1) elif self.fast_ma.Current.Value < self.slow_ma.Current.Value: self.Liquidate(self.symbol)