public double getTotalFloating() { synchronized (PosListLock) { if (posList == null) return 0; double totalFloating = 0.0; for (PosData posData : posList) { double floating; if (posData.isLongOrShort()) { floating = DataHolder.getInstance().getFloating(posData.getInstrumentID(), true); } else { floating = DataHolder.getInstance().getFloating(posData.getInstrumentID(), false); } totalFloating += floating; } return totalFloating; } }
public void deletePosById(String instrumentId) { synchronized (PosListLock) { if (posList != null) { // for (PosData posData : posList) { // if (posData.getInstrumentID().equals(instrumentId)) { // posList.remove(posData); // Log.d("push", "deleted" + posData.getInstrumentID()); // } // } for (Iterator<PosData> iterator = posList.iterator(); iterator.hasNext(); ) { PosData nextPos = iterator.next(); if (nextPos.getInstrumentID().equals(instrumentId)) { // Remove the current element from the iterator and the list. iterator.remove(); } } } } }
@Nullable public PosData getPosData(boolean isLong, String instrumentId) { synchronized (PosListLock) { for (PosData posData : posList) { // System.out.println("pos data:" + posData.getInstrumentID() + "==" // + instrumentId); if (posData.getInstrumentID().equals(instrumentId)) { // System.out.println("pos data: match"); if (posData.isLongOrShort() == isLong) { return posData; } } else { // System.out.println(posData.getInstrumentID() + " not match " + instrumentId); } } return null; } }
public double getFloating(String instrumentId, boolean isLong) { InsInfo mInfo = getInsInfoMap().get(instrumentId); if (mInfo == null) return 0.0; StockData lastData = mInfo.getLastData(); if (lastData == null) return 0.0; PosData longPos = getPosData(true, instrumentId); PosData shortPos = getPosData(false, instrumentId); if (isLong) { if (longPos == null) return 0.0; double longFloating = (lastData.getLastPrice() - longPos.getOpenPrice()) * longPos.getVolume() * getInsInfoMap().get(instrumentId).getMultiplier(); return longFloating; } else { if (shortPos == null) return 0.0; double shortFloating = (shortPos.getOpenPrice() - lastData.getLastPrice()) * shortPos.getVolume() * getInsInfoMap().get(instrumentId).getMultiplier(); return shortFloating; } }
public void insertPosData(@NotNull PosData mPosData) { synchronized (PosListLock) { if (posList == null) return; boolean isFound = false; for (PosData posData : posList) { if (posData.getInstrumentID().equals(mPosData.getInstrumentID())) { if (posData.isLongOrShort() == mPosData.isLongOrShort()) { posData.setOpenPrice( (posData.getOpenPrice() * posData.getVolume() + mPosData.getOpenPrice() * mPosData.getVolume()) / (posData.getVolume() + mPosData.getVolume())); posData.setVolume(posData.getVolume() + mPosData.getVolume()); isFound = true; Log.d("push", "found " + mPosData.getInstrumentID()); break; } } } if (!isFound) { Log.d("push", "added " + mPosData.getInstrumentID()); posList.add(mPosData); } } }