我是FIX世界的新手.我正在编写一个用Java处理FIX消息的应用程序,为此我正在使用QuickFix/J. 我从主页(http://quickfixengine.org/)下载了DataDictionary .我使用的是4.4版
在xml文件中存在组和组件.但是组件可以再次包含组.
它们之间的确切差异是什么?
谢谢你的帮助!!
我需要一个简单的例子来说明如何初始化会话并发送一条FIX消息.我有这个初始代码:
SessionSettings settings = new SessionSettings( new FileInputStream("fix.cfg"));
Application application = new Application(settings);
MessageStoreFactory messageStoreFactory = new FileStoreFactory(settings);
LogFactory logFactory = new ScreenLogFactory( true, true, true);
MessageFactory messageFactory = new DefaultMessageFactory();
Initiator initiator = new SocketInitiator(application, messageStoreFactory, settings, logFactory, messageFactory);
initiator.start();
Run Code Online (Sandbox Code Playgroud) 我在最新版本(1.6.0)中使用QuickFIX/J,并且想要询问您是否知道任何Maven存储库要集成到我的pom文件中?我可以手动将jar文件添加到我的本地存储库,但也许有更好,更快的方式.
除了那篇文章之外,我在网上找不到任何可以很好回答该问题的内容。
有什么方法可以使用 QuickFIX/J 轮换日志文件吗?我正在使用 Log4j 轮换日志文件,但无法轮换 QuickFIX 消息。
多谢
假设我正在运行一个基于网络的交换并且有一个新客户注册。我为该客户提供了一个新的 CompID,现在我想将该 CompID 添加到我的接受方。我是否必须重新启动我的接受器或者可以动态完成吗?
必须提前就 CompID 达成一致,然后将其粘贴到某处的配置中,这似乎不太具有可扩展性。
我见过一些据说可以做到这一点的示例,但它们似乎只是通过将配置设置为*. 还有其他方法可以做到这一点吗?
我已经实现了一个使用QuickFIX/J(版本1.6.0)的Java程序.它从交易对手那里获得一条FIX消息(执行报告),其中包含重复的组NoPartyIDs(标签453),其中包含以下值
(Tag 453) NoPartyIDs = 4
(Tag 447) PartyIDSource = D
(Tag 448) Party ID = XXX
(Tag 452) PartyRole = 1
(Tag 447) PartyIDSource = D
(Tag 448) Party ID = XXX
(Tag 452) PartyRole = 66
(Tag 447) PartyIDSource = D
(Tag 448) Party ID = XXX
(Tag 452) PartyRole = 55
(Tag 802) NoPartySubIDs = 1
(Tag 447) PartyIDSource = D
(Tag 448) Party ID = XXX
(Tag 452) PartyRole = 7
Run Code Online (Sandbox Code Playgroud)
消息的这一部分的屏幕截图:

我的程序会自动发送拒绝消息
(Tag 58) Text …Run Code Online (Sandbox Code Playgroud) 我正在编写一个使用QuickFIX/J作为FIX框架的应用程序.我的对手向我ExecutionReport发送了FIX版本4.4 的消息但是只有一些字段(Parties组件)是版本5.0
现在我试图实现我可以阅读这个组件.
这个
@Override
public void onMessage(quickfix.fix44.ExecutionReport message, SessionID sessionID)
throws FieldNotFound, UnsupportedMessageType, IncorrectTagValue {
quickfix.fix50.component.Parties parties = new Parties();
message.get(parties);
// ...
}
Run Code Online (Sandbox Code Playgroud)
不起作用!消息来自版本4.4,这就是为什么message.get(...)只需要quickfix.fix44.component.Parties一个版本5.0而不是版本5.0
如果我试试这个
@Override
public void onMessage(quickfix.fix50.ExecutionReport message, SessionID sessionID)
throws FieldNotFound, UnsupportedMessageType, IncorrectTagValue {
// ...
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Exception in thread "pool-2-thread-1" java.lang.VerifyError: Bad type on operand stack
Exception Details:
Location:
quickfix/fix44/ExecutionReport.get(Lquickfix/field/SettlType;)Lquickfix/field/SettlType; @2: invokevirtual
Reason:
Type 'quickfix/field/SettlType' (current frame, stack[1]) is not assignable to 'quickfix/CharField'
Current Frame: …Run Code Online (Sandbox Code Playgroud) 我有一个使用QuickFIX / J编写的与彭博服务器连接的应用程序。最近,彭博社向其服务器添加了CA证书验证,并且它们还提供了用于握手的其他CA证书文件。
我的应用程序使用SSL连接,并且在从Bloomberg端禁用CA证书验证时,应用程序成功连接到服务器并获取消息。启用CA验证时,握手失败。
以下是我尝试的步骤。
ImportKeyJava类添加证书和密钥。我将其更改为添加多个证书。如果需要,我可以发布Java类。在应用程序级别需要更改什么吗?组态?还是在Java密钥库级别有什么要做?
在下面添加连接时出现错误消息:
20160823-06:04:15,FIX.4.4:XXXX-> XXXX,错误>(正在断开连接:套接字异常(/XXXX.XXXX.XXX.XX:20237):javax.net.ssl.SSLHandshakeException:SSL握手失败。)成功注销sessionId:FIX.4.4:XXXX-> XXXX
任何帮助表示赞赏!
配置:
[default]
# Settings which apply to all the Sessions.
ConnectionType=initiator
LogonTimeout=86400
ResetOnLogon=Y
UseDataDictionary=Y
MaxLatency=240
#StartTime=00:00:00
#EndTime=00:00:00
#StartTime=02:30:00
#EndTime=12:30:00
StartTime=02:21:00
EndTime=12:21:00
HeartBtInt=30
ReconnectInterval=5
[session]
# Settings specifically for one session
BeginString=FIX.4.4
SocketConnectHost=xxx.xxx.xxx.xxx
SocketUseSSL=Y
SocketKeyStorePassword=importkey
CheckLatency=N
#SendResetSeqNumFlag=Y
# new setups
FileLogHeartbeats=Y
##----- CAPS Configuration ---------##
FileStorePath=/etc/bloomburg-live/msgs
FileLogPath=/etc/bloomburg-live/logs
DataDictionary=/etc/bloomburg-live/conf/FIX44.xml
SocketKeyStore=/root/.keystore
TargetCompID=BLPSTP
SocketConnectPort=xxxxx
SenderCompID=CAPSTP
# log configuration
FileIncludeMilliseconds=Y
FileIncludeTimeStampForMessages=Y
ScreenLogShowHeartBeats=Y
#Filter heartbeats from output (both incoming and …Run Code Online (Sandbox Code Playgroud) 我已将我的用户名和密码放在 FIX 配置文件中。所以我必须认为我应该能够从一些内部变量中获取用户名和密码,比如 session 变量或 SessionSetting 变量或 session.SessionDataDictionary 或其他一些变量。但是,我没有找到任何直接的解决方案来从内部变量中获取用户名和密码。
[SESSION]
BeginString=FIX.4.4
SenderCompID= xxxxx
Username= xxxx
Password= xxxx
Run Code Online (Sandbox Code Playgroud)
从逻辑上讲,这可能是非常可行的。但是,没有人建议这样做,或者我没有看到有人在谷歌上这样做。我从谷歌找到的唯一代码是这个。
String username = sessionSettings.getString(sessionId, "Username"); //only works for Java version of QuickFix
Run Code Online (Sandbox Code Playgroud)
然而,以上代码仅适用于 Java 版本的 QuickFix,并且此方法在 QuickFix 的 DotNet 版本(即 QuickFix/n)中不可用
getString(sessionId, "Username");
Run Code Online (Sandbox Code Playgroud)
我希望使用 QuickFix/n 为 FIX 4.4 实现类似的结果。如果有人熟悉 QuickFix,这可能是一项非常简单的任务。我将非常感谢您的提示或建议。我不介意你对 Java 或 C++ 版本有什么想法,因为它们都非常相似。我只需要知道这个用户名和密码存储在哪个变量中,以及如何使用 Csharp 代码获取它。
提前致谢。
我在Apache Camel 2.17.0 中使用QuickFIX/J版本 1.6.4并且我收到会话消息。这不是错误,但在我的情况下,它会导致无意的Logoff。Disconnecting: Encountered END_OF_STREAM
什么情况会导致此消息,我如何分析我的案例中的哪种情况是原因?