protected override void CalcBar() { m_linregvalue.Value = m_linearregvalue1[0]; var m_linregavg = m_linregvalue.Average(smoothinglength); var m_serroravg = m_stderror1.Average(smoothinglength); m_lowerband.Value = (m_linregavg - m_serroravg); m_upperband.Value = (m_linregavg + m_serroravg); if ((((displace >= 0) || Bars.CurrentBar > Math.Abs(displace)) && Bars.CurrentBar >= smoothinglength)) { Plot1.Set(displace, m_upperband.Value); Plot2.Set(displace, m_lowerband.Value); Plot3.Set(displace, m_linregavg); if ((displace <= 0)) { if (this.CrossesOver(price, m_lowerband)) { Alerts.Alert("Price crossing over lower price band"); } else { if (this.CrossesUnder(price, m_upperband)) { Alerts.Alert("Price crossing under upper price band"); } } } } }
/// <summary> /// 計算 Bars 時所呼叫的方法 /// </summary> protected override void CalcBar() { int iCurrent = Bars.CurrentBar; bool bChange = Bars.Status == EBarState.Close; if (bChange) //只計算收線狀態 { __cWeight.Value = (Bars.Close.Value * 2 + Bars.High.Value + Bars.Low.Value) / 4; double dSEMA = __cWeight.Average(this.SlowPeriod, EAverageMode.EMA, __cPrevSEMA.Previous); double dFEMA = __cWeight.Average(this.FastPeriod, EAverageMode.EMA, __cPrevFEMA.Previous); double dDIF = dFEMA - dSEMA; __cDIF.Value = dDIF; double dMACD = __cDIF.Average(this.MACDPeriod, EAverageMode.EMA, __cPrevMACD.Previous); __cMACD.Value = dMACD; __cOSD.Value = dDIF - dMACD; __cPrevFEMA.Value = dFEMA; __cPrevSEMA.Value = dSEMA; __cPrevMACD.Value = dMACD; } }
protected override void CalcBar() { m_ao.Value = m_avg_price.Average(5) - m_avg_price.Average(34); m_ac.Value = m_ao.Value - m_ao.Average(5); if (Bars.CurrentBar >= 5) { if (PublicFunctions.DoubleGreater(m_ac.Value, m_ac[1])) { Plot1.Set(0, m_ac.Value); } else { Plot2.Set(0, m_ac.Value); } } }
protected override void CalcBar() { m_rawmktthr.Value = advissues[0] * advvol[0] - decissues[0] * decvol[0]; m_mktthr.Value = m_rawmktthr.Average(smoothinglength); Plot1.Set(0, m_rawmktthr.Value); Plot2.Set(0, m_mktthr.Value); Plot3.Set(0, 0); if (this.CrossesOver(m_mktthr, 0)) { Alerts.Alert("Indicator turning positive"); } else { if (this.CrossesUnder(m_mktthr, 0)) { Alerts.Alert("Indicator turning negative"); } } }
protected override void CalcBar() { m_ccivalue.Value = Bars.CCI(ccilength); m_cciavg.Value = m_ccivalue.Average(cciavglength); Plot1.Set(0, m_ccivalue.Value); Plot2.Set(0, m_cciavg.Value); Plot3.Set(0, overbought); Plot4.Set(0, oversold); if (this.CrossesOver(m_cciavg, oversold)) { Alerts.Alert("Indicator exiting oversold zone"); } else { if (this.CrossesUnder(m_cciavg, overbought)) { Alerts.Alert("Indicator exiting overbought zone"); } } }
protected override void CalcBar() { m_trin.Value = ArmsIndex.Calc(advissues, advvol, decissues, decvol); m_avgtrin.Value = m_trin.Average(smoothinglength); Plot1.Set(0, m_trin.Value); Plot2.Set(0, m_avgtrin.Value); Plot3.Set(0, oversold); Plot4.Set(0, overbought); if (this.CrossesUnder(m_avgtrin, oversold)) { Alerts.Alert("Indicator exiting oversold zone"); } else { if (this.CrossesOver(m_avgtrin, overbought)) { Alerts.Alert("Indicator exiting overbought zone"); } } }