使用最新Quickfix时,如何正确设置TradeCaptureReport的NoSides和Side?
问题描述
使用最新版Quickfix模拟发送TradeCaptureReport时,设置必填组件NoSides和Side取值时触发报错:
......22458=Incorrect NumInGroup count for repeating group, field=....
现有相关方案及库内示例均基于4.4版本,不适用于当前场景。当前代码实现如下:
TradeCaptureReport tradeCaptureReport = new TradeCaptureReport(); Instrument instrument = new Instrument(); instrument.set(new Symbol("XXX"));//55 instrument.set(new SecurityID("XXXXXX")); //48 TrdCapRptSideGrp trdCapRptSideGrp =new TrdCapRptSideGrp(); // Create and add the NoSides group with the individual sides of the trade NoSides noSides = new NoSides(); noSides.setValue(NoSides.ONE_SIDE); trdCapRptSideGrp.set(noSides); trdCapRptSideGrp.setField(new Side(Side.BUY)); tradeCaptureReport.set(new LastPx(123456)); tradeCaptureReport.set(new LastQty(1234)); tradeCaptureReport.set(new SettlDate("20231018")); tradeCaptureReport.set(instrument); tradeCaptureReport.set(trdCapRptSideGrp);
解决方案
最新版Quickfix中,TrdCapRptSideGrp作为重复组,不能直接通过setField设置Side字段,需通过添加组实例的方式处理。修正后的代码如下:
TradeCaptureReport tradeCaptureReport = new TradeCaptureReport(); Instrument instrument = new Instrument(); instrument.set(new Symbol("XXX"));//55 instrument.set(new SecurityID("XXXXXX")); //48 // 初始化TrdCapRptSideGrp组件 TrdCapRptSideGrp trdCapRptSideGrp = new TrdCapRptSideGrp(); // 创建NoSides组实例并注入Side字段 NoSides noSidesGroup = new NoSides(); noSidesGroup.set(new Side(Side.BUY)); // 将组实例添加到TrdCapRptSideGrp中 trdCapRptSideGrp.addGroup(noSidesGroup); tradeCaptureReport.set(new LastPx(123456)); tradeCaptureReport.set(new LastQty(1234)); tradeCaptureReport.set(new SettlDate("20231018")); tradeCaptureReport.set(instrument); tradeCaptureReport.set(trdCapRptSideGrp);
关键修正点:
- 无需手动设置
NoSides数值,Quickfix会自动根据添加的组数量计算该字段值,避免手动计数错误 - 使用
addGroup()方法将包含Side字段的NoSides组实例添加到TrdCapRptSideGrp,匹配新版库对重复组的处理逻辑
内容的提问来源于stack exchange,提问作者Belgacem Gmiden
相关产品推荐
相关产品推荐

