标签: fix-protocol

FIX和FAST协议之间的区别?

谁能解释FIX和FAST之间的区别?什么时候应该使用FIX,何时应该使用FAST?

finance protocols trading fix-protocol

9
推荐指数
3
解决办法
7108
查看次数

在.NET中解析FIX协议消息的最有效方法是什么?

我遇到了这个非常相似的问题,但该问题被标记为QuickFIX(与我的问题无关),大多数答案都与QuickFIX相关.

我的问题更广泛.我正在寻找使用C#解析FIX协议消息最有效方法.作为背景,FIX消息由一系列由ASCII <SOH>字符(0x01)分隔的标记/值对组成.消息中的字段数是可变的.

示例消息可能如下所示:

8=FIX.4.2<SOH>9=175<SOH>35=D<SOH>49=BUY1<SOH>56=SELL1<SOH>34=2482<SOH>50=frg<SOH>
52=20100702-11:12:42<SOH>11=BS01000354924000<SOH>21=3<SOH>100=J<SOH>55=ILA SJ<SOH>
48=YY77<SOH>22=5<SOH>167=CS<SOH>207=J<SOH>54=1<SOH>60=20100702-11:12:42<SOH>
38=500<SOH>40=1<SOH>15=ZAR<SOH>59=0<SOH>10=230<SOH>
Run Code Online (Sandbox Code Playgroud)

对于每个字段,标记(整数)和值(对于我们的目的,字符串)由'='字符分隔.(每个标签的精确语义都在协议中定义,但这与这个问题没有特别密切关系.)

通常的情况是,在进行基本解析时,您只对来自FIX标头的少数特定标签感兴趣,而不是真正对每个可能的字段进行随机访问.我考虑的策略包括:

  • 使用String.Split,遍历每个元素并将标记放入Hashtable中的索引映射 - 如果需要,在某些时候提供对所有字段的完全随机访问

  • (轻微优化)使用String.Split,扫描数组中感兴趣的标签并将标记放入索引映射到另一个容器(不一定是Hashtable,因为它可能是相当少量的项目,并且在解析之前已知项目数)

  • 使用字段扫描消息字段String.IndexOf并在适当的结构中存储感兴趣的字段的偏移量和长度

关于前两个 - 虽然我的测量表明String.Split速度非常快,但根据文档,该方法为结果数组的每个元素分配一个新的String,如果您正在解析大量消息,它会产生大量垃圾.谁能看到更好的方法来解决.NET中的这个问题?

编辑:

我遗漏的三条重要信息:

  1. 标签在FIX消息中不一定是唯一的,即在某些情况下可能出现重复标签.

  2. 某些类型的FIX字段可以<SOH>在数据中包含"嵌入" - 这些标记被称为"数据"类型 - 字典列出了此类型的标记号.

  3. 最终的要求是能够编辑消息(特别是替换值).

.net finance fix-protocol

8
推荐指数
2
解决办法
8083
查看次数

我在哪里可以获得FIX数据(如FIX协议中的FIX)

有人可以建议一个地方(网站)在哪里找到'真正'的FIX消息.通过真实我的意思不是例子,而是'真实',所以如果我把它们放入引擎,它不会抱怨标签10不正确或我错过了一些强制标签.

我特意在执行报告之后.

理想情况下,我很乐意找到代表几天活动的大量修复消息.我很欣赏这可能是敏感数据,但肯定标签1,标签207,标签55都可以被混淆.

非常感谢

fix-protocol

8
推荐指数
2
解决办法
1万
查看次数

捕获未通过 QuickFix 验证的传入 FIX 消息

Quickfix客户端使用XML 规范文件验证传入消息。如果消息验证失败,quickfix 会自动发送拒绝响应。AFAIK 在这种情况下,quickfix 不会调用传入消息的标准回调fromApp(),因此到目前为止,我无法以编程方式捕获这些错误的传入消息并处理它们。

有没有办法捕获未通过快速修复验证的传入 FIX 消息?

当然,它们可能会出现在默认的快速修复日志文件中,但我宁愿在我的代码中实时捕获它们。

quickfix fix-protocol

8
推荐指数
2
解决办法
2952
查看次数

如何使用QuickFIX/J发送FIX消息

我需要一个简单的例子来说明如何初始化会话并发送一条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)

java fix-protocol quickfixj

8
推荐指数
2
解决办法
1万
查看次数

在QuickFIX接受器中自定义FIX登录过程

我正在使用QuickFIX和C#来创建一个FIX接受器(服务器).我希望客户端(FIX启动器)使用用户名和密码登录.但是,我不确定如何在QuickFIX中做到这一点.

通过调试QuickFIX源代码,我发现了以下事件序列:

  • QuickFIX将调用Session::verify以验证登录.
  • Session::verify 将执行各种检查,如comp ID和序列号,并在某些时候确定收到的登录是有效的.
  • Session::verify然后将调用Application::fromAdmin回调,我认为这是自定义登录等内容的地方.
  • 但是,此时QuickFIX已经确定登录正常,并且当回调返回时,接收器将返回相应的登录消息.

如何在接受器中自定义FIX登录过程?修改QuickFIX代码是我唯一的选择吗?

c# quickfix fix-protocol

7
推荐指数
1
解决办法
4401
查看次数

QuickFix错误:标签在"W"消息中出现多次

我从FIX服务器收到以下"W"消息:

8=FIX.4.2|9=141|35=W|34=98|49=CX|52=20150401-09:12:30.247|56=CACIB_MD2|55=608230|262=48|9883=IDB|268=2|269=0|58=No Bid Available|269=1|58=No Offer Available|10=249
Run Code Online (Sandbox Code Playgroud)

标签58两次

我的QuickFix应用程序自动将拒绝消息发送到服务器:

8=FIX.4.2|9=104|35=3|34=91|49=CACIB_MD2|52=20150401-09:12:29.661|56=CX|45=90|58=Tag appears more than once|371=58|372=W|10=008
Run Code Online (Sandbox Code Playgroud)

从互联网阅读中我了解到字典存在问题.

我的QuickFix配置文件中没有任何字典配置.我不确定默认字典所在的位置,但我发现(FIX42.xml)定义了标记58是"W"消息的组的一部分:

  <message name='MarketDataSnapshotFullRefresh' msgcat='app' msgtype='W'>
   <field name='MDReqID' required='N' />
   <field name='Symbol' required='Y' />
   <field name='SymbolSfx' required='N' />
   <field name='SecurityID' required='N' />
   <field name='IDSource' required='N' />
   <field name='SecurityType' required='N' />
   <field name='MaturityMonthYear' required='N' />
   <field name='MaturityDay' required='N' />
   <field name='PutOrCall' required='N' />
   <field name='StrikePrice' required='N' />
   <field name='OptAttribute' required='N' />
   <field name='ContractMultiplier' required='N' />
   <field name='CouponRate' required='N' />
   <field name='SecurityExchange' required='N' />
   <field name='Issuer' required='N' />
   <field …
Run Code Online (Sandbox Code Playgroud)

quickfix fix-protocol

7
推荐指数
1
解决办法
3247
查看次数

QuickFIX StartTime和EndTime设置应该做什么?

我正在尝试理解QuickFIX配置文件中的StartTime和EndTime设置.我正在使用QuickFIX .Net来实现买方FIX客户端,设置为发起方.

默认情况下,StartTime和EndTime都设置为00:00:00

因此,每次我的程序运行时(它调用initiator.start()),它都会自动向服务器发送登录消息.没问题.

然后我玩StartTime和EndTime设置.在QuickFIX文档中没有太多关于它的细节.我想当我运行程序时,应用程序将在StartTime发送Logon消息,而Endtime的Logout不是吗?

所以我将StartTime和EndTime设置为10:00和11:00

我在09:50启动了程序,该程序刚刚创建了会话并且没有发送登录消息.合理.然后在10点,什么也没发生......

下一次试验我在10:50启动了程序,该程序创建了会话并照常登录.比在11点,再也没有发生过.我想它会自动退出......

所以我的问题是StartTime和EndTime应该如何影响我的程序?

quickfix fix-protocol

7
推荐指数
1
解决办法
3089
查看次数

Quickfix/n,提取消息类型的最有效方法?

Quickfix/n 1.4 中提取此处定义的消息类型的最有效方法是什么:http : //www.fixprotocol.org/FIXimate3.0/en/FIX.5.0SP2/messages_sorted_by_type.html

我目前使用var msgType = Message.GetMsgType(message.ToString());结果为“A”的登录消息。有没有更好的办法?我尝试确定其中的消息类型ToAdmin(...)以捕获传出的登录请求消息,以便我可以添加用户名和密码。

我很想通过 MessageCracker 来做到这一点,但到目前为止,我还没有找到一种方法来实现捕获所有剩余消息类型,以防我没有实现所有 OnMessage 重载。(请参阅相关问题:Quickfix,是否有“全能”方法 OnMessage 来处理未由重载方法处理的传入消息?)。

谢谢

c# quickfix fix-protocol

6
推荐指数
1
解决办法
4957
查看次数

Quickfix读取自定义重复组

我有从服务提供商那里得到的样本响应。他们定义了已经定义的标签(我已经从FIXimate检查)。

8=FIXT.1.19=108135=IB49=NSECM56=MTBM34=1924=1115=21828=61826=Nifty CPSE1815=2294.51816=2310.151817=2286.551818=2276.751819=2294.21820=1967852601488651821=262231822=257851823=0.771824=2799.551825=2139.51827=-1826=Nifty GrowSect 151815=7037.751816=7070.351817=7023.651818=6990.61819=7042.91820=7768216282514231821=782041822=750561823=0.751824=7354.551825=5942.151827= 1826=Nifty50 Value 201815=5444.71816=5465.61817=5417.41818=5413.61819=5425.91820=1.90667550936387E+151821=1348851822=1341791823=0.231824=5563.81825=4171.651827=-1826=Nifty Mid Liq 151815=4133.551816=4206.551817=4133.551818=4107.21819=4205.41820=1573956262705091821=428041822=442911823=2.391824=4677.051825=3770.551827=-1826=Nifty Pvt Bank1815=15385.21816=15415.51817=15339.751818=15248.81819=15377.71820=9015155094048031821=589741822=592681823=0.851824=16152.151825=13298.31827=+1826=NIFTY MIDCAP 1001815=19184.851816=19326.31817=19184.851818=19046.551819=19314.251820=7127426889917151821=1858871822=1884631823=1.411824=21840.851825=17700.91827=-10=174

问题是我无法阅读重复组。我创建一个自定义组

 noIndexRecords = int(message.getField(1828))
 if noIndexRecords > 0:
    group = fix.Group(1828, 1826, )
    message.getGroup(num=1, group=group)
Run Code Online (Sandbox Code Playgroud)

但这向我显示了一个FieldNotFound错误。我对规格文件进行了如下更改FIX50SP2.xml

新增栏位:

<field number='1815' name="OpenIndex" type="PRICE"/>
<field number='1816' name="HighIndex" type="PRICE"/>
<field number='1817' name="LowIndex" type="PRICE"/>
<field number='1818' name="CloseIndex" type="PRICE"/>
<field number='1819' name="IndexValue" type="PRICE"/>
<field number='1820' name="MarketCapitalization" type="DOUBLE"/>
<field number='1821' name="NoOfDownMoves" type="INT"/>
<field number='1822' name="NoOfUpMoves" type="INT"/>
<field number='1823' name="PercentageChange" type="DECIMAL"/>
<field number='1824' name="YearlyHigh" type="PRICE"/> …
Run Code Online (Sandbox Code Playgroud)

python quickfix fix-protocol python-3.x

6
推荐指数
1
解决办法
418
查看次数

标签 统计

fix-protocol ×10

quickfix ×6

c# ×2

finance ×2

.net ×1

java ×1

protocols ×1

python ×1

python-3.x ×1

quickfixj ×1

trading ×1