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 -2.402 Tracking Error 0.123 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $0 Lowest Capacity Asset |
# Comparison of the custom indicator by Vladimir "Awesome Oscillator" and the built-in QC class CustomIndicatorAlgorithm(QCAlgorithm): def Initialize(self): self.SetStartDate(2021, 1, 1) self.SetEndDate(2021, 7, 2) self.stock = self.AddEquity('SPY', Resolution.Daily).Symbol self.SetWarmUp(50, Resolution.Daily) self.AwesomeOsc = CustomIndicator('Awesome Osc', 5, 34) self.RegisterIndicator(self.stock, self.AwesomeOsc, Resolution.Daily) self.awesome_osc_qc = self.AO(self.stock, 5, 34, MovingAverageType.Simple, Resolution.Daily) def OnData(self, data): if self.IsWarmingUp or not (self.awesome_osc_qc.IsReady or self.AwesomeOsc.IsReady): return self.Plot("Awesome Osc", "AwesomeOsc_Custom", self.AwesomeOsc.Value) self.Plot("Awesome Osc", "AwesomeOsc_QC", self.awesome_osc_qc.Current.Value) self.Plot("Awesome Osc", "Zero", 0) class CustomIndicator(PythonIndicator): def __init__(self, name, fast, slow): self.Name = name self.Time = datetime.min self.Value = 0 self.fast = SimpleMovingAverage(fast) self.slow = SimpleMovingAverage(slow) self.Period = slow def Update(self, input): self.Time = input.EndTime self.Value = 0 mp = (input.High + input.Low ) / 2 if not self.fast.Update(input.Time, mp): return False if not self.slow.Update(input.Time, mp): return False self.diff = (self.fast.Current.Value - self.slow.Current.Value) self.Value = self.diff return True