Fehler, Irrtümer, Fragen - Seite 280

 

-Alexey-:
Это было бы логично, но сейчас операция ">" ("<" не проверял) может возвращать результ true для таких чисел "равных в смысле машинного нуля". Обнаружился эффект т.к. результат  численного расчета получился больше теоретически возможного в результате такого эффекта, а после использования спец. функций, что выше - стал правильным. Поэтому и предлагаю ввести дополнение в справку.

Ich kenne mich mit dem Thema nur oberflächlich aus, so dass ich nicht beurteilen kann, was Sie gesagt haben. Wenden Sie sich an den Servicedesk, der sich die Sache genauer ansehen wird.

 

Developerc - Danke für die geleistete Arbeit - mt5 ist ein gutes Werkzeug,

Ich würde gerne weitere Beispiele für die Arbeit mit Funktionen hinzufügen,

Klassen usw. Natürlich in der Hilfe zu tun - ideal, aber auch hier

Aber hier wäre es gut.


Ein besonderer Dank geht an diejenigen, die Artikel mit Beispielen schreiben. Ich danke Ihnen vielmals.

 
uncleVic:

Nehmen Sie zunächst diese Datei als Beispiel.

Die Klasse CSignalCustomMACD ist absolut identisch mit CSignalMACD, mit der Ausnahme, dass sie auf der "benutzerdefinierten" Version des Indikators aus der Standardauslieferung basiert.

Vergessen Sie nicht, eine Zeile in den Quellcode des Expert Advisors einzufügen:

sonst wird es im Tester nicht funktionieren.

Wenn der Ordner Indicators\Examples nicht die Datei MACD.ex5 enthält, sollte der Indikator kompiliert werden.

Ein Beispiel wird in Kürze in die Hilfe aufgenommen.

Herzlichen Dank, es funktioniert!
 
-Alexey-:
Das wäre sinnvoll, aber jetzt ist die Operation ">" ("<" wurde nicht geprüft) kann für solche Zahlen, die "gleich im Sinne von Maschinennull" sind, true zurückgeben. Der Effekt wurde entdeckt, weil das Ergebnis der numerischen Berechnung aufgrund dieses Effekts größer war als theoretisch möglich, aber nach der Verwendung der oben genannten speziellen Funktionen wurde es wahr. Deshalb schlage ich eine Ergänzung der Hilfe vor.

Verwenden Sie einfach DBL_EPSILON in allen Vergleichen, es ist nicht schwer:

if ( a - b > DBL_EPSILON ) // a > b
if ( b - a > DBL_EPSILON ) // a < b
if ( MathAbs( a - b ) < DBL_EPSILON ) // a == b


Wenn Sie mit Preisen arbeiten, normalisieren Sie diese nach jeder Berechnung und verwenden Sie Point/2.0 anstelle von DBL_EPSILON:

price_1 = NormalizeDouble( Ask + 25 * Point, Digits );
price_2 = NormalizeDouble( indicator_value, Digits );

if ( price_1 - price_2 > Point/2.0 ) // price_1 > price_2
if ( price_2 - price_1 > Point/2.0 ) // price_1 < price_2
if ( MathAbs( price_1 - price_2 ) < Point/2.0 ) // price_1 == price_2
Документация по MQL5: Проверка состояния / Point
Документация по MQL5: Проверка состояния / Point
  • www.mql5.com
Проверка состояния / Point - Документация по MQL5
 
Ich danke Ihnen.
 

Aus irgendeinem Grund funktioniert das Lesen eines Arrays über die Funktion FileReadArray nicht , obwohl die Datei geöffnet ist, Daten enthält usw:

string   filename="equity FileWrite23.txt";
int      handle;
int      NumberCopyElements;
string   common_folder;
string   Array[];

void OnInit(){
   common_folder=TerminalInfoString(TERMINAL_COMMONDATA_PATH);
   handle=FileOpen(filename,FILE_READ|FILE_COMMON);
   if(handle!=INVALID_HANDLE)
      Print("Equity FileWrite23 - OnInit(): Удалось открыть файл ",filename,".  Ошибка ",GetLastError());
      else
      Print("Equity FileWrite23 - OnInit(): Не удалось открыть файл ",filename,".  Ошибка ",GetLastError());

   NumberCopyElements = FileReadArray(handle,Array,0,WHOLE_ARRAY);
      PrintFormat("Equity FileWrite23 - OnInit(): Записано %d байт в общую папку всех терминалов - %s",NumberCopyElements,common_folder);
   FileClose(handle);

}





















2011.01.26 16:27:00     Core 1  connect closed
2011.01.26 16:27:00     Core 1  log file "C:\Program Files\MetaTrader 5\Tester\Agent-127.0.0.1-3000\logs\20110126.log" written
2011.01.26 16:27:00     Core 1  EURUSD,H1: 5516 ticks (23 bars) generated within 15 ms (total bars in history 6419, total time 218 ms)
2011.01.26 16:27:00     Core 1  OnTester result 0
2011.01.26 16:27:00     Core 1  2011.01.14 00:00:00   Equity FileWrite23 - OnInit(): Записано 0 байт в общую папку всех терминалов - C:\Documents and Settings\All Users\Application Data\MetaQuotes\Terminal\Common
2011.01.26 16:27:00     Core 1  2011.01.14 00:00:00   Equity FileWrite23 - OnInit(): Удалось открыть файл equity FileWrite23.txt.  Ошибка 0
2011.01.26 16:27:00     Core 1  EURUSD,H1: testing of Experts\_My\Experts\Expert1\Expert Small FileWriteEquity.ex5 from 2011.01.14 00:00 to 2011.01.15 00:00 started
2011.01.26 16:27:00     Core 1  EURUSD,H1 (Alpari-Demo): 1 minutes OHLC ticks generating. OnTick executed on the bar begin only
2011.01.26 16:27:00     Core 1   Intel Pentium 4  3.40 GHz, 3063 MB, PR39
2011.01.26 16:27:00     Core 1  4255 bytes of total initialization data received
2011.01.26 16:27:00     Core 1  successfully initialized
2011.01.26 16:27:00     Core 1  initial deposit 10000.00 USD, leverage 1:100
2011.01.26 16:27:00     Core 1  expert file added: Experts\_My\Experts\Expert1\Expert Small FileWriteEquity.ex5. 4106 bytes loaded
2011.01.26 16:27:00     Core 1  common synchronization completed
2011.01.26 16:27:00     Tester  EURUSD,H1 (Alpari-Demo): testing of Experts\_My\Experts\Expert1\Expert Small FileWriteEquity.ex5 from 2011.01.14 00:00 to 2011.01.15 00:00 to be started2011.01.26 16:27:00     Core 1  authorized (agent build 384)
2011.01.26 16:27:00     Core 1  connected
2011.01.26 16:27:00     Core 1  connecting to 127.0.0.1:3000


 
DV2010:

Aus irgendeinem Grund funktioniert das Lesen eines Arrays über die Funktion FileReadArray nicht , obwohl die Datei geöffnet ist, Daten enthält, etc:

Sie schreiben die Daten zunächst auf die gleiche Weise in die Datei, siehe das Format...

Und dann lesen...

 
AlexSTAL:

Sie schreiben die Daten zunächst auf die gleiche Weise in eine Datei, siehe das Format...

Und dann lesen...

Ich schreibe Daten zeilenweise im OnCalculated-Indikator oder OnInit des Expert Advisors über FileWrite.

Die Datei besteht also aus einer Liste von Zahlen:

10000
10000
9996,85
10005,25
10023,4
10029,7

Natürlich könnten wir das Array auch als Ganzes schreiben, aber warum sollten wir unnötige Schritte machen und wo liegt hier der Fehler?

Ich konnte in der Dokumentation keine diesbezüglichen Einschränkungen finden.

 
DV2010:

Ich schreibe die Daten Zeile für Zeile in den OnCalculated-Indikator oder OnInit des Expert Advisors über FileWrite.

Die Datei besteht also aus einer Liste von Zahlen:

10000
10000
9996.85
10005.25
10023.4
10029.7

Natürlich kann man das Array auch als Ganzes schreiben, aber warum muss ich unnötige Dinge tun und wo liegt der Fehler?

Ich habe in der Dokumentation keine Einschränkungen zu diesem Thema gefunden.

Schauen Sie sich zunächst die Formate beider Dateien an, bevor Sie darüber diskutieren
 
DV2010:

Aus irgendeinem Grund funktioniert das Lesen eines Arrays mit der Funktion FileReadArray nicht , obwohl die Datei geöffnet ist, Daten enthält, usw:


Aus der Hilfe:

FileReadArray

Liest Arrays beliebigen Typs, außer String-Arrays (kann ein Array von Strukturen sein, die keine Strings enthalten, und dynamische Arrays), aus einer Binärdatei ab der aktuellen Position des Dateizeigers.

Grund der Beschwerde: