Overall Statistics |
Total Trades 6 Average Win 0% Average Loss -0.01% Compounding Annual Return -1.507% Drawdown 0.000% Expectancy -1 Net Profit -0.019% Sharpe Ratio -7.099 Loss Rate 100% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta -0.886 Annual Standard Deviation 0.001 Annual Variance 0 Information Ratio -13.677 Tracking Error 0.002 Treynor Ratio 0.011 Total Fees $19.41 |
from QuantConnect.Python import PythonData from datetime import date, timedelta, datetime import decimal as d class ScheduledEventsAlgorithm(QCAlgorithm): def Initialize(self): self.SetStartDate(2017,1,1) self.SetEndDate(2017,1,5) self.SetCash(100000) spy = self.AddEquity("SPY").Symbol self.symbols = list() self.UniverseSettings.Resolution = Resolution.Daily; self.AddUniverse(StockDataSource, "my-stock-data-source", self.stockDataSource) self.Schedule.On(self.DateRules.EveryDay(spy), self.TimeRules.AfterMarketOpen(spy, 10), self.OpenPositions) self.Schedule.On(self.DateRules.EveryDay(spy), self.TimeRules.BeforeMarketClose(spy, 10), self.LiquidatePositions) def stockDataSource(self, data): self.symbols = [x.Symbol for x in data] return self.symbols def OpenPositions(self): length = len(self.symbols) if length == 0 or self.Portfolio.Invested: return for symbol in self.symbols: self.SetHoldings(symbol, 1.0 / length) def LiquidatePositions(self): if self.Portfolio.Invested: self.Liquidate() class StockDataSource(PythonData): def GetSource(self, config, date, isLiveMode): url = "https://www.dropbox.com/s/2az14r5xbx4w5j6/daily-stock-picker-live.csv?dl=1" if isLiveMode else \ "https://www.dropbox.com/s/e17vdejcjrb6hpj/stock_test.csv?dl=1" return SubscriptionDataSource(url, SubscriptionTransportMedium.RemoteFile) def Reader(self, config, line, date, isLiveMode): if not (line.strip() and line[0].isdigit()): return None csv = line.split(',') stocks = StockDataSource() stocks.Time = datetime.now() if not isLiveMode: stocks.Time = datetime.strptime(csv[0], "%Y%m%d") stocks.Symbol = Symbol.Create(csv[1], SecurityType.Equity, Market.USA) stocks.Value = d.Decimal(csv[2]) else: raise Exception('Live not implemented') stocks.EndTime = stocks.Time + timedelta(1) return stocks