/// <summary> /// Called on each bar update event (incoming tick) /// </summary> protected override void OnBarUpdate() { /// ensure bar has EmProps if (props is IEmProps) { /// get EmProps for the specified bar, matching on OHLCVT EmProps barProps = props.GetEmProps(Open[0], High[0], Low[0], Close[0], (long)Volume[0], Time[0]) as EmProps; /// ensure EmProps exist for given bar (note: some historical data may not be available) if (barProps == null) { return; } /// update plots Surge.Set(barProps.Surge); Tide.Set(barProps.Tide); ErrorCount.Set(barProps.ErrorCount); ErrorVolume.Set(barProps.ErrorVolume); /// update average TideAvg.Set(EmMath.EMA((double)barProps.Tide, CurrentBar, smooth, CurrentBar == 0 ? Tide[0] : TideAvg[1])); } else { /// generate log message one time if (!invalid) { Log(String.Format("{0} does not implement interface IEmProps", Bars.BarsType.ToString()), LogLevel.Warning); invalid = true; } } }