@Override public void OnRtnDepthMarketData(CThostFtdcDepthMarketDataField pDepthMarketData) { // 直接在这里赋值,省去跳转的过程,优化 DepthMarketDataField md_row; int md_index = myhandler.getInstrumentMap().get(pDepthMarketData.getInstrumentID()); md_row = (DepthMarketDataField) MainActivity.mdList.get(md_index); md_row.setLastPrice(pDepthMarketData.getLastPrice()); md_row.setUp_down(pDepthMarketData.getLastPrice() - pDepthMarketData.getPreSettlementPrice()); md_row.setOpenInterest(pDepthMarketData.getOpenInterest()); md_row.setAskPrice1(pDepthMarketData.getAskPrice1()); md_row.setAskVolume1(pDepthMarketData.getAskVolume1()); md_row.setBidPrice1(pDepthMarketData.getBidPrice1()); md_row.setBidVolume1(pDepthMarketData.getBidVolume1()); md_row.setUpperLimitPrice(pDepthMarketData.getUpperLimitPrice()); Message msg = myhandler.obtainMessage(myhandler.getMD_SUB(), 1, 1, 0); myhandler.sendMessage(msg); // 发送消息 if (TraderSpi.positionIndexMap.size() != 0) { String longPosition = (md_row.getInstrumentID() + "0").toString(); String shortPosition = (md_row.getInstrumentID() + "1").toString(); // 多头持仓合约的行情来了 if (TraderSpi.positionIndexMap.get(longPosition) != null) { int positioIndex = TraderSpi.positionIndexMap.get(longPosition); PositionDetailField positionDetail = TraderSpi.positionsDetails_show.get(positioIndex); InstrumentField instrumentField = TraderSpi.pInstrumentMap.get(md_row.getInstrumentID()); double positionProfitByTrade = (md_row.getLastPrice() - positionDetail.getOpenPrice()) * positionDetail.getVolume() * instrumentField.getVolumeMultiple(); positionDetail.setPositionProfitByTrade(positionProfitByTrade); Message msg1 = myhandler.obtainMessage(myhandler.getTRADE_UPDATE_POSITION_BY_MD(), 1, 1, 0); myhandler.sendMessage(msg1); // 发送消息 } // 空头持仓合约的行情来了 if (TraderSpi.positionIndexMap.get(shortPosition) != null) { int positioIndex_short = TraderSpi.positionIndexMap.get(shortPosition); PositionDetailField positionDetail_short = TraderSpi.positionsDetails_show.get(positioIndex_short); InstrumentField instrumentField_short = TraderSpi.pInstrumentMap.get(md_row.getInstrumentID()); double positionProfitByTrade = (positionDetail_short.getOpenPrice() - md_row.getLastPrice()) * positionDetail_short.getVolume() * instrumentField_short.getVolumeMultiple(); positionDetail_short.setPositionProfitByTrade(positionProfitByTrade); Message msg2 = myhandler.obtainMessage(myhandler.getTRADE_UPDATE_POSITION_BY_MD(), 1, 1, 0); myhandler.sendMessage(msg2); // 发送消息 } } }
@Override public void OnRspError(CThostFtdcRspInfoField pRspInfo, int nRequestID, boolean bIsLast) { Message msg = myhandler.obtainMessage(myhandler.getMD_RSP_ERROR(), 1, 1, "行情处理有误\n"); myhandler.sendMessage(msg); // 发送消息 }
@Override public void OnFrontDisconnected(int nReason) { Message msg = myhandler.obtainMessage(myhandler.getMD_FRONT_CONNFAILD(), 1, 1, nReason); myhandler.sendMessage(msg); // 发送消息 }