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 Create() { ChartCustomDraw.Register(this); askPen = new Pen(askColor, lineWidth); bidPen = new Pen(bidColor, lineWidth); pricePen = new Pen(priceColor, lineWidth); pricePen.DashStyle = DashStyle.Dash; }
protected override void StopCalc() { if (isCSDRegistred) { ChartCustomDraw.Unregister(this); isCSDRegistred = false; } }
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 StartCalc() { if (!isCSDRegistred) { ChartCustomDraw.Register(this); isCSDRegistred = true; } volstddev.numdays = length; }
protected override void StartCalc() { if (!isCSDRegistred) { ChartCustomDraw.Register(this); isCSDRegistred = true; } bollingerprice = Bars.Close; testpriceuband = Bars.Close; testpricelband = Bars.Close; m_averagefc1.price = bollingerprice; m_averagefc1.length = length; }
protected override void StartCalc() { if (!isCSDRegistred) { ChartCustomDraw.Register(this); isCSDRegistred = true; } mean_absolute_difference_fn.length = length; mean_absolute_difference_fn.target = Bars.Close; mean_absolute_difference_delta_fn.length = length; mean_absolute_difference_delta_fn.target = Bars.Close; }
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)); } }
protected override void Destroy() { ChartCustomDraw.Unregister(this); askPen = bidPen = pricePen = null; }
protected override void Create() { ChartCustomDraw.Register(this); }
protected override void Destroy() { ChartCustomDraw.Unregister(this); }