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)); } } }
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(); }