值的数据格式不正确 - OrdType

时间:2014-11-11 16:13:41

标签: python quickfix fix-protocol

我正在使用FIX 4.2和QuickFix和python。我正在连接到CTS,这是一个以奇怪方式完成所有事情的数据提供商。我一直在修改我的数据字典大约4个月(这是地狱)。

我遇到了一个问题,我无法修改数据字典,但它似乎是一个DD问题。我很迷茫。

我发送一个SecurityDefinitionRequest,35 = c,并得到一个SecurityDefinition,35 = d,作为回报。 CTS已经从FIX协议大量改变了标签40。 http://www.ctsfutures.com/wiki/T4%20API%20FIX.Security%20Definition.ashx

我试图将标签40定义为字符串,然后继续使用它。但无论我做什么,我的QF引擎都会使用错误的数据格式拒绝该消息:40

以下是一个例子:

(8=FIX.4.2☺9=591☺35=d☺34=15☺49=CTS☺56=XXX☺50=T4FIX☺52=20141111-15:56:11.62 7☺320=1415721370.22☺322=sd-11/11/2014 9:56:11 AM☺323=4☺911=12☺55=YM☺107=SIM:E-mi ni Dow BF:+Dec14-2Mar15+Jun15☺48=XCME_E YM (Z14)-2(H15)(M15)☺
40=2083
(< - 标签40在这里)

☺207=CME_E☺200=201412☺205=19☺167=FUT☺762=4☺562=1☺15=USD☺1146=5☺5770=1/1☺555=3☺600=YM☺623=1☺624=1☺609=FUT☺602=XCME_E YM (Z14)☺556=USD☺610=201412☺616=CME_E☺620=SIM:E-mini Dow Dec14☺600=YM☺623=-2☺624=2☺609=FUT☺602=XCME_E YM (H15)☺556=USD☺610=201503☺616=CME_E☺620=SIM:E-mini Dow Mar15☺600=YM☺623=1☺624=1☺609=FUT☺602=XCME_E YM (M15)☺556=USD☺610=201506☺616=CME_E☺620=SIM:E-mini Dow Jun15☺10=235☺)

Incorrect data format for value: 2083 <20141111-15:56:11.087, FIX.4.2:XXX->CTS, event> (Message 15 Rejected: Incorrect data format for value:40)

<20141111-15:56:11.095, FIX.4.2:XXX->CTS, outgoing> (8=FIX.4.2☺9=114☺35=3☺34=23☺49=XXX☺52=20141111-15:56:11.095☺56=CTS☺45=15☺5 8=Incorrect data format for value☺371=40☺372=d☺373=6☺10=114☺)

以下是我的数据字典中的条目:

<field number="40" name="OrdType" type="STRING"/>

请注意,我尝试了各种组合,例如:

<field number="40" name="OrdType" type="STRING" allowOtherValues="true"/> 

以及明确指定有问题的值

<field number="40" name="OrdType" type="STRING" >
    <value enum="2083" description="STUPID" />
</field>

什么都行不通。我总是得到相同的结果。 值的数据格式不正确:40

发生了什么事?!?

1 个答案:

答案 0 :(得分:1)

在QuickFIX中,OrdType class需要quickfix.CharField

class OrdType(quickfix.CharField):
    def __init__(self, data = None):
        if data == None:
            quickfix.CharField.__init__(self, 40)
        else:
            quickfix.CharField.__init__(self, 40, data)

the default FIX42.xml doc中OrdType的定义证实了这一点:

<field number="40" name="OrdType" type="CHAR">

因此,入站FIX消息中string的{​​{1}}值将导致QuickFIX拒绝包含无效数据的消息。您需要修改QuickFIX以允许OrdType的{​​{1}}值能够容纳具有CTS自定义值的入站和出站邮件。