Overall Statistics |
Total Trades 5 Average Win 0.07% Average Loss 0.00% Compounding Annual Return 0.758% Drawdown 0.100% Expectancy 82.734 Net Profit 0.085% Sharpe Ratio 1.555 Probabilistic Sharpe Ratio 57.752% Loss Rate 50% Win Rate 50% Profit-Loss Ratio 166.47 Alpha 0.004 Beta 0.005 Annual Standard Deviation 0.004 Annual Variance 0 Information Ratio -2.731 Tracking Error 0.143 Treynor Ratio 1.225 Total Fees $5.00 Estimated Strategy Capacity $110000000000.00 Lowest Capacity Asset F R735QTJ8XC9X |
class BootCampTask(QCAlgorithm): def Initialize(self): self.SetStartDate(2021, 1, 1) self.SetEndDate(2021, 2, 10) self.SetCash(100000) self.symbol_data_by_symbol = {} tickers = ['SPY', 'TSLA', 'F'] for ticker in tickers: security = self.AddEquity(ticker, Resolution.Daily) security.SetDataNormalizationMode(DataNormalizationMode.Raw) self.symbol_data_by_symbol[security.Symbol] = {'stopMarketTicket': None, 'stopMarketOrderFillTime': datetime.min, 'highestPrice': -1} def OnData(self, data): for symbol, symbol_data in self.symbol_data_by_symbol.items(): # 1. Plot the current price self.Plot(str(symbol), "Asset Price", data[symbol].Close) if (self.Time - symbol_data['stopMarketOrderFillTime']).days < 15: return if not self.Portfolio[symbol].Invested: self.MarketOrder(symbol, 1) symbol_data['stopMarketTicket'] = self.StopMarketOrder(symbol, -1, 0.9 * self.Securities[symbol].Close) else: #2. Plot the moving stop price self.Plot(str(symbol), "Stop Price", symbol_data['stopMarketTicket'].Get(OrderField.StopPrice)) if self.Securities[symbol].Close > symbol_data['highestPrice']: symbol_data['highestPrice'] = self.Securities[symbol].Close updateFields = UpdateOrderFields() updateFields.StopPrice = symbol_data['highestPrice'] * 0.9 symbol_data['stopMarketTicket'].Update(updateFields) def OnOrderEvent(self, orderEvent): if orderEvent.Status != OrderStatus.Filled: return for symbol, symbol_data in self.symbol_data_by_symbol.items(): if symbol_data['stopMarketTicket'] is not None and symbol_data['stopMarketTicket'].OrderId == orderEvent.OrderId: symbol_data['stopMarketOrderFillTime'] = self.Time