Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 561

 
Ihor Herasko:

Einfach:

ergibt einen Fehler

 
Aleksandr Lishchenko:

Fehlermeldung

Wo liegt der Fehler? Welche Art von Fehler?

 

Hallo. Ich habe die Aufgabe , den vom Benutzer angegebenen Parameter für das Handelsvolumen auf Korrektheit zu prüfen, d.h. das angegebene Lot sollte ein Vielfaches des Lotwechselschritts sein. Dazu ermittle ich den tatsächlichen Rest der Division und vergleiche ihn mit einer Null oder einem Wert, der sehr nahe bei Null liegt (z. B. 0,000000001)

void OnStart()
{
   double volume = 0.03;
   Alert("Результат деления ", volume/MarketInfo(Symbol(), MODE_LOTSTEP));
   Alert("Шаг изменения лота ", MarketInfo(Symbol(), MODE_LOTSTEP));
   Alert("Вешественный остаток ", fmod(volume, MarketInfo(Symbol(), MODE_LOTSTEP)));
}

Ergebnis:

/*
   Вещественный остаток 0,009999999999999998
   Шаг изменения лота 0,01
   Результат деления 3,0
*/

Außerdem ist ein Screenshot beigefügt.

Ich denke, der Rest sollte Null oder eine sehr kleine Zahl sein, aber das Ergebnis ist aus irgendeinem Grund fast 0,01? Wie kann ich dann den Eingabeparameter überprüfen, wenn der Benutzer z. B. versehentlich 0,001 einstellt?

Dateien:
4npm6qh.png  8 kb
 
Aleksandr Teleguz:

Hallo. Ich habe die Aufgabe , den vom Benutzer angegebenen Parameter für das Handelsvolumen auf Korrektheit zu prüfen, d.h. das angegebene Lot sollte ein Vielfaches des Lotwechselschritts sein. Dazu suchen Sie einen realen Rest der Division und vergleichen ihn mit einer Null oder einem Wert, der sehr nahe bei Null liegt (z. B. 0,000000001)

Ergebnis:

Außerdem ist ein Screenshot beigefügt.

Ich denke, der Rest sollte Null oder eine sehr kleine Zahl sein, aber das Ergebnis ist aus irgendeinem Grund fast 0,01? Wie kann ich dann den Eingabeparameter überprüfen, wenn der Benutzer z. B. versehentlich 0,001 einstellt?

Das ist ein bisschen falsch. Als Erstes wird der nächstgelegene korrekte Wert (auf der Grundlage des eingestellten Wertes) berechnet und dann die Differenz zwischen den erhaltenen Werten überprüft. Wenn er gleich Null ist (oder nicht mehr als DBL_EPSILON), ist alles in Ordnung:

void OnStart()
{
   double volume = 0.03;

   double fVolumeMin = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MIN);   
   double fVolumeMax = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MAX);   
   double fVolumeStep = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_STEP); 

   double fNearestCorrectVolume = VolumeCast(volume, fVolumeMin, fVolumeMax, fVolumeStep);
   if (fabs(fNearestCorrectVolume - volume) > DBL_EPSILON)
      Alert("Ошибка");
   else
      Alert("Все ОК");
}

Die Funktion VolumeCast kann von hier übernommen werden.

 
Ihor Herasko:

Wo läuft es schief? Welche Art von Fehler gibt er aus?

1 Fehler, 0 Warnung(en) 2 1
'if' - Ausdrücke sind bei einem Global nicht erlaubt

 

Guten Tag!!!

Leute, könnt ihr mir den Code sagen, wie man einen EA mit einem Konto verknüpft (für das letzte MT4-Update).

Ich danke Ihnen vielmals.

 
Aleksandr Lishchenko:

Guten Tag!

Leute, könnt ihr mir den Code sagen, wie man einen EA mit einem Konto verknüpft (für das letzte MT4-Update).

Ich danke Ihnen vielmals.

Sie haben den Code bereits erhalten.

Sie haben den Fehler selbst gemacht - in der Fehlerbeschreibung steht, dass Sie den Code im Bereich der globalen Variablen und nicht innerhalb von OnTick() oder OnInit() eingegeben haben:

'if' - expressions are not allowed on a global scope

Und mit diesem Wissen versuchen Sie immer noch, Ihren Code vor jemandem anderen zu schützen?
 
Artyom Trishkin:

Der Code wurde Ihnen bereits mitgeteilt.

Sie haben den Fehler selbst gemacht - in der Fehlerbeschreibung steht, dass Sie Code im Bereich der globalen Variablen eingegeben haben, nicht innerhalb von OnTick() oder OnInit():

'if' - expressions are not allowed on a global scope

Und mit diesem Wissen versuchen Sie immer noch, Ihren Code vor jemandem anderen zu schützen?

Ich lerne gerade!

Urteilen Sie nicht! ;)

 
Aleksandr Lishchenko:

1 Fehler, 0 Warnung(en) 2 1
'if' - Ausdrücke sind bei einem Global nicht erlaubt

Zeigen Sie mir, wie Sie den Code angewendet haben. Haben Sie gerade abgeschrieben, was ich geschrieben habe?

 
Ihor Herasko:

Zeigen Sie mir, wie Sie den Code angewendet haben. Haben Sie gerade abgeschrieben, was ich geschrieben habe?

Ich schon :)))