【CJ – Fortgeschrittene, Fortsetzung 14/30 · Insgesamt Artikel 42】
Der häufigste Fehler in Programmen ist, einen Zustand ohne eindeutige Antwort zwangsweise als „Fehler“ oder „Erfolg“ einzuordnen.
Eine Zeitüberschreitung bei einer Anfrage bedeutet nicht, dass die Order nicht ausgeführt wurde; eine Fehlermeldung der Schnittstelle bedeutet auch nicht, dass die Position bereits geschlossen ist. Wenn das System in diesem Moment bei einem Fehler einen neuen Versuch startet, kann es doppelte Orders platzieren. Macht es dagegen einfach mit der Annahme weiter, dass alles erfolgreich war, übersieht es womöglich ein zu behandelndes Risiko. Unbekannte Zustände sind gefährlich, weil sie Programme dazu verleiten, so zu tun, als wüssten sie, was tatsächlich passiert ist.
Sicherer ist es, den unbekannten Zustand als eigenständigen Zustand zu behandeln: die betreffenden Aktionen aussetzen, die Anfrage-ID und den Zeitpunkt festhalten, das tatsächliche Ergebnis durch eine separate Abfrage bestätigen und erst dann entscheiden, ob der Vorgang fortgesetzt, rückgängig gemacht oder manuell bearbeitet werden soll. Auch die Dauer, in der auf eine Bestätigung gewartet wird, sollte überwacht werden, statt den Vorgang unbegrenzt offen zu lassen.
Auch nach dem Abruf des Ergebnisses darf die ursprüngliche Anfrage-ID nicht außer Acht gelassen werden. Erst muss bestätigt werden, zu welcher Order das Abfrageergebnis gehört; anschließend kann der verbleibende Teil bearbeitet werden. Nur so lässt sich vermeiden, eine andere, ähnliche Order fälschlich für die gesuchte zu halten. Eine Wiederaufnahme muss sich auf bestätigte Tatsachen stützen, nicht auf Vermutungen, die nach zu langem Warten entstehen.
Ein Handelssystem kann nicht jede Ungewissheit beseitigen, aber es kann verhindern, dass sich das Risiko im Ungewissen weiter vergrößert. „Ich weiß es nicht“ einzugestehen, ist manchmal die professionellste automatisierte Handlung.
Nächster Artikel: Teilweise Ausführungen können eine einzige Absicherung am leichtesten in zwei verschiedene Risiken aufspalten.
#状态机 #Systemzuverlässigkeit
Der häufigste Fehler in Programmen ist, einen Zustand ohne eindeutige Antwort zwangsweise als „Fehler“ oder „Erfolg“ einzuordnen.
Eine Zeitüberschreitung bei einer Anfrage bedeutet nicht, dass die Order nicht ausgeführt wurde; eine Fehlermeldung der Schnittstelle bedeutet auch nicht, dass die Position bereits geschlossen ist. Wenn das System in diesem Moment bei einem Fehler einen neuen Versuch startet, kann es doppelte Orders platzieren. Macht es dagegen einfach mit der Annahme weiter, dass alles erfolgreich war, übersieht es womöglich ein zu behandelndes Risiko. Unbekannte Zustände sind gefährlich, weil sie Programme dazu verleiten, so zu tun, als wüssten sie, was tatsächlich passiert ist.
Sicherer ist es, den unbekannten Zustand als eigenständigen Zustand zu behandeln: die betreffenden Aktionen aussetzen, die Anfrage-ID und den Zeitpunkt festhalten, das tatsächliche Ergebnis durch eine separate Abfrage bestätigen und erst dann entscheiden, ob der Vorgang fortgesetzt, rückgängig gemacht oder manuell bearbeitet werden soll. Auch die Dauer, in der auf eine Bestätigung gewartet wird, sollte überwacht werden, statt den Vorgang unbegrenzt offen zu lassen.
Auch nach dem Abruf des Ergebnisses darf die ursprüngliche Anfrage-ID nicht außer Acht gelassen werden. Erst muss bestätigt werden, zu welcher Order das Abfrageergebnis gehört; anschließend kann der verbleibende Teil bearbeitet werden. Nur so lässt sich vermeiden, eine andere, ähnliche Order fälschlich für die gesuchte zu halten. Eine Wiederaufnahme muss sich auf bestätigte Tatsachen stützen, nicht auf Vermutungen, die nach zu langem Warten entstehen.
Ein Handelssystem kann nicht jede Ungewissheit beseitigen, aber es kann verhindern, dass sich das Risiko im Ungewissen weiter vergrößert. „Ich weiß es nicht“ einzugestehen, ist manchmal die professionellste automatisierte Handlung.
Nächster Artikel: Teilweise Ausführungen können eine einzige Absicherung am leichtesten in zwei verschiedene Risiken aufspalten.
#状态机 #Systemzuverlässigkeit