protected override void CalcBar() { var m_avg = m_averagefc1[0]; var m_sdev = bollingerprice.StandardDeviationCustom(length, 1); m_upperband.Value = (m_avg + (numdevsup * m_sdev)); m_lowerband.Value = (m_avg + (numdevsdn * m_sdev)); if (((displace >= 0) || Bars.CurrentBar > Math.Abs(displace))) { Plot1.Set(displace, m_upperband.Value); Plot2.Set(displace, m_lowerband.Value); Plot3.Set(displace, m_avg); m_IndicatorArea.SetValue("UpperBand", m_upperband.Value, Bars.TimeValue.ToBinary()); m_IndicatorArea.SetValue("LowerBand", m_lowerband.Value, Bars.TimeValue.ToBinary()); if ((displace <= 0)) { if (this.CrossesOver(testpricelband, m_lowerband)) { Alerts.Alert("Price crossing over lower price band"); } else { if (this.CrossesUnder(testpriceuband, m_upperband)) { Alerts.Alert("Price crossing under upper price band"); } } } } ChartCustomDraw.ReDraw(); }
protected override void StopCalc() { m_last_cb = 0; m_last_tick_val = 0; m_volumes.Clear(); Asks = null; Bids = null; ChartCustomDraw.ReDraw(); }
protected override void CalcBar() { if (Bars.LastBarInSession) { m_upperband.Value = (Bars.Close[0] * (1 + (numdevs * volstddev[0] / Math.Sqrt(252)))); m_lowerband.Value = (Bars.Close[0] * (1 - (numdevs * volstddev[0] / Math.Sqrt(252)))); } else { m_upperband.Value = (Bars.Close[1] * (1 + (numdevs * volstddev[0] / Math.Sqrt(252)))); m_lowerband.Value = (Bars.Close[1] * (1 - (numdevs * volstddev[0] / Math.Sqrt(252)))); } Plot1.Set(0, m_upperband.Value); Plot2.Set(0, m_lowerband.Value); m_IndicatorArea.SetValue("UpperBand", m_upperband.Value, Bars.TimeValue.ToBinary()); m_IndicatorArea.SetValue("LowerBand", m_lowerband.Value, Bars.TimeValue.ToBinary()); ChartCustomDraw.ReDraw(); }
protected override void CalcBar() { if (delta) { m_upperband.Value = Bars.Close[1] + multiplier * mean_absolute_difference_delta_fn[1]; m_lowerband.Value = Bars.Close[1] - multiplier * mean_absolute_difference_delta_fn[1]; } else { m_upperband.Value = Bars.Close[1] + multiplier * mean_absolute_difference_fn[1]; m_lowerband.Value = Bars.Close[1] - multiplier * mean_absolute_difference_fn[1]; } Plot1.Set(0, m_upperband.Value); Plot2.Set(0, m_lowerband.Value); m_IndicatorArea.SetValue("UpperBand", m_upperband.Value, Bars.TimeValue.ToBinary()); m_IndicatorArea.SetValue("LowerBand", m_lowerband.Value, Bars.TimeValue.ToBinary()); ChartCustomDraw.ReDraw(); }
protected override void OnRecalcLastBarAfterEvent() { if (Bars.DOM.Connected) { var _changed = false; lock (this){ var _old_ask = Asks; var _old_bid = Bids; Asks = Bars.DOM.Ask; Bids = Bars.DOM.Bid; _changed = !(equal(_old_ask, Asks) && equal(_old_bid, Bids)); } if (_changed) { ChartCustomDraw.ReDraw(); } ExecControl.RecalcLastBarAfter(TimeSpan.FromSeconds(UpdateSpeedsec)); } }
// Drawing is triggered here on a timer rather than in // CalcBar() because the bid and ask can change without CalcBar() // being called. protected override void OnRecalcLastBarAfterEvent() { if (Bars.DOM.Connected) { var _changed = false; // confusing logic; necessary because Bids/Asks will be null // on the first pass through. DOMPrice _old_ask = new DOMPrice(double.NaN, double.NaN); DOMPrice _old_bid = new DOMPrice(double.NaN, double.NaN); double _old_last = double.NaN; lock (this){ if (null == Asks) { _changed = true; } else { _old_ask = Asks[0]; _old_bid = Bids[0]; _old_last = LastPrice; } Asks = Bars.DOM.Ask; Bids = Bars.DOM.Bid; LastPrice = Bars.Close[0]; _changed = _changed || !((_old_ask == Asks[0]) && (_old_bid == Bids[0]) && (_old_last == LastPrice)); } _changed = _changed || !(LastPrice == Bars.Close[0]); if (_changed) { ChartCustomDraw.ReDraw(); } ExecControl.RecalcLastBarAfter(TimeSpan.FromSeconds(UpdateSpeedSecs)); } }