mt5 strategie tester ticks - Seite 11

 
RaptorUK:

Ich möchte in der Lage sein, die von mir verwendeten Verlaufsdaten zu kontrollieren, damit ich Tests (Strategy Tester) unter kontrollierten Bedingungen wiederholen kann.

Welche kontrollierten Bedingungen?

Dankeschön

 
WhooDoo22:

Welche kontrollierten Bedingungen?

Dankeschön

Die Bedingungen, die ich auswähle, nicht die Bedingungen, die mein Broker auswählt. Wie wollen Sie denn sonst testen? zufällige Bedingungen für jeden Test? aber wir wollen nicht vom Thema abweichen.
 
RaptorUK:
Die Bedingungen, die ich auswähle, sind nicht die Bedingungen, die mein Broker auswählt. Wie wollen Sie sonst testen? zufällige Bedingungen für jeden Test? aber wir wollen nicht vom Thema abweichen.

Verstanden.

Dankeschön

 
angevoyageur:

Nein. Wenn Sie meinen Link und/oder den von RaptorUK lesen würden, wäre Ihnen das klarer. Wenn nicht, lesen Sie noch einmal :-D

1.000000000006551e-005 ist einfach eine andere Schreibweise für 0.00001000000000006551.

Hallo angevoyageur,

1.000000000006551e-005

0.00001000000000006551

Der Dezimalwert des zweiten Doubles wird fünfmal nach links verschoben, ABER ;) kann in diesem Format im Tester nicht zurückgegeben werden, da Doubles maximal sechzehn Stellen (signifikante Stellen) rechts vom Dezimalwert zurückgeben.



Moderator
1651
angevoyageur 2013.04.14 09:39
WhooDoo22:

Hallo MQL5-Gemeinschaft,

https://www.mql5.com/en/docs/common/comment

"Daten vom Typ double werden mit der Genauigkeit von bis zu 16 Stellen nach dem Komma ausgegeben und können entweder im traditionellen oder im wissenschaftlichen Format ausgegeben werden, je nachdem, welche Notation kompakter ist. Daten vom Typ float werden mit 5 Stellen nach dem Komma ausgegeben. Um reelle Zahlen mit einer anderen Genauigkeit oder in einem vordefinierten Format auszugeben, verwenden Sie die Funktion DoubleToString()."

USDJPY's Preisdarstellung in 98.370 ist Daten des Float-Typs (Ausgabe mit 5 Stellen nach dem Komma).

Die Kursdarstellung des USDJPY in -0.0019999999995339 ist eine Angabe vom Typ double, traditionelles Format (Ausgabe mit bis zu 16 Nachkommastellen).

Warum liefert double -0.001999999999533[9 ] eine 18. Nach kommastelle, wenn ein double nur bis zu 16 Nachkommastellen ausgibt?

Dankeschön

Preise sind immer doppelt, 98,370 ist ein Double. Es gibt 16 signifikante Ziffern. Nullen sind nicht signifikant.


Wenn Nullen nicht signifikant sind, warum kann dann im Testernicht der Wert 0.00001000000000006551 anstelle von 1.000000000006551e-005 zurückgegeben werden? Ich würde es vorziehen, Berechnungen im Format 0,00001000000000006551 durchzuführen!

Vielen Dank!

 
WhooDoo22:


Wenn Nullen nicht signifikant sind, warum kann dann nicht der Wert 0.00001000000000006551 anstelle von 1.000000000006551e-005 im Tester ausgegeben werden? Ich würde es vorziehen, Berechnungen im Format 0.00001000000000006551 durchzuführen!

Eine Fließkommazahl ( double ) wird intern immer in diesem Format gehalten ... 1.000000000006551e-005, haben Sie die Informationen unter den angegebenen Links gelesen und verstanden ?

Von hier:Fließkommazahlen

"Eine IEEE-754-Fließkommazahl (4 Byte) oder ein Double (8 Byte) besteht aus drei Komponenten (es gibt auch ein analoges 96-Bit-Format mit erweiterter Genauigkeit nach IEEE-854): ein Vorzeichenbit, das angibt, ob die Zahl positiv oder negativ ist, ein Exponent, der die Größenordnung angibt, und eine Mantisse, die die tatsächlichen Ziffern der Zahl angibt. Am Beispiel von Gleitkommazahlen mit einfacher Genauigkeit sieht die Bitanordnung wie folgt aus:"

3 Teile

VorzeichenMantisseExponent
+1.000000000006551-005

Wenn Sie 0,00001000000000xyz sehen möchten, verwenden Sie DoubleToStr(), um die Ausgabe nach Ihren Wünschen zu formatieren.

Articles - Understanding Floating Point Number Representation - Cprogramming.com
Articles - Understanding Floating Point Number Representation - Cprogramming.com
  • www.cprogramming.com
Floating point representations vary from machine to machine, as I've implied. Fortunately one is by far the most common these days: the IEEE-754 standard. This standard is prevalent enough that it's worthwhile to look at it in depth; chances are good you'd be able to use this information on your platform (look for ieee754.h). An IEEE-754...
 
RaptorUK:

Eine Fließkommazahl ( double ) wird intern immer in diesem Format gehalten ... 1.000000000006551e-005, haben Sie die Informationen unter den angegebenen Links gelesen und verstanden ?

Von hier:Fließkommazahlen

"Eine IEEE-754-Fließkommazahl (4 Byte) oder ein Double (8 Byte) besteht aus drei Komponenten (es gibt auch ein analoges 96-Bit-Format mit erweiterter Genauigkeit nach IEEE-854): ein Vorzeichenbit, das angibt, ob die Zahl positiv oder negativ ist, ein Exponent, der die Größenordnung angibt, und eine Mantisse, die die tatsächlichen Ziffern der Zahl angibt. Am Beispiel von Gleitkommazahlen mit einfacher Genauigkeit sieht die Bitanordnung wie folgt aus:"

3 Teile

VorzeichenMantisseExponent
+1.000000000006551-005

Wenn Sie 0,00001000000000xyz sehen wollen, verwenden Sie DoubleToStr(), um die Ausgabe nach Ihren Wünschen zu formatieren.

Ja, ich habe alle von Ihnen angegebenen Links gelesen und fand sie hilfreich, vielen Dank nochmals für die Bereitstellung. Ich würde gerne DoubleToString einbinden und den vorletzten Stellenwert des Double (Beispiel: CADJPY 95.9[5]9) als zweiten Parameter von DoubleToString wählen. Ich glaube nicht, dass dieses "can price!=price"-Problem allzu schwer zu lösen ist! Was sagen Sie zu diesem Problem?

Ich danke Ihnen

 
WhooDoo22:

Ja, ich habe alle von Ihnen angegebenen Links gelesen und fand sie hilfreich, vielen Dank nochmals für die Bereitstellung. Mir würde es gefallen, DoubleToString einzubinden und den vorletzten Wert des Double (Beispiel: CADJPY 95.9[5]9) als zweiten Parameter von DoubleToString zu wählen. Ich glaube nicht, dass dieses "can price!=price"-Problem allzu schwer zu lösen ist! Was sagen Sie dazu?

Sie meinen also so etwas wie dies?

double value = 95.959;

Print("Value: ", DoubleToStr(value, _Digits - 1) );

Can price != price ist ein anderes, aber damit zusammenhängendes Problem, das nicht wirklich gelöst werden kann, da man erst einmal verstehen muss, was das Problem ist ... dann kann man es umgehen.

 
RaptorUK:

Sie meinen also so etwas wie das hier?

Kann Preis != Preis ist ein anderes, aber etwas damit zusammenhängendes Problem. Es kann nicht wirklich gelöst werden, zuerst muss man verstehen, was das Problem ist ... dann kann man es umgehen.

double value=95.959;

Print("value returns ",DoubleToString(value,2));//value's expected print return is 95.95.

Was meinen Sie, was dieses "Kann-Preis != Preis"-Problem ist?

Ich danke Ihnen

 

WhooDoo22:

...

Preise sind immer doppelt, 98,370 ist ein Doppeltes. Es gibt 16 signifikante Ziffern. Nullen sind nicht signifikant.

Wenn Nullen nicht signifikant sind, warum konnte dannim Tester nicht der Wert 0,00001000000000006551 anstelle von 1,000000000006551e-005zurückgegeben werden? Ich würde es vorziehen, Berechnungen im Format 0,00001000000000006551 durchzuführen!

Vielen Dank für Ihre Hilfe.

Das könnte sein, es ist nur eine Wahl der Formatierung des Ausgabewerts.

Alle Äquivalente
0.00001000000000006551
0.0001000000000006551e-001
0.001000000000006551e-002
0.01000000000006551e-003
0.1000000000006551e-004
1.000000000006551e-005

Eben weil die Nullen nicht signifikant sind

WhooDoo22:

Ja, ich habe alle von Ihnen angegebenen Links gelesen und fand sie hilfreich, vielen Dank noch einmal für die Bereitstellung. Mir würde es gefallen, DoubleToString einzubinden und den vorletzten Stellenwert des Doubles (Beispiel: CADJPY 95.9[5]9) als zweiten Parameter von DoubleToString zu wählen. Ich glaube nicht, dass das Problem "can price!=price" allzu schwer zu lösen ist! Was sagen Sie zu diesem Problem?

Dankeschön

Sorry, aber ich verstehe diesen Satz nicht.
 
angevoyageur:

Das könnte sein, es ist nur eine Wahl der Formatierung des Ausgabewerts.

Alle Äquivalente
0.00001000000000006551
0.0001000000000006551e-001
0.001000000000006551e-002
0.01000000000006551e-003
0.1000000000006551e-004
1.000000000006551e-005

Eben weil die Nullen nicht signifikant sind

Tut mir leid, aber ich verstehe diesen Satz nicht.

"Entschuldigung, aber ich verstehe diesen Satz nicht."

double value=95.959;

Print("value returns ",DoubleToString(value,2));//value's expected print return is 95.95.

Dankeschön