Entwickler! Testen Sie überhaupt, was Sie schaffen? - Seite 11

 

papaklass, c-4

Das bestehende Server-Antwortmodell über OnTradeTransaction

es passt zu mir, und es funktioniert in meinem EA, ABER

meine erste Nachricht war, dass keine Nachricht (überhaupt) vom Server zurückgegeben wurde,

dass das Geschäft abgeschlossen wurde (die Bestellung wurde um 1 Uhr ausgeführt) und der zweite Fehler war

Der zweite Fehler bestand darin, dass anstelle einer Antwort, dass der Auftrag erteilt wurde, eine Antwort kam, dass er teilweise ausgeführt wurde (dupliziert).

Das Problem lag nicht beim Handler (ich habe keine Ansprüche gegen ihn), sondern bei der Antwort des Servers (eine Antwort kam überhaupt nicht und die andere war falsch).

Das Modell für die Arbeit mit Server-Antworten in meinem EA basiert NICHT auf der Reihenfolge der Server-Antworten, ABER die Antwort muss korrekt sein und bleiben.

So sah es aus (Bild aus dem ersten Beitrag):

Der Expert Advisor hat eine Order mit einem Volumen von 3.

Der Auftrag wurde von einem ausgeführt - die Antworten des Servers sind korrekt.

Dann hat der Expert Advisor die Order geändert - die Antwort des Servers lautet ORDER_STATE_PARTIAL - und die Antwort hätte ORDER_STATE_PLACED lauten müssen.

Dann wurde der Auftrag noch 1 Mal ausgeführt, ohne dass eine Nachricht vom Server kam.

Ein paar Tage später (Bild unten) habe ich diese Sequenz wiederholt - das Ergebnis hat sich geändert (wahrscheinlich haben die Entwickler etwas korrigiert),

Ich erhielt eine Meldung, dass eine Transaktion stattgefunden hat (Sekunde 21:15:02.232), aber die Meldung über die Änderung war immer noch nicht korrekt.

Es ist auch sehr beunruhigend, dass drei Antworten des Servers zur gleichen Zeit kamen (21:14:53.049)!

Es ist klar, dass alles im selben Thread funktioniert und dass sich die Nachrichten stapeln, aber trotzdem.... Ich stoppe die Ausführung des EA,

um Nachrichten zu empfangen.

 

Papaklass!

Der Punkt ist, dass *.ex5-Programme in einem einzigen Thread laufen, wenn

Es wird viele Betreuer geben, dann wird es noch schlimmer sein.

 
papaklass:

Jetzt habe ich speziell die Vorgänge OnTrade und OnTradeTransaction überprüft.

Drei OnTrade-Handler oder vier OnTradeTransaction-Handler lösen einen Handelsauftrag aus, um eine Marktposition zu eröffnen (einen Marktauftrag). Ich brauche nur einen Handler OnPositionOpened zum Auslösen.

Für das Schließen einer Position durch einen Stop-Loss/Stake-Profit werden 3 OnTrade-Handler oder 3 OnTradeTransaction-Handler anstelle eines OnPositionClosed ausgelöst. Die Redundanz ist offensichtlich!

Diese Mehrfachantworten der bestehenden Event-Handler (OnTrade/OnTradeTransaction) geben keine klare Antwort auf die Frage: "Welches Handelsereignis ist eingetreten und was ist das Ergebnis eines Handelsvorgangs? Das wirft die Frage auf: "Wozu diese ganze Mühe?"

Bei einer solchen redundanten Verarbeitung von Handelsereignissen kann es leicht zu Kollisionen unterschiedlicher Art kommen, was zu Fehlern führt, insbesondere bei der massenhaften Übermittlung von Handelsaufträgen durch Kunden.

Daher ist das, was in Ihrem Fall oder im Fall von komposter (Timeout) passiert ist, für mich persönlich nicht überraschend.

Die Art und Weise, wie OnTrade- und OnTradeTransaction-Ereignisse implementiert werden, erinnerte mich an eine Episode, die sich vor 20 Jahren ereignete... Ich erinnere mich, dass ich Rezensionen über neue Spiele für das Spectrum gelesen habe, besonders die denkwürdige, in der es hieß: "... der Sound im Spiel ist gut, da man ihn ausschalten kann...". Ich habe fast die gleiche Einstellung zu OnTrade- und OnTradeTransaction-Events, sie sind gut, nur weil man sie nicht benutzen kann.
 
SWA:
Die Art und Weise, wie OnTrade- und OnTradeTransaction-Ereignisse implementiert werden, erinnerte mich an eine Episode von vor 20 Jahren... Ich erinnere mich, dass ich Rezensionen über neue Spiele für das Spectrum gelesen habe. Besonders in Erinnerung geblieben ist mir eine Rezension über ein Spiel, in der es hieß: "... der Sound im Spiel ist gut, da man ihn abschalten kann...". Ich habe in etwa die gleiche Einstellung zu OnTrade- und OnTradeTransaction-Ereignissen, sie sind nur so gut, wie sie nicht zu verwenden.

Ich hingegen verwende (erfolgreich) diese beiden Handler!

Wenn OnTradeTransaction aus irgendeinem Grund nicht funktioniert, prüfe ich

in OnTrade - sehr praktisch, denn OnTradeTransaction,

und dann OnTrade.

 
Mikalas:

Ich hingegen verwende (erfolgreich) diese beiden Handler!

Wenn OnTradeTransaction aus irgendeinem Grund nicht funktioniert, prüfe ich

in OnTrade - sehr praktisch, denn OnTradeTransaction,

und dann OnTrade.

Ich persönlich finde diese Bequemlichkeit fragwürdig: Zeitverlust und Überlastung des Client-Server-Kanals mit Anfragen nach genauen Informationen darüber, was auf dem Server passiert ist. Es kann vorkommen, dass die hart erarbeiteten Informationen vom Server nicht mehr aktuell und zuverlässig sind, wenn Sie sie erhalten.
Es wäre wirklich bequem, diese Ereignisse zu nutzen (zumindest für mich), wenn der Expert Advisor eine Anfrage an den Server mit der für den Handelsalgorithmus erforderlichen Häufigkeit wie folgt erzeugen würde
bool TradeTransaction(TIME_REQUEST);
bool Trade(TIME_REQUEST);
// где временная метка может принимать значение к примеру TIME_REQUEST=TimeTradeServer или TIME_REQUEST=TimeGMT

Und der Server würde auf eine solche Anfrage sofort mit umfassenden Informationen antworten...

In der Annahme, dass es "unüberwindbare objektive Gründe" gibt, die es unmöglich machen, einen solchen Komfort zu implementieren, begnüge ich mich mit dem, was ich habe:)

 

Wer kann das schon...:)

Übrigens, laden Sie die Plaza II API vom Börsenserver herunter und Sie werden verstehen, woher die "Beine kommen".

 
Mikalas:

Bitte seien Sie nicht unhöflich! Übrigens, es ist schon 10!

Und es ist Ihr gutes Recht, das, was hier steht, gar nicht zu lesen!

Wofür ist dann das Thema? Nur um zu schreien?

Wenn Sie glauben, dass ein Fehler vorliegt, bestätigen Sie ihn mit Protokollen und Code (niemand wird Ihre Bilder entziffern).
Wenn Sie eine verlässliche Lösung finden wollen, hören Sie auf das, was sie sagen (geben Sie das Ereignismodell auf und analysieren Sie den aktuellen Zustand).

Ich würde OnTradeTransaction oderOnTrade nur für die unmittelbare Reaktion auf Änderungen der Handelssituation verwenden.Aber die gesamte Verarbeitung würde in einem Handler platziert werden, wie von Vasiliy vorgeschlagen(OnRefresh()).

Viel Glück!

 
komposter:

Wofür ist dann das Thema? Nur um zu schreien?

Wenn Sie glauben, dass ein Fehler vorliegt, bestätigen Sie ihn mit Protokollen und Code (niemand wird Ihre Bilder entschlüsseln).
Wenn Sie eine verlässliche Lösung finden wollen, sollten Sie zuhören, was sie sagen (das Ereignismodell aufgeben und den aktuellen Zustand analysieren).

Ich würde OnTradeTransaction oderOnTrade nur für die unmittelbare Reaktion auf Änderungen der Handelssituation verwenden.Aber die gesamte Verarbeitung würde in einem Handler platziert werden, wie Vasiliy vorgeschlagen(OnRefresh()).

Viel Glück!

komposter!

Entweder Sie lesen alles, was Sie geschrieben haben, oder...

2. was ich auf diesen Seiten schreibe, ist MEIN Recht als Forumsteilnehmer,

und Rude ANYTHING ist nicht annähernd angemessen!

3. Wie auch immer Sie den Fehler behandeln, wenn die Antwort des Servers nicht dem entspricht, was sie sein sollte, wird das Ergebnis dasselbe sein - FEHLER!

4. Sie handeln wahrscheinlich nicht selbst.

 
Mikalas:
BURNED REMEMBER - eine Antwort auf einen unverhohlenen Angriff! Wie auch immer die Frage lautet, so lautet die Antwort. Du hättest ein Held sein können... ))
 

pronych und ....

1.>> LUCKY REMOTE ist die Antwort auf einen unverhohlenen Angriff! Wie auch immer die Frage lautet, so lautet die Antwort. >> Könnte ein Held gewesen sein... ))

Sie haben wahrscheinlich genau die richtige Wahrnehmung der Welt um Sie herum...

2. Sind SIE PROGRAMMIERER oder sind SIE "SCHREIBER"?

3. Kann mir jemand eine einfache Frage beantworten: Wie sollte der Server auf den Befehl "Auftrag ändern" reagieren?

4. Warum also Dokumentation? Artikel? Schließen Sie die Augen und spucken Sie, was Sie wollen! Der KUNDE ZAHLT sowieso (und er ist auch derjenige, der trockengelegt wird)!

bool CheckMoney()
{
  return(ВАСЯ_ПУПКИН);
}