Exemplo n.º 1
0
  @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); // 发送消息
      }
    }
  }