2012-02-13 63 views
4

我比較新的使用pythonquickfix,我希望消息的交易時間是UTC格式,以便交易時間看起來像YYYYMMDD-HH:MM:SS.mmm所以基本上我想標籤60看起來像2012-02-13-08:15:35.435例如如何在使用Python格式的QuickFix中設置TransactTime到GMT格式

我做了下面的代碼

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

檢查**如何在quickfix中執行** Transacttime **,然後檢查time.gmtime()返回的內容。這應該給你的問題點。 – DumbCoder 2012-02-13 15:10:34

回答

0

好吧,新秀錯誤,回答我的問題:

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

這將做所有的工作適合你。

0

由於UtcTimeStamp在Python中不受支持,我建議手動設置該值。

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(transacttime) 
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以上)。