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

8 投票
4 回答
5086 浏览
提问于 2025-04-17 12:57

我最近开始使用 pythonquickfix,我希望消息的交易时间能够以 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)

有没有人能帮我一下,告诉我怎么才能实现我想要的结果?谢谢!

4 个回答

1

好吧,这是个新手错误,我来给自己解答一下:

newSingle.getHeader().setField(fix.SendingTime(1)) 

这样做就能帮你完成所有的工作。

2

试试这个:

代码

#imports
import quickfix
import quickfix50sp2

#code
...
newSingle = quickfix50sp2.NewOrderSingle()

t = quickfix.TransactTime()
t.setString(datetime.datetime.utcnow().strftime("%Y%m%d-%H:%M:%S.%f")[:-3])

newSingle.setField(t)

完成这个后,你就会在消息中完成“标签60”。在ipython里试试看,检查一下:

In[]: newSingle.toString()
Out[]: '8=FIXT.1.1\x019=37\x0135=D\x011128=9\x0160=20180603-18:19:51.428\x0110=091\x01'

祝你好运!

4

因为在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)

撰写回答