标签: quickfix

QuickFIX C++库 - 关于ThreadedSocketInitiator的一般问题

我是QuickFIX的新手,我有一些关于QuickFix的基本问题:

1)考虑到一次,接受者和发起者之间只有一个修复会话.我不太了解ThreadedSocketInitiator和ThreadedSocketAcceptor类的目的.

或者这些类是否存在以促进多个会话,其中多个"发起者"可以与不同的接受者交谈,反之亦然?

2)QuickFIX是否具有某种消息持久性,例如,如果消息在传输过程中丢失会发生什么?引擎是否负责重新发送消息?

c++ quickfix

9
推荐指数
1
解决办法
2262
查看次数

PyPy - SWIG - QuickFix混音

PyPy有一些兼容性限制,特别是关于CPython C API.

我使用QuickFix包附带预编译的SWIG绑定,我正在考虑将它与PyPy一起使用.由于我不熟悉C API和SWIG,我的问题是:

  • PyPy的C API兼容性限制是否会妨碍SWIG的工作?你能解释一下原因吗?
  • 我是否需要重新编译SWIG绑定才能使用PyPy?那可能吗?怎么样?

swig pypy quickfix python-bindings

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

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

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

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

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

quickfix fix-protocol

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

在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
查看次数

如何使用Python将QuickFix中的TransactTime设置为GMT格式

我是比较新的使用pythonquickfix,我想交易时间的消息是在UTC格式,这样的办理时间貌似YYYYMMDD-HH:MM:SS.mmm 所以基本上我想要的标签60的样子2012-02-13-08:15:35.435,例如

我做了以下代码

newSingle.getHeader().setField(fix.Transacttime(time.gmtime()))
Run Code Online (Sandbox Code Playgroud)

但是我遇到了与C / C ++原型不匹配的错误

  newSingle.getHeader().setField(fix.TransactTime(time.gmtime()))
  File "/usr/lib/python2.6/dist-packages/quickfix.py", line 41959, in __init__
    quickfix.UtcTimeStampField.__init__(self, 60, data)
  File "/usr/lib/python2.6/dist-packages/quickfix.py", line 764, in __init__
    this = _quickfix.new_UtcTimeStampField(*args)
NotImplementedError: Wrong number of arguments for overloaded function 'new_UtcTimeStampField'.
  Possible C/C++ prototypes are:
    FIX::UtcTimeStampField(int,UtcTimeStamp const &,bool)
    FIX::UtcTimeStampField(int,UtcTimeStamp const &)
    FIX::UtcTimeStampField(int,bool)
    FIX::UtcTimeStampField(int)
Run Code Online (Sandbox Code Playgroud)

关于如何获得所需结果的任何帮助。谢谢!

python quickfix

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

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
查看次数

建立与接受者的SSL通信不需要QuickFIX启动器证书

我一直在使用QuickFIX开发客户端API,我计划使用SSL和基于证书的身份验证.我通过以下方式为接受者和发起者生成自签名证书:

1)生成并导出服务器/接受者证书:

keytool -genkeypair -keyalg RSA -keysize 2048 -alias server -keystore server.jks
keytool -export -alias server -file server.cer -keystore server.jks
Run Code Online (Sandbox Code Playgroud)

2)生成并导出客户端/启动器证书:

keytool -genkeypair -keyalg RSA -keysize 2048 -alias client -keystore client.jks
keytool -export -alias client -file client.cer -keystore client.jks
Run Code Online (Sandbox Code Playgroud)

3)将服务器/接受者证书导入客户端密钥库:

keytool -import -v -trustcacerts -alias server -file server.cer -keystore client.jks
Run Code Online (Sandbox Code Playgroud)

4)将客户端/启动器证书导入服务器/接受者密钥库:

keytool -import -v -trustcacerts -alias client -file client.cer -keystore server.jks
Run Code Online (Sandbox Code Playgroud)

接受器配置:

SocketUseSSL=Y
SocketKeyStore=server.jks
SocketKeyStorePassword=password
Run Code Online (Sandbox Code Playgroud)

启动器配置:

SocketUseSSL=Y
SocketKeyStore=client.jks
SocketKeyStorePassword=password
Run Code Online (Sandbox Code Playgroud)

一切似乎都运行良好,数据正在加密.但是,如果我删除了启动器的client.jks密钥库文件,我将得到一个QuickFIX日志条目,说"找不到client.jks:keystore,使用空密钥库".奇怪的是,发起者仍然能够连接并建立有效的FIX会话.因为没有提供有效的证书,我希望立即删除连接.我错过了什么吗?

ssl quickfix

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

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
查看次数

标签 统计

quickfix ×10

fix-protocol ×6

c# ×2

python ×2

c++ ×1

pypy ×1

python-3.x ×1

python-bindings ×1

ssl ×1

swig ×1