【发布时间】:2022-07-17 04:54:13
【问题描述】:
如何使用 QuickFIX/J 获取自定义数据字典的字段和组?
我收到在自定义 MarketDataSnapshotFullRefresh(W 型)FIX 消息中传输的市场数据。据我了解,我不能为此使用破解方法。我对 Java 和 QuickFIX/J 不太熟悉,但是当我使用 QuickFIX/n 和 Python 时,我可以像这样为字段和组定义类:
class CustomField(fix.StringField):
tag_number = *SomeTagNumber*
def __init__(self, data=None):
args = (self.tag_number,) if data is None else (self.tag_number, data)
super(CustomField, self).__init__(*args)
def getValue(self, message: object) -> str:
try:
if message.getField(self.tag_number):
return message.getField(self.tag_number)
except fix.FieldNotFound:
return None
else: raise
class CustomGroupField(fix.StringField):
tag_number = *SomeTagNumber*
def __init__(self, data=None):
args = (self.tag_number,) if data is None else (self.tag_number, data)
super(CustomGroupField, self).__init__(*args)
def getValue(self, message: object) -> str:
try:
if message.getField(self.tag_number):
return message.getField(self.tag_number)
except fix.FieldNotFound:
return None
else: raise
class XXXGroup(fix.Group):
def __init__(self):
order = fix.IntArray(4)
order[0] = No_XXX_UMD_Entries.tag_number # This is the NoGroup field
order[1] = XXX_UMD_Entry_ID.tag_number # This is the field in the repeating group
order[2] = CustomGroupField.tag_number
order[3] = 0
# fix.Group.__init__(self, order[0], order[1], order)
args = (order[0], order[1], order)
super(XXXGroup, self).__init__(*args)
def getValue(self, field: object) -> str:
try:
if group.getField(tag_number):
return group.getField(tag_number)
except fix.FieldNotFound:
return None
else: raise
然后我可以像这样在 fromApp(self, message, sessionID) 方法中获取值:
# Get value of the field
some_custom_field = CustomField().getValue(message)
# Get value in the group
group = XXXGroup()
for idx in range(1, no_entries+1):
message.getGroup(idx,group)
custom_gr_field = group.getValue(CustomGroupField)
如何使用 QuickFIX/J 在 Java 中实现相同的逻辑?或者也许有更好的方法来使用 Java 中的自定义数据字典?也许你可以参考一些例子?
【问题讨论】:
标签: java quickfix quickfixj quickfixn