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");
                        }
                    }
                }
            }
        }
Пример #2
0
        /// <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");
         }
     }
 }