我是FIX世界的新手。我正在编写一个用Java处理FIX消息的应用程序,为此我正在使用QuickFix / J.我从主页(http://quickfixengine.org/)下载了DataDictionary。我使用的是4.4版本
在xml文件中存在组和组件。但是组件可以再次包含组。
它们之间的确切差异是什么?
感谢您的帮助!!
答案 0 :(得分:15)
组件不是真的......事情。它们就像FIX DataDictionary中的宏一样。许多消息需要相同的字段集,因此DD不是在每条消息中指定相同的字段,而是定义其他消息可以包含的组件。
另一方面,一个集团是一个非常真实的事情。它是一个重复的字段序列,在消息中出现0次或更多次。QuickFIX的编程接口在很大程度上忽略了组件作为一个概念。您无法从消息中提取组件,因为组件不是QF中的概念;你只需像任何其他字段一样提取字段。
一个假设的例子:以下两个消息定义完全相同。
1:使用组件
<message name="Automobile" msgtype="X" msgcat="app">
<field name="Wheel" required="Y"/>
<field name="Bumper" required="Y"/>
<component name="Dashboard" required="Y"/>
</message>
<component name="Dashboard">
<field name="Radio" required="Y"/>
<field name="AirConditioner" required="Y"/>
<field name="Heater" required="Y"/>
</component>
2:没有组件
<message name="Automobile" msgtype="X" msgcat="app">
<field name="Wheel" required="Y"/>
<field name="Bumper" required="Y"/>
<field name="Radio" required="Y"/>
<field name="AirConditioner" required="Y"/>
<field name="Heater" required="Y"/>
</message>
请参阅?组件几乎只是一个宏。
无论哪种方式定义,你最终都会调用msg.GetHeater()
(或其他)。
答案 1 :(得分:3)
组件块是一组相关的数据字段,它们组合在一起,并在它们所使用的消息中由组件块名称引用。有时它们被称为“组”。
组件块可以定义,然后在不同的消息类型中重用。有时,重复组仅用于一个特定的消息,然后它不被定义为组件块。
将组件块视为字段的可重用定义。这样的组件块可以包含或不包含重复的字段组。
例如,使用许多不同消息类型中使用的Parties component block(请参阅该页面上的“用于”)。易于定义一次并用于许多消息定义。
答案 2 :(得分:1)
由于接受的答案缺少此信息,因此仅添加一些信息(可能是由于该信息已经存在大约五年了)。
在QuickFIX / J中,您实际上可以获取和设置组件。因此,例如,您可以简单地将Instrument
组件从一条消息复制到另一条消息。
@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('\001', '|'));
System.out.println("ER: " + executionReport.toString().replace('\001', '|'));
}
输出:
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|
也许在其他QuickFIX语言版本中也是可能的。