我已将我的用户名和密码放在 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
什么情况会导致此消息,我如何分析我的案例中的哪种情况是原因?
我正在使用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) I am a newbie with a quick fix but trust me, I have searched all the forums thoroughly and haven't found the solution to this scenario. I am using quick fix 1.6 libs. I have a FIX message which has got a repeating group. When I send this message using sendToTarget() method, the message is forwarded to the FIX server without issues, but the fields get reordered due to which exchange rejects it. Reading through the posts, I got to …
当我通过 initiator.start() 方法使用 SSL 将启动器连接到 FIX 服务器时,它会启动一个单独的线程来建立连接。现在,当此失败(例如由于 SSL 握手问题或服务器连接问题)时,错误将被抛出到日志中,但似乎无法被捕获在代码中并进行管理。当错误发生时如何检测/捕获?
Disconnecting: Socket exception (<server ip>): java.net.SocketException: Connection reset.
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪的底部是线程池执行器。
我在 start 方法周围有一个 try-catch,但是当异常发生在另一个线程中时,它无法捕获它。
我正在尝试处理FIX Reject(MsgType 35=3),但我不清楚如何检索FIX Reject消息引用的消息.
FIX拒绝MsgSeqNum在RefSeqNum字段(标记45)中引用被拒绝的消息.但是,我不知道如何通过序列号获取被拒绝的消息.我认为它应该是可能的,因为FIX引擎可以重新发送序列号范围内的消息(响应重发请求),所以如果引擎可以这样做,那么我应该这样做.
问题:如何在RefSeqNum字段中获取拒绝消息引用的消息?
我使用的是最新的quickfix版本1.6.0.我已经有了针对1.5.3编写的代码,而我正在尝试将其升级到1.6.0
我遇到的问题是,当我使用crack(msg,sessionID)方法时,它会抛出quickfix.Message cannot be cast to quickfix.fix50sp2.Message错误.我从verifix发送了正确的FIX50SP2 MarketDataSnapshotFullRefresh消息.该例外的摘录如下
java.lang.ClassCastException: quickfix.Message cannot be cast to quickfix.fix50sp2.Message
at quickfix.fix50sp2.MessageCracker.crack(MessageCracker.java:1555)
at com.****.fixserver.FixMessageListener.fromApp(FixMessageListener.java:162)
at quickfix.Session.fromCallback(Session.java:1731)
at quickfix.Session.verify(Session.java:1682)
如何将传入的消息破解为正确的SP2消息?
有一个crack50()方法,但这需要一个SP2消息,该消息在fromApp回调中不可用.
我想生成一个包含 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)
即使我创建了一个直接字符串消息并通过我的数据字典对其进行验证,也会发生这种情况。
我该怎么做才能使组按我想要的顺序排列?!谢谢
订单请求在 FIX 服务器上发送,并且标签的顺序已更改。
如果我想要序列的输出,因为它是由我安排的(而不是被服务器修改)。
public void send50(Order order) {
quickfix.fix50sp1.NewOrderSingle newOrderSingle = new quickfix.fix50sp1.NewOrderSingle(new ClOrdID(order.getID()),
sideToFIXSide(order.getSide()), new TransactTime(), typeToFIXType(order.getType()));
newOrderSingle.set(new OrderQty(order.getQuantity()));
newOrderSingle.set(new Symbol(order.getSymbol()));
newOrderSingle.set(new Price(order.getSharePrice()));
newOrderSingle.set(new Account("13501100"));
newOrderSingle.setField(new NoPartyIDs(1));
newOrderSingle.setField(new PartyIDSource('C'));
newOrderSingle.setField(new PartyRole(12));
newOrderSingle.setField(new PartyID("13501100"));**
Run Code Online (Sandbox Code Playgroud)
这是用户给服务器的顺序,服务器将其安排为:
8=FIXT.1.1|9=173|35=D|34=5|49=135|52=20200131-05:35:12.956|56=PSE|1=13501100|11=1580448912440|38=10=10 1|44=10.78|54=1|55=AGI|59=0|60=20200131-13:35:12.956|447=C|448=13501100|452=12|453=1|10=213|
那么,如果我希望输出与发送的顺序相同,该怎么办?
QuickFIX/J包含用于创建四个数据库表的SQL脚本:
sessionsmessagesmessages_logevent_log我找不到任何描述每个表的目的的文档.
它们是什么,它们何时被写入,它们中的任何一个都无限增长等等......