如何使用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'