// constructor, called only once, setup multiple tick variables
        public oIndicatorDump(int pPeriods)
        {
            iPeriods = pPeriods;

            ATR         = new iATR(pPeriods);
            BB          = new iBollingerBands(iPeriods, -1);
            CCI         = new iCCI(iPeriods);
            Derivatives = new iDerivatives();
            EMA         = new iEMA(iPeriods);
            FMA         = new iFMA(iPeriods);
            HMA         = new iHMA(iPeriods);
            MACD        = new iMACD(12, 26, 9);
            Momemtum    = new iMomemtum(iPeriods);
            RSI         = new iRSI(iPeriods);
            Renko       = new iRenko(iPeriods);
            SMA         = new iSMA(iPeriods);
            STARCBands  = new iSTARCBands(iPeriods, 2);
            STDDEV      = new iSTDDEV(iPeriods);
            Slope       = new iSlope();
            StochRSI    = new iStochRSI(iPeriods);
            Stochastics = new iStochastics(3, 2, 1);
            Stub        = new iStub(iPeriods);
            Trend       = new iTrend(iPeriods);
            TrueRange   = new iTrueRange();
            WMA         = new iWMA(iPeriods);
        }
        public void RecordMACD(KLine _curKL ,ref iEMA ema11 ,ref iEMA ema22 ,ref iMACD macd )
        {
            ema11.ReceiveTick(_curKL.close);
            ema22.ReceiveTick(_curKL.close);

            double DI = ((double)_curKL.close * 2 + _curKL.highest + _curKL.lowest) / 4.0;
            macd.ReceiveTick(DI / 100);
        }
        public bool ReceiveData(ref int cnt , ref KLine _KL , ref List<KLine> _lst ,
             ref iEMA _ema11, ref iEMA _ema22, ref iMACD _macd ,
             int period , DateTime _CurTime ,
             int open , int highest , int lowest , int close , int amount)
        {
            cnt++;
            if (cnt == 1)
            {
                _KL = new KLine(FIFTEEN_MINUTES, _CurTime, open, highest, lowest, close, amount);
            }
            else
            {
                _KL.amount += amount;
                if (lowest < _KL.lowest)
                    _KL.lowest = lowest;
                else if (highest > _KL.highest)
                    _KL.highest = highest;

                if (cnt == period / ONE_MINUTE)
                {
                    _KL.close = close;
                    _KL.datetime = g_CurTime;
                    _lst.Add(_KL);
                    cnt = 0;

                    //記錄MACD
                    RecordMACD(_KL, ref _ema11, ref _ema22, ref _macd);

                    //K棒收集完成
                    return true;
                }
            }
            return false;
        }