Ejemplo n.º 1
0
        private void GenerateKDJ(int i)
        {
            BarData curData = null;

            if (i >= barDatas.Count)
            {
                curData = GetBarData(0);
            }
            else
            {
                curData = barDatas[i];
            }
            HighestH = HH.AddValue(curData.High);
            LowestL  = LL.AddValue(curData.Low);
            if (HighestH - LowestL == 0)
            {
                Rsv = preRsv;
                valueDict["K"].Add(JPR.NaN);
                valueDict["D"].Add(JPR.NaN);
                valueDict["J"].Add(JPR.NaN);
                if (!IsSimpleMode)
                {
                    graphDict["K"].AddValue(JPR.NaN, Color.White);
                    graphDict["D"].AddValue(JPR.NaN, Color.Yellow);
                    graphDict["J"].AddValue(JPR.NaN, Color.Magenta);
                }
            }
            else
            {
                Rsv = 100 * (curData.Close - LowestL) / (HighestH - LowestL);
                if (!init)
                {
                    if (thisK != JPR.NaN)
                    {
                        preK  = thisK;
                        thisK = preK * (_ma1 - 1) / _ma1 + Rsv * 1 / _ma1;
                        if (DList.Count < _ma2)
                        {
                            DList.Add(thisK);
                        }
                    }
                    if (!initK)
                    {
                        if (KList.Count < _ma1)
                        {
                            KList.Add(Rsv);
                        }
                        if (KList.Count == _ma1)
                        {
                            initK = true;
                            thisK = KList.Average();
                            DList.Add(thisK);
                        }
                    }
                    if (DList.Count > 0 && DList.Count == _ma2)
                    {
                        thisD = DList.Average();
                        init  = true;
                    }
                    Rsv = JPR.NaN;
                    valueDict["K"].Add(JPR.NaN);
                    valueDict["D"].Add(JPR.NaN);
                    valueDict["J"].Add(JPR.NaN);
                    if (!IsSimpleMode)
                    {
                        graphDict["K"].AddValue(JPR.NaN, Color.White);
                        graphDict["D"].AddValue(JPR.NaN, Color.Yellow);
                        graphDict["J"].AddValue(JPR.NaN, Color.Magenta);
                    }
                }
                else
                {
                    preK  = thisK;
                    thisK = preK * (_ma1 - 1) / _ma1 + Rsv * 1 / _ma1;
                    preD  = thisD;
                    thisD = preD * (_ma2 - 1) / _ma2 + thisK * 1 / _ma2;
                    thisJ = 3 * thisK - 2 * thisD;
                    valueDict["K"].Add(thisK);
                    valueDict["D"].Add(thisD);
                    valueDict["J"].Add(thisJ);
                    if (!IsSimpleMode)
                    {
                        graphDict["K"].AddValue(thisK, Color.White);
                        graphDict["D"].AddValue(thisD, Color.Yellow);
                        graphDict["J"].AddValue(thisJ, Color.Magenta);
                    }
                }
            }
            preRsv = Rsv;
        }