我对使用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)
有关如何实现我正在寻找的结果的任何帮助。谢谢!
答案 0 :(得分:0)
好的,菜鸟错误,回答我自己的问题:
newSingle.getHeader().setField(fix.SendingTime(1))
这将为您完成所有工作。
答案 1 :(得分:0)
由于Python不支持CancellationToken
,我建议手动设置值。
SpeechSynthesizer
或者你也可以这样做。
SpeakAsyncCancelAll
答案 2 :(得分:0)
当您致电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
的相同逻辑上面)。
答案 3 :(得分:0)
试试这个:
#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'
祝你好运!