标签: fix-protocol

使用 Java 的 MetaTrader 4 Fix 协议

我的机器上安装了 MT4 客户端,并且可以成功检索源。不过,我用java编写了一个程序,使用FIX协议来拉取数据。我想知道我的 java 程序如何提取我在 MT4 客户端上看到的数据。

java protocols fix-protocol metatrader4

5
推荐指数
1
解决办法
5621
查看次数

TCP 连接丢失时的预期行为是什么?

我查看了 FIX v4.2 规范,我不清楚当 TCP 连接在会话中间丢失时应该是什么预期行为。

更具体地说,假设当前的序列号是 100 并且此时 TCP 连接丢失,当任何一方尝试恢复会话时,它重新发送消息号 100,或者启动一个新的登录会话?

在描述 FIX 会话时,规范说一个会话有一个登录和一个注销,但可以跨越多个物理连接。这让我认为当 TCP 连接丢失时,恢复过程不应该以登录消息开始,但我对此并不乐观。

提前致谢!

quickfix fix-protocol

5
推荐指数
1
解决办法
4466
查看次数

如何使用 QuickFixJ 将字符串 FIX 消息转换为 FIX FIX50SP2 格式

需要快速帮助。我是 QuickFixJ 的新手。我的 txt 文件中有一条 FIX 消息。我需要将其转换为 FIX50SP2 格式。我附上代码片段。

String fixMsg = "1128=99=25535=X49=CME34=47134052=20100318-03:21:11.36475=20120904268=2279=122=848=336683=607400107=ESU2269=1270=140575271=152273=121014000336=2346=521023=1279=122=848=336683=607401107=ESU2269=1270=140600271=206273=121014000336=2346=681023=210=159";

System.out.println("FixMsg String:"+fixMsg);
Message FIXMessage = new Message();
DataDictionary dd = new DataDictionary("FIX50SP2.xml");
FIXMessage.fromString(fixMsg, dd, false);
System.out.println("FIXMessage Output:" + FIXMessage.toString()); // Print message after parsing
MsgType msgType = new MsgType();
System.out.println(FIXMessage.getField(msgType));
Run Code Online (Sandbox Code Playgroud)

这是输出:

FixMsg String:1128=99=15835=X49=CME34=47164052=2012090312102051175=20120904268=1279=122=848=336683=607745107=ESU2269=1270=140575271=123273=121020000336=2346=501023=110=205
FIXMessage Output:9=6135=X34=47164049=CME52=2012090312102051175=20120904268=110=117
quickfix.FieldNotFound: Field [35] was not found in message.
    at quickfix.FieldMap.getField(FieldMap.java:216)
    at quickfix.FieldMap.getFieldInternal(FieldMap.java:353)
    at quickfix.FieldMap.getField(FieldMap.java:349)
    at MainApp.main(MainApp.java:52)
Run Code Online (Sandbox Code Playgroud)

我想提取 MsgType 字段(字段 35)。你能告诉我我错在哪里吗?我观察到的是,解析为 FIX50SP2 格式后,转换 FIX 消息缺少许多数据元素(有关详细信息,请参阅输出)

谢谢

java quickfix fix-protocol

5
推荐指数
1
解决办法
7045
查看次数

如何在 QuickFixj 中动态地就 SenderCompID 和 TargetCompID 达成一致?

假设我正在运行一个基于网络的交换并且有一个新客户注册。我为该客户提供了一个新的 CompID,现在我想将该 CompID 添加到我的接受方。我是否必须重新启动我的接受器或者可以动态完成吗?

必须提前就 CompID 达成一致,然后将其粘贴到某处的配置中,这似乎不太具有可扩展性。

我见过一些据说可以做到这一点的示例,但它们似乎只是通过将配置设置为*. 还有其他方法可以做到这一点吗?

java quickfix fix-protocol quickfixj

5
推荐指数
2
解决办法
2523
查看次数

将 FIX 消息格式(“Tag=Value”)转换为 CSV

我有一个 35=S(报价消息;“标签=值”)的 csv/日志文件,我需要将费率提取到适当的 CSV 文件中以进行数据挖掘。这不是严格的 FIX 相关,它更多是关于如何清理数据集的 R 相关问题。

原始消息如下所示:

190=1.1204 ,191=-0.000029,193=20141008,537=0        ,631=1.12029575,642=0.000145,10=56
190=7.20425,191=0.000141 ,537=0       ,631=7.2034485,10=140        ,            ,
190=1.26237,191=0        ,537=1       ,10=068       ,              ,            ,
Run Code Online (Sandbox Code Playgroud)

我首先需要获得一个看起来像这样的中间数据集,其中对齐了相同的标签。

190=1.1204 ,191=-0.000029,193=20141008,537=0,631=1.12029575,642=0.000145,10=56
190=7.20425,191=0.000141 ,            ,537=0,631=7.2034485 ,            ,10=140
190=1.26237,191=0        ,            ,537=1,              ,            ,10=068
Run Code Online (Sandbox Code Playgroud)

反过来,这将需要转换为:

190    ,191      ,193     ,537,631       ,642     ,10
1.1204 ,-0.000029,20141008,0  ,1.12029575,0.000145,56
7.20425,0.000141 ,        ,0  ,7.2034485 ,        ,140
1.26237,0        ,        ,1  ,          ,        ,068
Run Code Online (Sandbox Code Playgroud)

我正在用 awk 开发一个 bash 脚本,但我想知道我是否可以在 R 中做到这一点。目前,我最大的挑战是到达中间表。从中间到决赛桌,我想到将 R 与 tidyr 包一起使用,特别是函数“separate”。如果有人可以提出更好的逻辑,我将不胜感激!

string bash r fix-protocol tidyr

5
推荐指数
1
解决办法
1612
查看次数

QuickFIX/J混合两种不同版本

我正在编写一个使用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)

java quickfix fix-protocol quickfixj

5
推荐指数
1
解决办法
2309
查看次数

从快速修复消息中获取字段

我正在使用带有 python 的 quickfix。查看此处的文档页面告诉我们如何获取字段。假设 a message = fix.message(with quickfix as fix) 来自交易对手。我可以通过调用获得 35 (MsgType) 字段

message.getHeader().getField(fix.MsgType())

例如,它返回 35=X.

我的问题是:是否有任何方法可以返回X?或者我是否必须切片所有内容(例如35=X[3:],返回X)并因此知道所有字符串的长度?

python quickfix fix-protocol

5
推荐指数
1
解决办法
4338
查看次数

使用 QuickFIX 获取收到的 FIX 消息的所有现有字段

QuickFIX 是否提供在单个步骤中获取传入 FIX 消息的所有现有字段的可能性?(我为 Python 使用 1.14.3 版。)

根据 QuickFIX 文档,可以通过某种方式获取字段值:

price = quickfix.Price()
field = message.getField(price)
field.getValue()
Run Code Online (Sandbox Code Playgroud)

各种消息类型包含不同的字段,因此对每个字段都这样做会很尴尬。此外,有时不知道消息中是否存在某些字段。如何在不知道消息包含哪些字段的情况下获取消息的所有字段?

python quickfix fix-protocol

5
推荐指数
1
解决办法
1463
查看次数

更改 FIX 消息中字段的顺序

我使用 QuickFix/n 启动器。我的经纪人拒绝了我的登录消息,理由是消息标题中的字段(标签)顺序错误。顺序应该是 49、56、34、52,而不是 34、49、52、56。

QuickFix/n 似乎在将消息发送到会话时自动按标签号对消息的三个区域(标题、正文、尾部)内的各个字段进行排序。

有没有办法改变发送给接受者的消息中字段的顺序?有没有办法防止排序行为?(向消息添加组或更改数据字典不起作用。)

或者,如果 QuickFix/n 无法做到这一点,是否有 FIX 引擎允许更改消息中字段的顺序?

quickfix fix-protocol

4
推荐指数
1
解决办法
6144
查看次数

解析正则表达式中的FIX消息

在正则表达式中找到了Parsing FIX协议的第二个答案非常好,所以我试了一下.

这是我的代码.

new_order_finder1 = re.compile("(?:^|\x01)(11|15|55)=(.*?)\x01")
new_order_finder2 = re.compile("(?:^|\x01)(15|55)=(.*?)\x01")
new_order_finder3 = re.compile("(?:^|\x01)(11|15|35|38|54|55)=(.*?)\x01")

if __name__ == "__main__":
    line = "20150702-05:36:08.687 : 8=FIX.4.2\x019=209\x0135=D\x0134=739\x0149=PINE\x0152=20150702-05:36:08.687\x0156=CSUS\x011=KI\x0111=N09080243\x0115=USD\x0121=2\x0122=5\x0138=2100\x0140=2\x0144=126\x0148=AAPL.O\x0154=1\x0155=AAPL.O\x0157=DMA\x0158=TEXT\x0160=20150702-05:36:08.687\x01115=Tester\x016061=9\x0110=087\x01"
    fields = dict(re.findall(new_order_finder1, line))
    print(fields)

    fields2 = dict(re.findall(new_order_finder2, line))
    print(fields2)

    fields3 = dict(re.findall(new_order_finder3, line))
    print(fields3)
Run Code Online (Sandbox Code Playgroud)

这是输出

{'11': 'N09080243', '55': 'AAPL.O'}
{'55': 'AAPL.O', '15': 'USD'}
{'35': 'D', '38': '2100', '11': 'N09080243', '54': '1'}
Run Code Online (Sandbox Code Playgroud)

看起来有些字段与正则表达式没有正确匹配.

这有什么问题?

regex fix-protocol

4
推荐指数
2
解决办法
1162
查看次数

标签 统计

fix-protocol ×10

quickfix ×7

java ×4

python ×2

quickfixj ×2

bash ×1

metatrader4 ×1

protocols ×1

r ×1

regex ×1

string ×1

tidyr ×1