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); // 发送消息
      }
    }
  }
Exemplo n.º 2
0
  @Override
  public void OnRspUserLogin(
      CThostFtdcRspUserLoginField pRspUserLogin,
      CThostFtdcRspInfoField pRspInfo,
      int nRequestID,
      boolean bIsLast) {
    // 行情登录成功后,就开始请求订阅行情
    //        ArrayList<String> instrumentArray = myhandler.instrumentArray;
    //        int nCount = instrumentArray.size();
    //        String[] ppInstrumentID = new String[nCount];
    //        Iterator iter = instrumentArray.iterator();
    //        int index = 0;
    //        while (iter.hasNext()) {
    //            ppInstrumentID[index] = iter.next().toString();
    //            index++;
    //        }
    //
    //        mdApi.SubscribeMarketData(ppInstrumentID, nCount);

    //        HashMap<String,Integer> instrumentArray = myhandler.getInstrumentIndex();
    //        int nCount = instrumentArray.size();
    //        String[] ppInstrumentID = new String[nCount];
    //        Iterator iter = instrumentArray.entrySet().iterator();
    //        int index = 0;
    //        while (iter.hasNext()) {
    //            Map.Entry entry = (Map.Entry) iter.next();
    //            ppInstrumentID[index] = entry.getKey().toString();
    //            index++;
    //        }
    //
    //        mdApi.SubscribeMarketData(ppInstrumentID, nCount);

    // 把每一个合约单独请求
    HashMap<String, Integer> instrumentMap = myhandler.getInstrumentMap();
    String[] ppInstrumentID = new String[1];
    Iterator iter = instrumentMap.entrySet().iterator();
    while (iter.hasNext()) {
      Map.Entry entry = (Map.Entry) iter.next();
      ppInstrumentID[0] = entry.getKey().toString();
      mdApi.SubscribeMarketData(ppInstrumentID, 1);
    }
  }