Example #1
0
            internal double Calc(double thePrice)  // Calculate Indicator values
            {
                // HEMA(n) = EMA(2 * EMA(n / 2) – EMA(n)), sqrt(n))
                if (Period < 1)
                {
                    throw new Exception("HEMAcalc: period < 1, invalid !!");
                }
                if (Threshold < 1e-10)
                {
                    throw new Exception("HEMAcalc: Threshold < 1e-10, invalid !!");
                }
                if (trendDir != 0)
                {
                    prevTrendDir = trendDir;
                }
                prevState = trendDir;
                ema1.Calc(thePrice);
                ema2.Calc(thePrice);
                double term3 = 2 * ema2.EMAval - ema1.EMAval;

                HEMAval      = ema3.Calc(term3);
                isRrising    = ema3.isRrising;
                isFalling    = ema3.isFalling;
                trendDir     = isRrising ? 1 : (isFalling ? -1 : 0);
                trendChanged = (trendDir * prevTrendDir < 0);
                stateChanged = (trendDir != prevState);
                return(HEMAval);
            }
Example #2
0
            internal double Calc(double thePrice)
            {
                EMA1.Calc(thePrice);
                EMA2.Calc(EMA1.EMAval);
                EMA3.Calc(EMA2.EMAval);
                var DEMAval = 2 * EMA1.EMAval - EMA2.EMAval;
                var TEMAval = 3 * EMA1.EMAval - 3 * EMA2.EMAval + EMA3.EMAval;

                DTEMAval = (DEMAval + TEMAval) / 2;
                var diff = DTEMAval - prevDTEMA;

                prevDTEMA = DTEMAval;
                isRrising = (diff > Threshold);
                isFalling = (diff < -Threshold);
                if (trendDir != 0)
                {
                    prevTrendDir = trendDir;
                }
                prevState    = trendDir;
                trendDir     = isRrising ? 1 : (isFalling ? -1 : 0);
                trendChanged = (trendDir * prevTrendDir < 0);
                stateChanged = (trendDir != prevState);
                string msg = thePrice
                             + "," + EMA1.EMAval
                             + "," + EMA2.EMAval
                             + "," + EMA3.EMAval
                             + "," + DTEMAval
                             + "," + prevDTEMA
                             + "," + trendDir
                             + "," + prevTrendDir
                             + "," + trendChanged
                ;

                dumpData(msg);

                return(DTEMAval);
            }