Erreurs, bugs, questions - page 280

 

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

Ma connaissance du sujet est superficielle, je ne peux donc pas évaluer ce que vous avez dit. Écrivez au Service Desk et il examinera la question de plus près.

 

Developerc - Merci pour le travail effectué - mt5 est un bon outil,

J'aimerais ajouter d'autres exemples de travail avec les fonctions,

cours, etc. Bien sûr, pour le faire dans l'aide - idéal, mais ici aussi

Mais ici, ce serait bien.


Un grand merci à ceux qui écrivent des articles avec des exemples. Merci beaucoup.

 
uncleVic:

Pour l'instant, prenons ce fichier comme exemple.

La classe CSignalCustomMACD est absolument identique à CSignalMACD, à l'exception du fait qu'elle est basée sur la version "personnalisée" de l'indicateur de la livraison standard.

N'oubliez pas d'ajouter une ligne dans le code source de l'Expert Advisor :

sinon il ne fonctionnera pas dans le testeur.

Si le dossier Indicators\Examples ne contient pas le fichier MACD.ex5, l'indicateur doit être compilé.

Un exemple sera ajouté à l'aide dans un avenir proche.

Merci beaucoup, ça marche !
 
-Alexey-:
Cela aurait du sens, mais maintenant l'opération ">" ("<" n'a pas été vérifié) peut retourner vrai pour de tels nombres "égaux au sens de la machine zéro". Cet effet a été détecté parce que le résultat du calcul numérique était plus grand que ce qui est théoriquement possible en raison de cet effet, mais après avoir utilisé les fonctions spéciales ci-dessus, il est devenu vrai. C'est pourquoi je propose un ajout à l'aide.

Utilisez simplement DBL_EPSILON dans toutes les comparaisons, ce n'est pas difficile :

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


Si vous travaillez avec des prix, normalisez-les après tout calcul et utilisez Point/2.0 au lieu de 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
 
Merci.
 

Pour une raison quelconque, la lecture d'un tableau via la fonction FileReadArray ne fonctionne pas , bien que le fichier soit ouvert, contienne des données, etc :

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:

Pour une raison quelconque, la lecture d'un tableau via la fonction FileReadArray ne fonctionne pas , bien que le fichier soit ouvert, contienne des données, etc :

Vous écrivez d'abord les données dans le fichier de la même manière, voir le format...

Et puis lire...

 
AlexSTAL:

Vous écrivez d'abord les données dans un fichier de la même manière, voir le format...

Et puis lire...

J'écris les données une ligne à la fois dans l'indicateur OnCalculated ou OnInit de l'Expert Advisor via FileWrite.

En conséquence, le fichier est une liste de chiffres :

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

Bien sûr, nous pourrions aussi écrire le tableau dans son ensemble, mais pourquoi devrions-nous faire des étapes inutiles et quelle est l'erreur ici ?

Je n'ai pas trouvé de restrictions à ce sujet dans la documentation.

 
DV2010:

J'écris les données ligne par ligne dans l'indicateur OnCalculated ou OnInit de l'Expert Advisor via FileWrite.

En conséquence, le fichier est une liste de chiffres :

10000
10000
9996.85
10005.25
10023.4
10029.7

Bien sûr, vous pouvez aussi écrire le tableau dans son ensemble, mais pourquoi dois-je faire des choses inutiles et quelle est l'erreur ici ?

Je n'ai pas trouvé de limitations à ce sujet dans la documentation.

Essayez d'abord de regarder les formats des deux fichiers avant de discuter.
 
DV2010:

Pour une raison quelconque, la lecture d'un tableau via la fonction FileReadArray ne fonctionne pas , bien que le fichier soit ouvert, contienne des données, etc :


De l'aide :

FileReadArray

Lit des tableaux de n'importe quel type à l'exception des tableaux de chaînes de caractères (peut être un tableau de structures ne contenant pas de chaînes de caractères et des tableaux dynamiques) d'un fichier binaire à partir de la position actuelle du pointeur de fichier.