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

发布于 2025-01-05 05:03:07 字数 1026 浏览 0 评论 0原文

我对使用 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)

有关如何实现我正在寻找的结果的任何帮助。谢谢!

I'm relatively new to using python and quickfix, I want the transaction time for a message to be in UTC format so that the transact time looks like YYYYMMDD-HH:MM:SS.mmm so basically I want tag 60 to look like 2012-02-13-08:15:35.435 for example

I did the following code

newSingle.getHeader().setField(fix.Transacttime(time.gmtime()))

but I'm getting errors that doesn't match C/C++ prototypes

  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)

Any help as to how I can achieve the result I'm looking for. Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

标点 2025-01-12 05:03:07

由于 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)

As UtcTimeStamp isn't supported in Python, I suggest setting the value manually.

newSingle.getHeader().setField(fix.StringField(60,(datetime.utcnow ().strftime ("%Y%m%d-%H:%M:%S.%f"))[:-3]))

Or you could also do like this.

transact_time = fix.TransactTime()
transact_time.setString('20160404-03:52:24.824')
newSingle.getHeader().setField(transact_time)
绝不放开 2025-01-12 05:03:07

试试这个:

code

#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'

祝你好运!

Try this:

code

#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)

After this you will have complete the "tag 60" in the message.
Tri it in ipython a check it:

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

Good luck!

潦草背影 2025-01-12 05:03:07

好吧,菜鸟错误,回答我自己的问题:

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

这将为您完成所有工作。

Okay, rookie error, to answer my own question:

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

This will do all the work for you.

秋凉 2025-01-12 05:03:07

当您调用 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) 是两个不同的标签,但它们的行为是相同的(即您可以将与上面的 TransactionTime 相同的逻辑应用于 SendingTime)。

When you call fix.TransactionTime() it creates the tag with the current time by default. For example:

In [68] : fix.TransactTime().getString()
Out[68] : '20160701-18:01:57'

If you want to set a custom timestamp:

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'

Note that SendingTime (52) and TransactionTime (60) are two different tags but their behavior is the same (i.e. you can apply the same logic to SendingTime as TransactionTime above).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文