Fehler Nr. 1 beim Ändern von Aufträgen

 

Wie kann ich diesen verdammten Fehler loswerden? Ich habe es satt. Ich überprüfe jeden Eingabeparameter der Funktion. Für mich sieht es im Moment so aus:

if (OrderOpenPrice() != ND (fd_MurreyLevelsValue[11]))
   New_OOP = ND (fd_MurreyLevelsValue[11]);
else New_OOP = OrderOpenPrice();
if (OrderStopLoss() != ND (fd_MurreyLevelsValue[12]))
   New_SL = ND (fd_MurreyLevelsValue[12]);
else New_SL = OrderStopLoss();
if (OrderTakeProfit() != ND (fd_MurreyLevelsValue[2]))
   New_TP = ND (fd_MurreyLevelsValue[2]);
else New_TP = OrderTakeProfit();

Das heißt, wenn der Parameter nicht geändert wurde, besteht keine Notwendigkeit, ihn zu ändern. Ich habe das noch nie gemacht, aber ich habe beschlossen...

Dann werden die Parameter wie folgt an die Auftragsänderungsmethode übergeben:

 if (!fOrderModify (Ticket,  New_OOP, New_SL, New_TP))
{
   if (_LastError != 0)
     WriteLog (StringConcatenate (__FUNCTION__, ". В строке ", __LINE__, " ", CErrs.ErrorToString (_LastError)),
                     CLogs.GetNeedLogs(), CLogs.GetPrintUP(), CLogs.GetCommentUP());
}

Nw-Ausgabe im Protokoll:

modify #2  sell limit 0.10 EURUSD at 1.34048 sl: 1.34125 tp: 1.33362 ok
OrderModify error 1

Die Zeitschrift meldet uns also, wie die Änderung: OK, aber dann einen Fehler. Keiner der Parameter hat sich geändert.

Die Bestellung ist noch nicht abgeschlossen. Wir können also den Eröffnungs-, Stopp- und Mitnahmepreis ändern. Soweit ich weiß, stand dies nicht im Widerspruch zu den Unterlagen.

Wer hat so etwas schon einmal erlebt? Wie kann man das Problem lösen?

 
hoz:

Wie kann ich diesen verdammten Fehler loswerden? Ich habe es satt. Ich überprüfe jeden Eingabeparameter der Funktion. Für mich sieht es im Moment so aus:

Das heißt, wenn der Parameter nicht geändert wurde, besteht keine Notwendigkeit, ihn zu ändern. Ich habe das noch nie gemacht, aber ich habe beschlossen...

Dann werden die Parameter wie folgt an die Auftragsänderungsmethode übergeben:

Nw-Ausgabe im Protokoll:

Die Zeitschrift meldet uns also, wie die Änderung: OK, aber dann einen Fehler. Keiner der Parameter hat sich geändert.

Der Beschluss ist noch nicht rechtskräftig. Wir können also den Eröffnungs-, Stopp- und Mitnahmepreis ändern. Soweit ich weiß, stand dies nicht im Widerspruch zu den Unterlagen.

Wer hat so etwas schon einmal erlebt? Wie kann man das Problem lösen?

Sie gehen falsch mit dem Fehlercode um und vergessen, dass der Fehlercode nach Ihren zahlreichen Funktionen bereits überschrieben ist.

Wenn also ein Fehler auftritt, müssen Sie den Fehlercode in einer lokalen Variablen speichern und ihn von dort aus nach der Masse der nachfolgenden Aufrufe ausdrucken.

 
Renat:

Sie gehen falsch mit dem Fehlercode um und vergessen, dass der Fehlercode nach Ihren zahlreichen Funktionen bereits überschrieben ist.

Wenn also ein Fehler auftritt, muss sein Code in einer lokalen Variablen gespeichert werden, und erst dann, nach der Masse der nachfolgenden Aufrufe, wird er ausgedruckt.

Warum erstellen Sie nicht auch ein Fehlerfeld? Es steht schwarz auf weiß in der Dokumentation, dass die Variable _LastError die Nummer des letzten Fehlers speichert. Und sie wird durch die Funktion ResetLastError() zurückgesetzt. Wenn zwischen den Aufrufen von _LastError keine weiteren Fehler auftreten, speichert _LastError den Wert des letzten Fehlers. Es gab keine Fehler mehr in meinem Code. Nun, darum geht es nicht.

Außerdem ist es nicht sehr logisch, Variablen für Fehler in jeder Methode zu erstellen und diese Variablen dann in Expert Advisors zu drucken.

Denn wenn es eine Variable zum Sammeln von Fehlern gibt, warum sollte man dann neue erstellen?

 

evillive, was soll das heißen, es gibt keine Kontrollen? Ich schrieb oben:

if (OrderOpenPrice() != ND (fd_MurreyLevelsValue[11]))    \\ Если текущая цена не равна новой.. из массива, то..
   New_OOP = ND (fd_MurreyLevelsValue[11]);               \\.. новая цена равна этому новому значению цены из массива( расчитанного ).
else New_OOP = OrderOpenPrice();                          \\ Иначе новая цена равно текущей цене выбранного ордера. Т.е. не изменяется.
if (OrderStopLoss() != ND (fd_MurreyLevelsValue[12]))
   New_SL = ND (fd_MurreyLevelsValue[12]);
else New_SL = OrderStopLoss();
if (OrderTakeProfit() != ND (fd_MurreyLevelsValue[2]))
   New_TP = ND (fd_MurreyLevelsValue[2]);
else New_TP = OrderTakeProfit();

Ich habe sogar einen Kommentar für den ersten abgegeben. Obwohl dort alles elementar ist.

Wie kann man hier sonst noch nachsehen?

 
Ich überprüfe zweimal, ob es nicht gleich ist und wohin man es erwartet!
 
evillive:
Ich habe es gemerkt, deshalb habe ich aufgeräumt)))
Sie sind unhöflich! ;)
 
borilunad:
Ich überprüfe zweimal, ob es nicht gleich ist und wohin Sie es erwarten!

Boris, was meinst du damit? Denn ich habe es klar geschrieben, dass, wenn der Preis nicht so ist... Ansonsten... Strom... Was soll das bringen? Sie können es 20 Mal überprüfen... :) Das macht keinen Sinn. Ich kämpfe nun schon den zweiten Tag mit diesem Code. Ein solcher Fehler ist mir noch nie untergekommen. Jetzt habe ich mich ihr gestellt. Ich habe all diese Methoden bereits geschrieben und viele Male getestet. Ich habe hier ein Problem festgestellt.

Die Sache ist die, dass ich eher ein Fan von etwas anderen Taktiken bin. Aber beim Schreiben der letzten Eulen bin ich auf diese Panne gestoßen. Das ist mir nicht wissen, wo zu graben, weil pristrintovav alle Code der Länge nach und sonst habe ich keine Gedanken mehr. Aus diesem Grund ist die Funktion OrderModify() eingebaut. Und ich weiß nicht, wie sie umgesetzt wird.

 
hoz:

evillive, was soll das heißen, es gibt keine Kontrollen? Ich schrieb oben:

Ich habe sogar einen Kommentar für den ersten abgegeben. Obwohl dort alles elementar ist.

Wie kann man hier sonst noch nachsehen?

Victor, nach der Überprüfung, wird der neue Wert zugewiesen oder nicht... Das müssen Sie überprüfen.

if (OrderOpenPrice() != ND (fd_MurreyLevelsValue[11])  // Если текущая цена не равна новой.. из массива
 || OrderStopLoss() != ND (fd_MurreyLevelsValue[12])   // или 
 || OrderTakeProfit() != ND (fd_MurreyLevelsValue[2])) // или
  // если одно из условий выполнено пойдём в модифай... 
 
AlexeyVik:

Victor, nachdem er überprüft hat, ob der neue Wert zugewiesen ist oder nicht... Und Sie müssen prüfen

Alexey, und wo haben Sie eine Prüfung, um sicherzustellen, dass der Wert der übergebenen Funktion unverändert ist? Dies habe ich oben bereits berücksichtigt. Und die Notwendigkeit von Änderungen im Allgemeinen wird bereits zu Beginn festgestellt. Dort gibt es Niveaus, und wenn der Indikator meldet, dass sich das Niveau geändert hat, gehen wir weiter...

 
hoz:

Boris, was meinst du damit? Denn ich habe es klar geschrieben, dass, wenn der Preis nicht so ist... Ansonsten... Strom... Was soll das bringen? Sie können es 20 Mal überprüfen... :) Das macht keinen Sinn. Ich kämpfe nun schon den zweiten Tag mit diesem Code. Ein solcher Fehler ist mir noch nie untergekommen. Jetzt habe ich mich ihr gestellt. Ich habe all diese Methoden bereits geschrieben und viele Male getestet. Ich habe hier ein Problem festgestellt.

Die Sache ist die, dass ich eher ein Fan von etwas anderen Taktiken bin. Aber beim Schreiben der letzten Eulen bin ich auf diese Panne gestoßen. Das ist mir selbst nicht klar, wo ich graben soll, weil die Drucker alle Code längs und verkehrt herum, ich habe nicht mehr alle Gedanken. Aus diesem Grund ist die Funktion OrderModify() eingebaut. Und ich weiß nicht, wie es umgesetzt wird...

Victor, Sie Renat, im Allgemeinen richtig festgestellt, Alexey zeigte die notwendige letzte Kontrolle, und früher, überprüfen Sie alle notwendigen Kontrollen für jeden Parameter mit allen Nuancen, um Mehrdeutigkeit der Bedeutung zu vermeiden und ohne fehlende jede Bedingung!
 
hoz:

evillive, was soll das heißen, es gibt keine Kontrollen? Ich schrieb oben:

if (OrderOpenPrice() != ND (fd_MurreyLevelsValue[11]))    \\ Если текущая цена не равна новой.. из массива, то..
   New_OOP = ND (fd_MurreyLevelsValue[11]);               \\.. новая цена равна этому новому значению цены из массива( расчитанного ).
else New_OOP = OrderOpenPrice();                          \\ Иначе новая цена равно текущей цене выбранного ордера. Т.е. не изменяется.
if (OrderStopLoss() != ND (fd_MurreyLevelsValue[12]))
   New_SL = ND (fd_MurreyLevelsValue[12]);
else New_SL = OrderStopLoss();
if (OrderTakeProfit() != ND (fd_MurreyLevelsValue[2]))
   New_TP = ND (fd_MurreyLevelsValue[2]);
else New_TP = OrderTakeProfit();

Ich habe sogar einen Kommentar für den ersten abgegeben. Obwohl dort alles elementar ist.

Wie kann man hier sonst noch nachsehen?

Wir müssen auch überprüfen, dass OrderModify nicht berührt werden sollte, wenn sich keiner der 3 Parameter geändert hat. Oder besser gesagt, wenn sich mindestens einer dieser Parameter geändert hat, gehen Sie erst dann zu OrderModify.
Grund der Beschwerde: