我目前遇到了开源QuickFix引擎的一个奇怪问题.我们的经纪人正在发送一些MsgType = 8(执行报告)的测试交易,我们的QuickFix引擎立即回复一个例外,说"不支持的消息类型".经纪人消息中的所有标签似乎都是合法的.
为什么会发生这种情况?如何解决问题?
当quickfix引发在重新连接startTime(在配置中定义),它删除了与序列号文件,但不设置ResetSeqNumFlag到Y,服务器与回复Logout文本消息"序列号味精低......"有没有一种方法来设置ResetSeqNumFlag = Y只为这种行为?我不想在每次登录时重置序列.
我正在使用Quickfix/J接收消息,但发生了"已发送测试请求测试".日志文件(FIX.4.2-AB.event.log)显示:
23:19:05: Sent test request TEST
23:19:32: Disconnecting: Timed out waiting for heartbeat
23:19:33: Initiated logon request
23:19:44: Disconnecting: Timed out waiting for logon response
23:19:45: Initiated logon request
23:19:56: Disconnecting: Timed out waiting for logon response ...
Run Code Online (Sandbox Code Playgroud)
但我在另一个日志文件(FIX.4.2-AB.message.log)中找到了一些东西:
8=FIX.4.2|9=68|35=1|34=250|49=A|52=20140224-23:19:05.909|56=B|112=TEST|10=106
8=FIX.4.2|9=74|35=0|49=B|56=A|43=N|34=1320|52=20140224-23:19:23.381|112=TEST|10=130
Run Code Online (Sandbox Code Playgroud)
这显然表明对方B已经将心跳发回给我们.
并且FIX.4.2-AB.messages.log文件仍在增长!!!!!!!!!!! 该文件继续接收消息,但Quickfix/J进程无(onMessage()方法中没有任何反应)!!!!
请帮忙告诉我为什么会这样?收到心跳后,为什么连接仍然丢失并且日志正在断开连接?
由于这个问题尚未解决.这是更新:
我的配置:
[default]
FileStorePath=/target/data/fixapplication
ConnectionType=initiator
SenderCompID=A
TargetCompID=B
SocketConnectHost=xxx.xxx.xxx.xx
StartTime=00:00:00
EndTime=00:00:00
HeartBtInt=30
ReconnectInterval=5
FileLogPath=logs/fix/
[session]
BeginString=FIX.4.2
SocketConnectPort=xxx
ValidateFieldsOutOfOrder=N
ResetOnLogon=Y
Run Code Online (Sandbox Code Playgroud)
这是代码:
@Override
public void fromAdmin(Message message, SessionID sessionID) throws FieldNotFound,
IncorrectDataFormat, IncorrectTagValue, RejectLogon {
if (adminLog.isInfoEnabled())
adminLog.info("Inside …Run Code Online (Sandbox Code Playgroud) 在QuickFix中,如何使用Python从标签号中获取标签的名称?例如,对于OrdStatus,如何将标记号5转换为字符串"OrdStatus_CANCELED"?
我正在构建一个重播日志的工具.手动解析日志很烦人,所以我想知道是否有办法简单地从日志中加载消息.
另外,我并不反对仅使用第三方重播工具(如果存在).
我有一个 FIX 日志文件。我在行上迭代,将每个字符串放入
Message m = new Message(str, false)
Run Code Online (Sandbox Code Playgroud)
因为出于某种原因,文件验证失败(即使是第一行)。现在,我看到它是 35=X 类型,268=4(即 NoMDEntries=4,所以我应该在消息中有 4 个组)
但是,在调试显示中我没有看到任何组。m.base._groups 的计数为 0。
有问题的字符串是:
1128=9 | 9=363 | 35=X | 49=CME | 34=3151 | 52=20121216223556363 | 75=20121217 | 268=4 | 279=0 | 22=8 | 48=43585 | 83=902 | 107=6EH3 | 269=4 | 270=13186 | 273=223556000 | 286=5 | 279=0 | 22=8 | 48=43585 | 83=903 | 107=6EH3 | 269=E | 270=13186 | 271=9 | 273=223556000 | 279=0 | 22=8 | 48=43585 | 83=904 | 107=6EH3 …Run Code Online (Sandbox Code Playgroud) 我正在努力创建一个OrderMassStatusRequest使用Python和Quickfix. 在构建消息时,使用 时似乎需要 Instrument 类MassStatusReqType(3)。
从这里的文档http://fixwiki.org/fixwiki/OrderMassStatusRequest/FIX.4.4-5.0SP1 看来我应该能够简单地创建一个仪器组,如下面的代码所示。
遗憾的是,这不起作用。我注释掉的任何选项也没有。
非常感谢任何使此方法发挥作用的帮助!
提前致谢
def mass_status_request(self, product):
#
# product is a class containing attributes code, instrument_type and exchange
#
mass_status_request = quickfix44.OrderMassStatusRequest()
mass_status_request.setField(quickfix.MassStatusReqID("123"))
mass_status_request.setField(quickfix.TargetSubID(product.instrument_type))
mass_status_request.setField(quickfix.MassStatusReqType(3))
# Create instrument group
#mass_status_instruments = quickfix44.OrderMassStatusRequest().FieldMap()
mass_status_instruments = quickfix44.Instrument()
#mass_status_instruments = quickfix44.component().Instrument()
#mass_status_instruments = quickfix44.Component().Instrument()
#mass_status_instruments = quickfix44.OrderMassStatusRequest.Instrument()
#mass_status_instruments = quickfix44.OrderMassStatusRequest().Instrument()
#mass_status_instruments = quickfix44.Instrmt()
#mass_status_instruments = quickfix44.Fieldmap().Group()
# Done creating instrument group
mass_status_instruments.setField(quickfix.Symbol(product.code))
mass_status_instruments.setField(quickfix.SecurityExchange(product.exchange))
mass_status_request.addGroup(mass_status_instruments)
print "Sending Mass …Run Code Online (Sandbox Code Playgroud) 我想生成一个包含 2 个组NoMDEntryTypes(267) 和NoRelatedSym(146)的市场数据请求,如下所示:
267=2 269=0 269=1 146=1 55=EUR/USD
Run Code Online (Sandbox Code Playgroud)
但是当我以某种方式发送消息时,quickfixj 或我的数据字典将组的顺序交换为以下内容:
146=1 55=EUR/USD 267=2 269=0 269=1
Run Code Online (Sandbox Code Playgroud)
即使我创建了一个直接字符串消息并通过我的数据字典对其进行验证,也会发生这种情况。
我该怎么做才能使组按我想要的顺序排列?!谢谢
这个问题与没有正确回答的问题几乎相同:Reading Repeating Groups in Custom Messages using Python Quickfix
Windows 上的 python 2.7.15、quickfix 1.15.1、FIX 4.2
我有一个来自交易平台提供商的自定义数据字典,其中在执行报告中具有自定义字段和组。完整的 XML 可在此处获取:http ://library.tradingtechnologies.com/tt-fix/System_Overview.html 。特别是该组定义如下:
<group name='NoSecurityAltID' required='N'>
<field name='SecurityAltID' required='N' />
<field name='SecurityAltIDSource' required='N' />
Run Code Online (Sandbox Code Playgroud)
我已指定自定义数据字典并按其他地方指定的方式设置 UseDataDictionary=Y,尽管我认为这是默认值。
group= quickfix42.ExecutionReport.NoSecurityAltID()
Run Code Online (Sandbox Code Playgroud)
返回属性错误。
奇怪的是,NoContraBrokers 可作为属性使用,但它不是自定义词典中的组之一,而是在标准 4.2 词典中。因此,我认为存在一些错误,并且它没有解析自定义字典,但我已经验证它是。
我是quickfix(和python)的新手,所以可能犯了一个基本错误。但这已经让我坚持了很长一段时间,所以我真的很感激一些指导。
更新:
所以我只能通过这种方法访问标准FIX 4.2组。我现在创建了一个群组:
group = quickfix.Group(454, 455)
Run Code Online (Sandbox Code Playgroud)
其中 454=NoSecurityAltID 且 455=SecurityAltID。
现在我正在努力读取我想要的特定 SecurityAltIDSource 的字符串。这是该小组的概况:
我想读取“别名”和“名称”,但只能通过以下方式访问 SecurityAltIDSource 的 TagNumber
message.getGroup(1, group)
group.getField(456)
Run Code Online (Sandbox Code Playgroud)
如何访问我想要的字段的字符串?
谢谢
更新2:
这是一个简单的错误(尽管不是很快就能解决的)。我能够通过以下方式访问我想要的领域:
group.getField(455)
Run Code Online (Sandbox Code Playgroud)
我担心使用字段整数不如其他方法那么强大。有没有更好的方法来做到这一点(除了重新编译引擎,这超出了我的能力)?
我在使用 Visual Studio Code 时遇到了一个小问题,我找不到更改 FIX 工具提示语言的位置(请检查附加的屏幕截图),我讨厌在程序中使用波兰语,尤其是与英语 UI 混合时。我在网上找不到任何解决方案。
配置显示语言(CTRL+Shift+P 后)设置为
{
// Defines VS Code's display language.
// See https://go.microsoft.com/fwlink/?LinkId=761051 for a list of supported languages.
"locale":"en" // Changes will not take effect until VS Code has been restarted.
Run Code Online (Sandbox Code Playgroud)
有什么建议么?