如何使用Python将quickFix中的Transact-Time设置为GMT格式
我对使用如何使用Python将quickFix中的Transact-Time设置为GMT格式,python,quickfix,Python,Quickfix,我对使用python和quickfix比较陌生,我希望消息的事务时间采用UTC格式,这样事务时间看起来像YYYYMMDD-HH:MM:SS.mmm所以基本上我希望标记60看起来像2012-02-13-08:15:35.435 我做了以下代码 newSingle.getHeader().setField(fix.Transacttime(time.gmtime())) 但我得到的错误与C/C++原型不匹配 newSingle.getHeader().setField(fix.Transact
python
和quickfix
比较陌生,我希望消息的事务时间采用UTC格式,这样事务时间看起来像YYYYMMDD-HH:MM:SS.mmm
所以基本上我希望标记60看起来像2012-02-13-08:15:35.435
我做了以下代码
newSingle.getHeader().setField(fix.Transacttime(time.gmtime()))
但我得到的错误与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)
任何关于如何实现我所期望的结果的帮助。谢谢 好吧,新手错误,回答我自己的问题:
newSingle.getHeader().setField(fix.SendingTime(1))
这将为您完成所有工作。由于Python不支持UtcTimeStamp,我建议手动设置该值
newSingle.getHeader().setField(fix.StringField(60,(datetime.utcnow ().strftime ("%Y%m%d-%H:%M:%S.%f"))[:-3]))
或者你也可以这样做
transact_time = fix.TransactTime()
transact_time.setString('20160404-03:52:24.824')
newSingle.getHeader().setField(transact_time)
当您调用
fix.TransactionTime()
时,默认情况下它会使用当前时间创建标记。例如:
In [68] : fix.TransactTime().getString()
Out[68] : '20160701-18:01:57'
如果要设置自定义时间戳:
In [135] : dnow = datetime.utcnow()
In [136] : dnow.strftime('%Y%m%d-%H:%M:%S')
Out[136] : '20160701-18:23:33'
In [137] : tag = fix.TransactTime()
In [138] : tag.getString()
Out[138] : '20160701-18:23:46'
In [139] : tag.setString(dnow.strftime('%Y%m%d-%H:%M:%S'))
In [140] : tag.getString()
Out[140] : '20160701-18:23:33'
请注意,SendingTime
(52)和TransactionTime
(60)是两个不同的标记,但它们的行为是相同的(即,您可以对SendingTime
应用与上述TransactionTime
相同的逻辑)。尝试以下操作:
代码
在此之后,您将完成消息中的“标记60”。
在ipython中对其进行Tri-it检查:
In[]: newSingle.toString()
Out[]: '8=FIXT.1.1\x019=37\x0135=D\x011128=9\x0160=20180603-18:19:51.428\x0110=091\x01'
祝你好运 检查Transact-time在quickfix中是如何实现的,然后检查time.gmtime()返回的时间。这应该给你一个问题点。
In[]: newSingle.toString()
Out[]: '8=FIXT.1.1\x019=37\x0135=D\x011128=9\x0160=20180603-18:19:51.428\x0110=091\x01'