Exemple #1
0
        void calcChanged(int period)
        {
            stCandle _c0 = new stCandle();
            stCandle _c1 = new stCandle();

            Share vnindex = mContext.mShareManager.getShare("^VNINDEX");

            vnindex.loadShareFromFile(true);

            if (vnindex.getCandleCnt() < period)
            {
                return;
            }

            stCandle c0 = vnindex.getCandle(vnindex.getCandleCnt() - 1, _c0);
            stCandle c1 = vnindex.getCandle(vnindex.getCandleCnt() - 1 - period, _c1);

            int startDate = c1.date;
            int endDate   = c0.date;

            mChanges.removeAllElements();
            for (int i = 0; i < shareGroup.getTotal(); i++)
            {
                string code  = shareGroup.getCodeAt(i);
                Share  share = Context.getInstance().mShareManager.getShare(code);
                if (share != null)
                {
                    if (share.getShareID() == 1032)
                    {
                        Utils.trace("---");
                    }
                    share.loadShareFromCommonData(true);

                    if (share.getCandleCnt() > 0)
                    {
                        c0 = share.getCandleByDate(startDate, startDate, _c0);
                        c1 = share.getCandleByDate(endDate, startDate, _c1);

                        if (c0 == null || c1 == null)
                        {
                            continue;
                        }

                        ShareChanges change = new ShareChanges();
                        change.code           = code;
                        change.changedPercent = 100 * (c1.close - c0.close) / c0.close;

                        mChanges.addElement(change);
                    }
                }
            }

            //  sort abs
            for (int i = 0; i < mChanges.size() - 1; i++)
            {
                ShareChanges biggest    = (ShareChanges)mChanges.elementAt(i);
                int          biggestIdx = i;
                for (int j = i + 1; j < mChanges.size(); j++)
                {
                    ShareChanges gc = (ShareChanges)mChanges.elementAt(j);
                    if (Math.Abs(gc.changedPercent) > Math.Abs(biggest.changedPercent))
                    {
                        biggest    = gc;
                        biggestIdx = j;
                    }
                }

                if (biggestIdx != i)
                {
                    mChanges.swap(i, biggestIdx);
                }
            }

            while (mChanges.size() > 120)
            {
                mChanges.removeElementAt(mChanges.size() - 1);
            }

            //  sort
            for (int i = 0; i < mChanges.size() - 1; i++)
            {
                ShareChanges biggest    = (ShareChanges)mChanges.elementAt(i);
                int          biggestIdx = i;
                for (int j = i + 1; j < mChanges.size(); j++)
                {
                    ShareChanges gc = (ShareChanges)mChanges.elementAt(j);
                    if (gc.changedPercent > biggest.changedPercent)
                    {
                        biggest    = gc;
                        biggestIdx = j;
                    }
                }

                if (biggestIdx != i)
                {
                    mChanges.swap(i, biggestIdx);
                }
            }
        }
        void calcChanged(int period)
        {
            stCandle c0 = new stCandle();
            stCandle c1 = new stCandle();

            mChanges.removeAllElements();

            Utils.trace("----------------------");
            bool isNhomIndex = false;

            for (int i = 0; i < mGroups.size(); i++)
            {
                stShareGroup g  = (stShareGroup)mGroups.elementAt(i);
                GroupChanges gc = new GroupChanges();
                gc.group = g;
                mChanges.addElement(gc);
                gc.code = g.getName();

                Utils.trace(g.getName());

                double firstGTGD = 0;
                double lastGTGD  = 0;

                double totalGTGD0 = 0;
                double totalGTGD1 = 0;

                int today = 0;

                isNhomIndex = false;

                if (g.getType() == stShareGroup.ID_GROUP_MARKET_OVERVIEW &&
                    g.getTotal() == 1)
                {
                    isNhomIndex = true;
                    String code  = g.getCodeAt(0);
                    Share  share = mContext.mShareManager.getShare(code);
                    if (share == null)
                    {
                        continue;
                    }

                    share.loadShareFromFile(false);
                    share.appendTodayCandle2();

                    int last  = share.getCandleCnt() - 1;
                    int first = (last > period)?(last - period):0;
                    if (last < 0 || first < 0)
                    {
                        continue;
                    }

                    c0 = share.getCandle(last, c0);
                    c1 = share.getCandle(first, c1);

                    if (c1.close > 0)
                    {
                        double changed = 100 * (c0.close - c1.close) / c1.close;

                        gc.changedPercent += changed;
                    }

                    continue;
                }

                for (int j = 0; j < g.getTotal(); j++)
                {
                    string        code    = g.getCodeAt(j);
                    Share         share   = Context.getInstance().mShareManager.getShare(code);
                    int           shareID = Context.getInstance().mShareManager.getShareID(code);
                    stCompanyInfo info    = Context.getInstance().mShareManager.getCompanyInfo(shareID);
                    if (share != null && info != null)
                    {
                        share.loadShareFromCommonData(true);
                        int last  = share.getCandleCnt() - 1;
                        int first = (last > period)?(last - period):0;
                        if (last < 0 || first < 0)
                        {
                            continue;
                        }

                        share.getCandle(last, c0);
                        share.getCandle(first, c1);

                        double changed;
                        if (period == 1 && c0.date < today)
                        {
                            //  khong co giao dich hom nay
                            changed = 0;
                        }
                        else
                        {
                            double r = (info.volume * c1.close);
                            changed = 0;// (c0.close - c1.close) * r;

                            changed  = 100 * (c0.close - c1.close) / c1.close;
                            changed *= r;
                        }

                        totalGTGD0 += (c0.close * info.volume);
                        totalGTGD1 += (c1.close * info.volume);

                        gc.changedPercent += changed;
                        //String s = String.Format("Code: {0}, Price: Close0/Close1={1}/{2}, r={3} changed/totalChanged: {4}/{5}",
                        //share.getCode(), c0.close, c1.close, r, changed, gc.changedPercent);
                        //Utils.trace(s);
                    }

                    gc.changedPercent  = 100 * (totalGTGD0 - totalGTGD1);
                    gc.changedPercent /= totalGTGD1;
                }

                //Utils.trace(String.Format("Total changed: {0}", gc.changedPercent));
            }

            //  sort
            if (false)//isNhomIndex)
            {
                //  khong sort
            }
            else
            {
                xVector marketOverView = new xVector();
                for (int i = 0; i < mChanges.size() - 1; i++)
                {
                    GroupChanges g = (GroupChanges)mChanges.elementAt(i);
                    if (g.group.getType() == stShareGroup.ID_GROUP_MARKET_OVERVIEW || g.code.IndexOf('#') == 0)
                    {
                        marketOverView.addElement(g);
                    }
                }

                for (int i = 0; i < marketOverView.size(); i++)
                {
                    mChanges.removeElement(marketOverView.elementAt(i));
                }

                //================================

                for (int i = 0; i < mChanges.size() - 1; i++)
                {
                    GroupChanges biggest    = (GroupChanges)mChanges.elementAt(i);
                    int          biggestIdx = i;
                    for (int j = i + 1; j < mChanges.size(); j++)
                    {
                        GroupChanges gc = (GroupChanges)mChanges.elementAt(j);
                        if (gc.changedPercent > biggest.changedPercent)
                        {
                            biggest    = gc;
                            biggestIdx = j;
                        }
                    }

                    if (biggestIdx != i)
                    {
                        mChanges.swap(i, biggestIdx);
                    }
                }
                //========================
                for (int i = 0; i < mChanges.size(); i++)
                {
                    marketOverView.addElement(mChanges.elementAt(i));
                }
                mChanges.removeAllElements();
                for (int i = 0; i < marketOverView.size(); i++)
                {
                    mChanges.addElement(marketOverView.elementAt(i));
                }
            }
        }
Exemple #3
0
        void refreshChart2()
        {
            if (group == null)
            {
                group = new stShareGroup();
                group.setType(stShareGroup.ID_GROUP_DEFAULT);
            }

            group.clear();

            currentSelected = null;

            Share index = mContext.mShareManager.getShare(mShareID);
            stPriceboardStateIndex pi = mContext.mPriceboard.getPriceboardIndexOfMarket(index.getMarketID());

            if (index == null || pi == null)
            {
                return;
            }

            if (mContext.mShareManager.getVnindexCnt() == 0)
            {
                return;
            }

            _isProcessing = true;

            index.loadShareFromFile(false);

            stCandle cIndex = new stCandle();

            index.getCandleByDate(startDate, 0, cIndex);
            //===============================================
            double totalEquity = 0.0;

            totalIndexInc = 0;
            totalIndexDec = 0;

            int cnt = mContext.mShareManager.getVnindexCnt();

            double[] indexOfShares   = new double[cnt];
            double[] changedPercents = new double[cnt];
            float[]  prices          = new float[cnt];

            stCandle _c0 = new stCandle();
            stCandle _c1 = new stCandle();

            //  tinh total equity
            for (int i = 0; i < cnt; i++)
            {
                Share share = mContext.mShareManager.getVnindexShareAt(i);
                if (share.getShareID() == 223)
                {
                    indexOfShares[i] = 1;
                }
                indexOfShares[i] = 0;

                if (share.getMarketID() == index.getMarketID() && !share.isIndex())
                {
                    stCompanyInfo inf = mContext.mShareManager.getCompanyInfo(share.getShareID());
                    if (inf != null)
                    {
                        share.loadShareFromCommonData(false);
                        share.appendTodayCandle2(); //  use last price if today is not trade

                        stCandle c0 = share.getCandleByDate(startDate, 0, _c0);
                        stCandle c1 = share.getCandleByDate(endDate, startDate, _c1);

                        if (c0 == null || c1 == null)
                        {
                            continue;
                        }
                        if (c0.close == 0 || c1.close == 0)
                        {
                            continue;
                        }

                        totalEquity += (inf.volume * c0.close);

                        double changedPercent = (c1.close - c0.close) / c0.close;
                        if (changedPercent < 0)
                        {
                            //changedPercent = changedPercent;
                        }
                        indexOfShares[i] = cIndex.close * (inf.volume * c0.close) * changedPercent;

                        if (changedPercent > 0)
                        {
                            totalIndexInc += changedPercent;
                        }
                        else
                        {
                            totalIndexDec += changedPercent;
                        }

                        //---------
                        changedPercents[i] = (c1.close - c0.close) * 100 / c0.close;
                        prices[i]          = c1.close;
                    }
                }
            }

            //  cleanup
            vChangeDec.removeAllElements();
            vChangeInc.removeAllElements();
            //====================================
            totalIndexInc /= totalEquity;
            totalIndexDec /= totalEquity;

            totalIndexInc = 0;
            totalIndexDec = 0;

            for (int i = 0; i < cnt; i++)
            {
                Share share = mContext.mShareManager.getVnindexShareAt(i);

                //if (strcmp(share.mCode, "VIC") == 0){
                //            /i = i;
                //}

                double indexChanged = indexOfShares[i] / totalEquity;

                ChangeIndexItem item;
                if (indexChanged > 0)
                {
                    item = new ChangeIndexItem();
                    item.modifiedValue = (float)indexChanged;

                    totalIndexInc += item.modifiedValue;

                    item.shareID = share.getShareID();

                    vChangeInc.addElement(item);
                }
                else
                {
                    item = new ChangeIndexItem();
                    item.modifiedValue = (float)(-indexChanged);

                    totalIndexDec += item.modifiedValue;

                    item.shareID = share.getShareID();

                    vChangeDec.addElement(item);
                }
                item.price           = prices[i];
                item.modifiedPercent = (float)changedPercents[i];
            }

            //  end of calc
            sortChanges(vChangeInc);
            sortChanges(vChangeDec);

            while (vChangeInc.size() > 200)
            {
                vChangeInc.removeElementAt(vChangeInc.size() - 1);
            }
            while (vChangeDec.size() > 200)
            {
                vChangeDec.removeElementAt(vChangeDec.size() - 1);
            }

            //---------------
            //  ChangeIndexItem
            xVector[] vv = { vChangeInc, vChangeDec };
            for (int j = 0; j < 2; j++)
            {
                for (int i = 0; i < vv[j].size(); i++)
                {
                    ChangeIndexItem item  = (ChangeIndexItem)vv[j].elementAt(i);
                    Share           share = mContext.mShareManager.getShare(item.shareID);
                    if (share != null && share.getCode() != null)
                    {
                        group.addCode(share.getCode());
                    }
                }
            }

            invalidate();
        }