QuickFIX/J 组与组件
QuickFIX/J Group vs Component
有什么区别,正确的代码或最好的代码?
两个版本的代码都可以正常工作,但我认为这些组件可能有一些我无法理解的有用的东西。
第一个:
MarketDataRequest m = new MarketDataRequest();
quickfix.fix50sp2.component.MDReqGrp cmp = new quickfix.fix50sp2.component.MDReqGrp();
quickfix.fix50sp2.MarketDataRequest.NoMDEntryTypes group = new quickfix.fix50sp2.MarketDataRequest.NoMDEntryTypes();
cmp.addGroup(group);
m.set(cmp);
第二个:
MarketDataRequest m = new MarketDataRequest();
quickfix.fix50sp2.MarketDataRequest.NoMDEntryTypes group = new quickfix.fix50sp2.MarketDataRequest.NoMDEntryTypes();
m.addGroup(group)
对于你给出的例子来说没有太大区别。您只需要再进行一次间接操作即可将组件添加到消息中,而不是直接添加重复组。
但是,有些组件包含不止一个重复组。以 InstrmtMDReqGrp 为例,其中包含一些子组件和重复组。
使用组件优于单个 fields/groups 的一个优势体现在想要复制字段时。然后,您可以分别使用组件的方法 copyFrom(FieldMap fields)
或 copyTo(FieldMap fields)
。这些方法将一次性复制组件的所有字段和组。
示例:
@Test
public void testComponent() throws Exception {
final Instrument instrument = new Instrument();
instrument.set(new Symbol("DELL"));
instrument.set(new CountryOfIssue("USA"));
instrument.set(new SecurityType(SecurityType.COMMON_STOCK));
final quickfix.fix44.NewOrderSingle newOrderSingle = new quickfix.fix44.NewOrderSingle();
newOrderSingle.set(instrument);
final quickfix.fix44.ExecutionReport executionReport = new quickfix.fix44.ExecutionReport();
executionReport.setComponent(newOrderSingle.getInstrument());
System.out.println("NOS: " + newOrderSingle.toString().replace('[=10=]1', '|'));
System.out.println("ER: " + executionReport.toString().replace('[=10=]1', '|'));
}
输出:
NOS: 8=FIX.4.4|9=28|35=D|55=DELL|167=CS|470=USA|10=233|
ER: 8=FIX.4.4|9=28|35=8|55=DELL|167=CS|470=USA|10=221|
有什么区别,正确的代码或最好的代码?
两个版本的代码都可以正常工作,但我认为这些组件可能有一些我无法理解的有用的东西。
第一个:
MarketDataRequest m = new MarketDataRequest();
quickfix.fix50sp2.component.MDReqGrp cmp = new quickfix.fix50sp2.component.MDReqGrp();
quickfix.fix50sp2.MarketDataRequest.NoMDEntryTypes group = new quickfix.fix50sp2.MarketDataRequest.NoMDEntryTypes();
cmp.addGroup(group);
m.set(cmp);
第二个:
MarketDataRequest m = new MarketDataRequest();
quickfix.fix50sp2.MarketDataRequest.NoMDEntryTypes group = new quickfix.fix50sp2.MarketDataRequest.NoMDEntryTypes();
m.addGroup(group)
对于你给出的例子来说没有太大区别。您只需要再进行一次间接操作即可将组件添加到消息中,而不是直接添加重复组。
但是,有些组件包含不止一个重复组。以 InstrmtMDReqGrp 为例,其中包含一些子组件和重复组。
使用组件优于单个 fields/groups 的一个优势体现在想要复制字段时。然后,您可以分别使用组件的方法 copyFrom(FieldMap fields)
或 copyTo(FieldMap fields)
。这些方法将一次性复制组件的所有字段和组。
示例:
@Test
public void testComponent() throws Exception {
final Instrument instrument = new Instrument();
instrument.set(new Symbol("DELL"));
instrument.set(new CountryOfIssue("USA"));
instrument.set(new SecurityType(SecurityType.COMMON_STOCK));
final quickfix.fix44.NewOrderSingle newOrderSingle = new quickfix.fix44.NewOrderSingle();
newOrderSingle.set(instrument);
final quickfix.fix44.ExecutionReport executionReport = new quickfix.fix44.ExecutionReport();
executionReport.setComponent(newOrderSingle.getInstrument());
System.out.println("NOS: " + newOrderSingle.toString().replace('[=10=]1', '|'));
System.out.println("ER: " + executionReport.toString().replace('[=10=]1', '|'));
}
输出:
NOS: 8=FIX.4.4|9=28|35=D|55=DELL|167=CS|470=USA|10=233|
ER: 8=FIX.4.4|9=28|35=8|55=DELL|167=CS|470=USA|10=221|