/// <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; } } }
private void AnimateSun_Click(object sender, RoutedEventArgs e) { Surge.FrameTimeSpan = TimeSpan.FromSeconds(0.3); Surge.BeginAnimation(new[] { "Sun1", "Sun2", "Sun3", "Sun4", "Sun5", "Sun6", "Sun6", "Sun6", "Sun6" }); }
private void Animate_Click(object sender, RoutedEventArgs e) { Surge.FrameTimeSpan = TimeSpan.FromSeconds(0.2); Surge.BeginAnimation(new[] { "Ball1", "Ball2", "Ball3", "Ball4" }); }