Exemple #1
0
        void drawMACD(xGraphics g, int y, int h)
        {
            calcMACD();

            if (mCandleCnt < 5)
            {
                return;
            }

            //  translate to XYs
            //======================
            float lo = 1000;
            float hi = -1000;

            int i;

            float[] his = pMACDHistogram;
            for (i = 0; i < mCandleCnt; i++)
            {
                his[i] = pMACD[i] - pMACDSignal9[i];
            }
            //===========================

            float[] macd   = pMACD;
            float[] signal = pMACDSignal9;
            his = pMACDHistogram;

            int cnt = mCandleCnt;

            //	get the highest
            int   w  = getW();
            float rx = (float)w / cnt;

            //	lo/hi
            for (i = 0; i < cnt; i++)
            {
                if (macd[i] > hi)
                {
                    hi = macd[i];
                }
                if (macd[i] < lo)
                {
                    lo = macd[i];
                }
            }
            for (i = 0; i < cnt; i++)
            {
                if (signal[i] > hi)
                {
                    hi = signal[i];
                }
                if (signal[i] < lo)
                {
                    lo = signal[i];
                }
            }

            if (hi < 0)
            {
                hi = 0;
            }
            if (lo < 0)
            {
                lo = -lo;
            }

            float double_hi = Utils.ABS_FLOAT(hi) > Utils.ABS_FLOAT(lo) ? hi : lo;// hi + lo;

            double_hi = 2 * Utils.ABS_FLOAT(double_hi);

            int   minHistoH   = 9;
            int   signalDrawH = h - 2 * minHistoH;
            int   OY          = y + h / 2;
            float ry          = 0;

            if (double_hi != 0)
            {
                OY = y + h / 2;
                ry = (float)signalDrawH / double_hi;
            }

            //	make sure all macd is now > 0 && < 100
            for (i = 0; i < cnt; i++)
            {
                mLineMACD[2 * i + 1]    = (short)(OY - macd[i] * ry);
                mLineSignal9[2 * i + 1] = (short)(OY - signal[i] * ry);
            }

            //	cnt == CHART_W
            int max_time = getMaxTimeOfChart();
            int timeb    = Utils.EXTRACT_HOUR(mTimes[0]) * 3600
                           + Utils.EXTRACT_MINUTE(mTimes[0]) * 60
                           + Utils.EXTRACT_SECOND(mTimes[0]);

            rx = (float)getW() / max_time;
            for (i = 0; i < cnt; i++)
            {
                int time = timeToSeconds(mTimes[i]);
                time -= timeb;

                mLineMACD[2 * i]    = (short)(time * rx);
                mLineSignal9[2 * i] = mLineMACD[2 * i];
            }

            //	histogram
            hi = 0;
            for (i = 0; i < cnt; i++)
            {
                if (Utils.ABS_FLOAT(his[i]) > hi)
                {
                    hi = Utils.ABS_FLOAT(his[i]);
                }
            }
            //	int deltaY = 0;//deltaLoHi*mDrawingH/double_hi;
            double_hi = 2 * hi;
            //	double_hi	==	100 pixels
            int   halfH = h / 2;
            float hry   = 0;

            if (hi != 0)
            {
                hry = (float)halfH / hi;//double_hi;
            }
            i = 0;
            int drawW = 0;

            for (i = 0; i < cnt; i++)
            {
                if (double_hi != 0)
                {
                    mHistogramH[i] = (short)(-his[i] * ry);
                }
                else
                {
                    mHistogramH[i] = 0;
                }

                if (mHistogramH[i] == 0)
                {
                    if (his[i] > 0)
                    {
                        mHistogramH[i] = -1;
                    }
                    else
                    {
                        mHistogramH[i] = 1;
                    }
                }
                int time = timeToSeconds(mTimes[i]);
                time -= timeb;

                mHistogramXY[2 * i] = (short)(time * rx);
                drawW = mHistogramXY[2 * i];
                mHistogramXY[2 * i + 1] = (short)OY;
            }

            // ===========================================================
            //  ===== now draw =====
            // ===========================================================
            g.setColor(C.COLOR_FADE_YELLOW);
            g.drawLine(0, OY, getW() - 20, OY);
            g.setColor(C.COLOR_FADE_YELLOW0);
            g.drawString(mContext.getFontSmall(), "0", getW() - 20, OY, xGraphics.VCENTER);

            int hisW  = (int)(((float)drawW / mCandleCnt) * 2.0f / 3);
            int hisW2 = hisW / 2;

            if (hisW <= 0)
            {
                hisW = 1;
            }
            //g.setColor(0x6000ff00);
            for (i = 0; i < mCandleCnt; i++)
            {
                //g.fillRect(mHistogramXY[2 * i], mHistogramXY[2 * i + 1], hisW, mHistogramH[i]);
                if (mHistogramH[i] < 0)
                {
                    g.setColor(0xff70ee00);
                }
                else
                {
                    g.setColor(0xffc03000);
                }

                //g.drawRect(mHistogramXY[2 * i] - hisW2, mHistogramXY[2 * i + 1], hisW, mHistogramH[i]);
                g.drawRect(mHistogramXY[2 * i], mHistogramXY[2 * i + 1], 1, mHistogramH[i]);
                //g.drawVerticalLine(mHistogramXY[2 * i], mHistogramXY[2 * i + 1] + hisW / 2, mHistogramH[i]);
            }

            g.setColor(C.COLOR_BLUE_LIGHT);
            g.drawLines(mLineMACD, mCandleCnt, 2.0f);

            g.setColor(0xffff0000);
            g.drawLines(mLineSignal9, mCandleCnt, 1.0f);
        }
Exemple #2
0
        void recalcMACD()
        {
            float[] macd;
            float[] signal;
            float[] his;

            int i;
            int cnt;

            Share s = getShare();

            s.calcMACD();

            Share share = s;

            //======================
            his = share.pMACDHistogram;
            for (i = 0; i < s.getCandleCount(); i++)
            {
                his[i] = share.pMACD[i] - share.pMACDSignal9[i];
            }
            //===========================

            macd   = share.pMACD;
            signal = share.pMACDSignal9;
            his    = share.pMACDHistogram;

            cnt = mChartLineLength;

            mLineMACD    = allocMem(mLineMACD, cnt * 2);
            mLineSignal9 = allocMem(mLineSignal9, cnt * 2);
            mHistogramXY = allocMem(mHistogramXY, cnt * 2);
            mHistogramH  = allocMem(mHistogramH, cnt * 1);

            //	get the highest
            float rx = (float)getDrawingW() / cnt;

            //	lo/hi
            for (i = 0; i < cnt; i++)
            {
                if (macd[i + s.mBeginIdx] > hi)
                {
                    hi = macd[i + s.mBeginIdx];
                }
                if (macd[i + s.mBeginIdx] < lo)
                {
                    lo = macd[i + s.mBeginIdx];
                }
            }
            for (i = 0; i < cnt; i++)
            {
                if (signal[i + s.mBeginIdx] > hi)
                {
                    hi = signal[i + s.mBeginIdx];
                }
                if (signal[i + s.mBeginIdx] < lo)
                {
                    lo = signal[i + s.mBeginIdx];
                }
            }

            if (hi < 0)
            {
                hi = 0;
            }
            if (lo < 0)
            {
                lo = -lo;
            }

            float double_hi = Utils.ABS_FLOAT(hi) > Utils.ABS_FLOAT(lo) ? hi : lo;// hi + lo;

            double_hi = 2 * Utils.ABS_FLOAT(double_hi);

            int minHistoH   = 9;
            int signalDrawH = getDrawingH() - 2 * minHistoH;
            int OY          = getH() / 2;// 0 + CHART_BORDER_SPACING_Y + minHistoH;

            //float ry = 0;
            if (double_hi != 0)
            {
                OY = getH() / 2;// (int)((float)hi * signalDrawH / double_hi);
                ry = (float)signalDrawH / double_hi;
            }
            mOY = OY;

            //	double_hi	==	100 pixels
            //	make sure all macd is now > 0 && < 100
            float tmp_macd;
            float tmp_signal;

            for (i = 0; i < cnt; i++)
            {
                tmp_macd   = macd[i + s.mBeginIdx];   // + hi;
                tmp_signal = signal[i + s.mBeginIdx]; // + hi;
                //if (hi != 0)
                {
                    mLineMACD[2 * i + 1]    = (short)(OY - tmp_macd * ry);
                    mLineSignal9[2 * i + 1] = (short)(OY - tmp_signal * ry);
                }
            }

            //	cnt == CHART_W
            for (i = 0; i < cnt; i++)
            {
                mLineMACD[2 * i]    = (short)(0 + CHART_BORDER_SPACING_X + i * rx + getStartX());
                mLineSignal9[2 * i] = mLineMACD[2 * i];
            }

            //	histogram
            hi = 0;
            for (i = 0; i < cnt; i++)
            {
                if (Utils.ABS_FLOAT(his[i + s.mBeginIdx]) > hi)
                {
                    hi = Utils.ABS_FLOAT(his[i + s.mBeginIdx]);
                }
            }
            //	int deltaY = 0;//deltaLoHi*mDrawingH/double_hi;
            double_hi = 2 * hi;
            //	double_hi	==	100 pixels
            int   halfH = getDrawingH() / 2;
            float hry   = 0;

            if (hi != 0)
            {
                hry = (float)halfH / hi;//double_hi;
            }
            for (i = 0; i < cnt; i++)
            {
                if (double_hi != 0)
                {
                    mHistogramH[i] = (short)(-his[i + s.mBeginIdx] * ry);
                }
                else
                {
                    mHistogramH[i] = 0;
                }

                if (mHistogramH[i] == 0)
                {
                    if (his[i + s.mBeginIdx] > 0)
                    {
                        mHistogramH[i] = -1;
                    }
                    else
                    {
                        mHistogramH[i] = 1;
                    }
                }
                mHistogramXY[2 * i]     = (short)(0 + CHART_BORDER_SPACING_X + i * rx + getStartX());
                mHistogramXY[2 * i + 1] = (short)OY;//mY + CHART_BORDER_SPACING_Y + halfH - deltaY;
            }
        }