Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Das ist nicht der Fall. Es kommt zu einer Verbindungsunterbrechung von mehreren Takten, mehrere Takte werden mit Müll nicht initialisiert.
Entweder gab es, wie Dmitry oben sagte, eine Verbindungsunterbrechung von mehreren Takten... Übrigens, wird prev_calculated auch 0 zurückgeben, wenn die Verbindung fehlschlägt?
Offenbar gab es zu diesem Zeitpunkt tatsächlich eine Unterbrechung der Kommunikation.
2016.10.19 04:45:37.260 Network '4092672': scanning network for access points
2016.10.19 04:45:36.630 Network '4092672': trading has been enabled - hedging mode
2016.10.19 04:45:36.630 Network '4092672': terminal synchronized with MetaQuotes Software Corp.
2016.10.19 04:45:36.000 Network '4092672': previous successful authorization performed from 31.173.80.3 on 2016.10.18 17:51:14
2016.10.19 04:45:36.000 Network '4092672': authorized on MetaQuotes-Demo through Access Point SG Singapore (ping: 583.86 ms)
2016.10.19 04:42:57.680 Network '4092672': connection to MetaQuotes-Demo lost
Und es ist sehr wahrscheinlich, dass prev_calculated bei einem Bruch 0 zurückgibt.
OK, es war eine lange Pause, aber was hat die anderen prev_calculated Nullen verursacht?
Aus diesen Zeilen.
2016.10.18 23:51:20.865 Network '4092672': scanning network for access points
Bis auf die oben genannten gibt es keine anderen Rekorde als Handelsrekorde wie diesen.
Und Sie können sehen, wie viele Nullen von prev_calculated in meinem vorherigen Beitrag waren.
Möglicherweise liegt der Fehler hier:
{
minEquity = 0;
maxEquity = 0;
}
minEquity = NormalizeDouble(fmin((minEquity == 0 ? bal : minEquity), equity), 2);
maxEquity = NormalizeDouble(fmax(maxEquity, equity), 2);
Wenn ein neuer Balken eintrifft, setzen Sie die Werte auf 0 zurück - gut. Aber dann prüft man minEquity und 0 auf Gleichheit, was nicht empfehlenswert ist.
Um meine Worte zu beweisen, hier ist Ihr Bild. Sie können sehen, dass die "Müll"-Werte, wie Sie sagten, gegen Null gehen.
Natürlich sollten Sie ein Datenfenster mit dem Wert "Papierkorb" in das Bild einfügen.Können Sie näher erläutern, warum diese Methode nicht empfohlen wird?
Dieser Teil des Codes (minEquity == 0? bal : minEquity) gibt , wenn minEquity == 0 ist, den Wert von bal zurück, der zuvor ermittelt wurde; der Wert von minEquity ändert sich nicht, bis die Funktion fmin() beendet wird.
Obwohl ich zustimme, dass ein solches Schreiben ein wenig riskant ist... aber das ist nicht das Problem.
Können Sie näher erläutern, warum diese Methode nicht empfohlen wird?
dieser (minEquity == 0? bal : minEquity) Teil des Codes gibt , wenn minEquity == 0 ist , den zuvor ermittelten Wert von bal zurück; der Wert von minEquity ändert sich erst, wenn die Funktion fmin() beendet ist
Obwohl ich zustimme, dass diese Art, den Code zu schreiben, ein wenig riskant ist... aber das ist nicht das Problem.
Ich habe genau davon gesprochen: minEquity ==0. Du vergleichst mit der Gleichheit der beiden Zahlen. Das könnte den Rückgang der Werte auf 0 erklären.
Ich sehe, die richtige Antwort ist minEquity ==0.0 ... Ich kann mich nicht daran gewöhnen.
Und den letzten Satz verstehe ich überhaupt nicht. Welche Werte bis 0?
Ich sehe, die richtige Antwort ist minEquity ==0.0 ... Ich kann mich nicht daran gewöhnen.
Und den letzten Satz verstehe ich überhaupt nicht. Welche Werte bis 0?
Aber ich weiß nicht, ob eine implizite Typkonvertierung einen Fehler verursachen kann. Ich meinte den Vergleich von realen Typen. D.h. hier würde ich es sicherheitshalber so schreiben:
bool CompareDoubles(double number1,double number2)
{
if(NormalizeDouble(number1-number2,8)==0) return(true);
else return(false);
}
Ich weiß jedoch nicht, ob eine implizite Typumwandlung einen Fehler verursachen kann, ich sprach im Prinzip über den Vergleich realer Typen. D.h. hier würde ich es aus Gründen der Zuverlässigkeit so schreiben:
bool CompareDoubles(double number1,double number2)
{
if(NormalizeDouble(number1-number2,8)==0) return(true);
else return(false);
}
Ja, meine Version zählt Geld mit zwei Dezimalstellen. Dies ist kein Zitat, also kann man es nicht so genau nehmen.
Es geht nicht um Akribie, es geht um Genauigkeit. In Ihrem Fall könnte dies dazu führen, dass ein Nullwert in den Puffer geschrieben wird. Wenn Sie es nicht so genau nehmen wollen, machen Sie es so:
{
minEquity = -1.0;
maxEquity = 0.0;
}
minEquity = NormalizeDouble(fmin((minEquity < 0 ? bal : minEquity), equity), 2);
maxEquity = NormalizeDouble(fmax(maxEquity, equity), 2);
Dann tritt kein Fehler auf.
Es geht nicht um Akribie, es geht um Genauigkeit. In Ihrem Fall könnte dies dazu führen, dass ein Nullwert in den Puffer geschrieben wird. Wenn Sie diese Präzision nicht wünschen, machen Sie es so:
{
minEquity = -1.0;
maxEquity = 0.0;
}
minEquity = NormalizeDouble(fmin((minEquity < 0 ? bal : minEquity), equity), 2);
maxEquity = NormalizeDouble(fmax(maxEquity, equity), 2);
In diesem Fall liegt kein Fehler vor.
Warum bin ich so dumm? Wie konnte ich nicht ahnen, dass es besser ist, minEquity mit einem Wert ungleich Null zu initialisieren? Dann wird alles einfacher sein...
{
minEquity = DBL_MAX;
maxEquity = 0.0;
}
minEquity = NormalizeDouble(fmin(minEquity, equity), 2);
maxEquity = NormalizeDouble(fmax(maxEquity, equity), 2);
Sie können auch maxEquity = DBL_MIN verwenden;
Warum bin ich so dumm? Wie konnte ich nicht ahnen, dass es besser ist, minEquity mit einem Wert ungleich Null zu initialisieren? Dann wäre alles einfacher...
{
minEquity = DBL_MAX;
maxEquity = 0.0;
}
minEquity = NormalizeDouble(fmin(minEquity, equity), 2);
maxEquity = NormalizeDouble(fmax(maxEquity, equity), 2);
Na ja... Oder so...