2016-06-26 3 views
0

Ich benutze quickfix, um eine Verbindung herzustellen, um die Engine zu reparieren und Daten zu empfangen. Aber die Marktdaten, die hereinkommen, werden von meiner App zurückgewiesen, dass das Tag zweimal erscheint.Wie füge ich eine neue Spalte zu einer Gruppe in Quickfix hinzu?

20160624-12:44:36.770 : 8=FIX.4.49=21835=W34=2649=CfhDemoPrices52=20160624-12:44:37.79356=PrimoDEMOFIX55=GBPUSD262=PrimoApp13268=2269=0270=1.37203271=1500000290=164=20160628278=30/34-920771269=1270=1.37228271=1500000290=1278=30/34-92077610=038 
20160624-12:44:36.798 : 8=FIX.4.49=12635=334=2749=PrimoDEMOFIX52=20160624-12:44:36.79456=CfhDemoPrices45=2658=Tag appears more than once371=278372=W373=1310=139 

Nach vieler Analyse, fanden wir, dass der Tag 278 (MDEntryID) in NoMDEntries in fix44 nicht enthalten. Ich möchte das Feld in dieser Gruppe in meinen Quickfix aufnehmen und neu erstellen. Irgendeine Idee, wie man das macht? Oder lassen Sie mich bitte Ihre Vorschläge zur Lösung dieses Problems wissen.

+0

Ich habe Sie bereits auf [diese Link] (http://quickfixn.org/tutorial/custom-fields-groups-and-messages.html) auf eine andere Frage hingewiesen. Die Struktur der DD-Datei ist ziemlich einfach; Sie sollten herausfinden können, wie Sie der NoMDEntries-Gruppe 278 hinzufügen. Wenn Sie nicht können, sagen Sie bitte, wo Sie feststecken. –

+0

Ich habe bereits die notwendigen Änderungen in der DD-Datei vorgenommen. < Gruppenname = "NoMDEntries" erforderlich = "Y"> \t \t Funktioniert immer noch nicht wie erwartet. –

+0

Der Grund dafür, dass es nicht funktioniert, ist, dass das Feld auch in der Klasse NoMDEntries hinzugefügt werden muss, die die Gruppe erweitert. Aber dafür brauche ich vielleicht einen Quellcode für die schnelle Lösung. Habe ich recht? –

Antwort

0

Sie haben Ihre DD falsch geändert, weil Sie nicht wissen, wie sich wiederholende Gruppen arbeiten.

Dies ist der Standard FIX44 DD für Ihre Nachricht. Ich habe einige Kommentare hinzugefügt, um die Tag-Nummern anzugeben.

<message name="MarketDataSnapshotFullRefresh" msgtype="W" msgcat="app"> 
    <field name="MDReqID" required="N" /> 
    <component name="Instrument" required="Y" /> 
    <group name="NoUnderlyings" required="N"> 
     <component name="UnderlyingInstrument" required="N" /> 
    </group> 
    <group name="NoLegs" required="N"> 
     <component name="InstrumentLeg" required="N" /> 
    </group> 
    <field name="FinancialStatus" required="N" /> 
    <field name="CorporateAction" required="N" /> 
    <field name="NetChgPrevDay" required="N" /> 
    <group name="NoMDEntries" required="Y">  <!-- 268 --> 
     <field name="MDEntryType" required="Y" /> <!-- 269 --> 
     <field name="MDEntryPx" required="N" /> <!-- 270 --> 
     <field name="Currency" required="N" /> 
     <field name="MDEntrySize" required="N" /> <!-- 271 --> 
     <field name="MDEntryDate" required="N" /> 

     ... and so on ... 

Felder innerhalb der wiederholenden Gruppen muss in der vorgeschriebenen Reihenfolge. Wenn QF eine Gruppe verarbeitet, wird bei einem unerwarteten Feld davon ausgegangen, dass die Gruppe beendet ist.

Ihr DD stimmt nicht mit der Reihenfolge überein, die Ihr Absender sendet, sodass Ihr Motor nicht richtig funktioniert.

Ihr Absender sendet Felder in dieser Reihenfolge:

268-> (group 1) 269 270 271 290 64 278 
     (group 2) 269 270 271 290 278 

(Die oben direkt von abgelehnten Nachricht ist.)

Ihre DD jedoch erwartet 269 278 271 270. Sobald es 278 erreicht, endet die Gruppe und seltsame Dinge beginnen zu passieren.

Revert Ihre DD wieder auf den Standard, fügen Sie dann 64/SettlDate und 278/MDEntryID zum Ende der NoMDEntries Komponente. Angesichts der Beweise, die Sie angegeben haben, ist es klar, dass Ihr Kontrahent diese Felder am Ende der Gruppe hinzugefügt hat.

Sicherlich sind dies nicht die einzigen Änderungen, die Ihr Kontrahent an der DD vorgenommen hat. ERHALTEN SIE IHRE DOKUMENTATION UND LESEN SIE SIE. Dann ändern Sie Ihre DD entsprechend.

+0

Vielen Dank. Ich werde das sicherlich ausprobieren und Ihnen das Ergebnis mitteilen. Noch eine Frage und es ist nur für mein Verständnis. Der schnelle Fix hat eine Klasse namens NOMDEntries Group und diese Klasse hat einige Variablen. Und während des Debuggens habe ich festgestellt, dass fix44 keine MDEntryID enthält. Wird dadurch ein Problem verursacht, oder kann nur das Ändern der DD den 278-Tag-Fehler beheben. –

+0

Vielen Dank. Es funktioniert jetzt. Jetzt verstehe ich, wie die wiederholenden Tags funktionieren und die Aufträge, die ich beibehalten muss. Vielen Dank für das Lehren. war wirklich hilfreich. –

+0

Die NoMDEntriesGroup-Klasse wird aus der DD generiert. Du musst * QF * nicht regenerieren und neu erstellen, aber du wirst keine schönen Methoden haben, um 64 und 278 zu bekommen, wenn du es nicht tust. Sie müssen das generische GetStringField (278) oder GetIntField oder was auch immer verwenden (ich habe vielleicht diese Methodennamen nicht korrekt, aber ich denke, Sie verstehen). –

Verwandte Themen