Как установить TransactTime в quickFix с использованием Python в формате GMT - PullRequest
4 голосов
/ 13 февраля 2012

Я относительно новичок в использовании 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)

Любая помощь в том, как я могу достичь результата, который я ищу. Спасибо!

Ответы [ 4 ]

0 голосов
/ 03 июня 2018

Попробуйте это:

код

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

Удачи!

0 голосов
/ 04 апреля 2016

Поскольку 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(transact_time)
0 голосов
/ 01 июля 2016

При вызове 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 выше).

0 голосов
/ 14 февраля 2012

Хорошо, ошибка новичка, чтобы ответить на мой собственный вопрос:

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

Это сделает всю работу за вас.

...