Overall Statistics |
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Probabilistic Sharpe Ratio 0% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio 0 Tracking Error 0 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $0 Lowest Capacity Asset |
from QuantConnect.Data.Market import TradeBar from datetime import timedelta from System import * from QuantConnect import * from QuantConnect.Algorithm import * from QuantConnect.Indicators import * import decimal as d from statistics import pstdev from System.Drawing import Color class VWAPAlgorithmicTrader(QCAlgorithm): def Initialize(self): self.SetStartDate(2022, 2, 28) self.SetEndDate(2022, 3, 7) self.SetCash(25000) self.ticker = "QQQ" self.consPeriod = 1 self.SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage) #rolling window (to be implemented later) self.window = RollingWindow[TradeBar](2) #symbol and consolidator self.symbol = self.AddEquity(self.ticker, Resolution.Minute).Symbol self.Consolidate(self.symbol, timedelta(minutes=self.consPeriod), self.BarHandler) #vwap indicator, consolidator, and vwap_values list for calculating std dev self.vwap = self.VWAP(self.symbol, 390) self.RegisterIndicator(self.symbol, self.vwap, timedelta(minutes=self.consPeriod)) self.vwap_values = [] #vwap standard deviation indicator self.vwap_stddev = StandardDeviation(390) self.RegisterIndicator(self.symbol, self.vwap_stddev, timedelta(minutes=self.consPeriod)) self.vwap.Updated += self.OnVWAPUpdated self.Schedule.On(self.DateRules.EveryDay(self.symbol), self.TimeRules.BeforeMarketClose(self.symbol, 0), self.VWAPReset) #charting logic stockPlot = Chart('Indicator Chart') stockPlot.AddSeries(Series('Price', SeriesType.Line, '', Color.Lime)) stockPlot.AddSeries(Series('STD T2', SeriesType.Line, '', Color.WhiteSmoke)) stockPlot.AddSeries(Series('STD T1', SeriesType.Line, '', Color.WhiteSmoke)) stockPlot.AddSeries(Series('VWAP', SeriesType.Line, '', Color.DarkOrchid)) stockPlot.AddSeries(Series('STD B1', SeriesType.Line, '', Color.WhiteSmoke)) stockPlot.AddSeries(Series('STD B2', SeriesType.Line, '', Color.WhiteSmoke)) self.AddChart(stockPlot) def OnData(self, data): self.window.Add(data[self.ticker]) if not self.window.IsReady: return self.STDT2 = self.vwap.Current.Value + (2 * self.vwap_stddev.Current.Value) self.STDT1 = self.vwap.Current.Value + (1 * self.vwap_stddev.Current.Value) self.STDB1 = self.vwap.Current.Value - (1 * self.vwap_stddev.Current.Value) self.STDB2 = self.vwap.Current.Value - (2 * self.vwap_stddev.Current.Value) self.Plot('Indicator Chart', 'STD T2', self.STDT2) self.Plot('Indicator Chart', 'STD T1', self.STDT1) self.Plot('Indicator Chart', 'VWAP', self.vwap.Current.Value) self.Plot('Indicator Chart', 'STD B1', self.STDB1) self.Plot('Indicator Chart', 'STD B2', self.STDB2) self.Plot('Indicator Chart', 'Price', data.Bars[self.symbol].Close) def OnVWAPUpdated(self, vwap, current): if vwap.IsReady: self.vwap_stddev.Update(current.EndTime, current.Value) self.vwap_values.append(self.vwap.Current.Value) def VWAPReset(self): self.vwap.Reset() def BarHandler(self, consolidated): return