In der Praxis alles, was Sie wissen müssen, ist dies:
Ihr fromApp()
Rückruf erhält ein Message
Objekt. Diese Nachricht ist eigentlich ein NewOrderSingle oder ExecutionReport oder so. Anstatt es herauszufinden, lässt QF Sie von MessageCracker
erben. Um es zu nutzen, rufen Sie crack()
in Ihrem fromApp()
wie folgt:
void fromApp(const FIX::Message& message, const FIX::SessionID& sessionID)
throw(FIX::FieldNotFound&, FIX::IncorrectDataFormat&, FIX::IncorrectTagValue&, FIX::UnsupportedMessageType&)
{
crack(message, sessionID);
}
Was crack()
tut, ist dies:
- Wandelt Ihre
Message
in die richtige Unterklasse (zB NewOrderSingle
, ExecutionReport
usw.)
- Ruft den benutzerdefinierten Rückruf
onMessage(subtype)
auf, falls definiert. Falls nicht definiert, wird eine Exception UnsupportedMessageType
ausgelöst und Ihre App sendet automatisch ein BusinessMessageReject (35 = j) an den Kontrahenten.
Also, möchten Sie NewOrderSingle Nachrichten behandeln? Großartig, definieren Sie einfach einen onMessage(NewOrderSingle)
Rückruf.
void onMessage(const FIX42::NewOrderSingle& message, const FIX::SessionID&)
{
// Do whatever you want with your NewOrderSingle message's content.
// Note that this message and the one passed to crack() are the same, content-wise.
}
Möchten Sie ExecutionReports behandeln? Definieren Sie onMessage(ExecutionReport)
. Und so weiter.
Aber was ist mit diesen Nachrichtentypen, die Sie nicht behandeln möchten? Es würde dich nerven, wenn du Handler hinzufügen müsstest, um all diese anderen Nachrichtentypen abzulehnen, aber zum Glück musst du das nicht. Wie ich bereits sagte, wenn Sie kein onMessage()
definieren, wird QF es für Sie ablehnen. (Wenn Sie einen bestimmten Nachrichtentyp verschlucken und ihn ohne Zurückweisung ignorieren möchten, definieren Sie einfach einen onMessage()
-Anruf ohne Nachricht.)
Macht das etwas klar? Vielleicht liest sich jetzt this page in the QF docs etwas leichter - der untere Teil spricht über den MessageCracker.
Hinweis: Der MessageCracker behandelt keine Nachrichten auf Sitzungsebene (aka "admin").Wenn Sie eine benutzerdefinierte Behandlung für beispielsweise Logon- oder Heartbeat-Nachrichten hinzufügen möchten, müssen Sie dies explizit in fromAdmin()
tun (weitere Informationen finden Sie unter this question).
Danke für die Erklärung @Grant. In Bezug auf den letzten Teil meiner Frage, wie kommt es in diesem sehr unteren Abschnitt sagt es "Python (nicht unterstützt)" bei der Diskussion der Nachrichten-Cracker. Muss ich in Python nicht dasselbe tun, was in C++ getan werden muss (das macht keinen Sinn)? Hat es damit zu tun, wie Python Variablentypen im Vergleich zu C++ behandelt? – gearhead
Ich habe nie die Python-Version von QF verwendet, aber die Doc-Seite scheint zu implizieren, dass Python den Cracker nicht verwendet. Ich schätze, Sie haben vielleicht Recht, wenn Sie den Grund dafür erraten. Da Python nicht typisiert ist, können Sie wahrscheinlich eine switch-Anweisung auf Feld 35 in fromApp() schreiben und UnsupportedMessageType in den Standardfall für jeden Typ werfen, den Sie nicht behandeln wollen. Du solltest besser andere Python QF Benutzer fragen. Ich weiß, dass sie da draußen sind, aber ich weiß nicht, wo sie rumhängen. Vielleicht die Foren ausprobieren (siehe Link auf der QF Homepage)? –
@GrantBirchmeier Wie behandeln Sie 4 = SequenceReset Nachrichten – FutuToad