Errori, bug, domande - pagina 280

 

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

La mia conoscenza dell'argomento è superficiale, quindi non posso valutare quello che hai detto. Scrivete al Service Desk e loro daranno un'occhiata più da vicino.

 

Developerc - Grazie per il lavoro svolto - mt5 è un buon strumento,

Vorrei aggiungere altri esempi di lavoro con le funzioni,

classi ecc. Naturalmente per farlo nell'aiuto - ideale, ma anche qui

Ma qui sarebbe bello.


Un ringraziamento speciale a coloro che scrivono articoli con esempi. Grazie mille.

 
uncleVic:

Per ora, prendete questo file come esempio.

La classe CSignalCustomMACD è assolutamente identica a CSignalMACD, eccetto per il fatto che è basata sulla versione "personalizzata" dell'indicatore dalla consegna standard.

Non dimenticate di aggiungere una linea nel codice sorgente dell'Expert Advisor:

altrimenti non funzionerà nel tester.

Se la cartella Indicators\Examples non contiene il file MACD.ex5, l'indicatore deve essere compilato.

Un esempio sarà aggiunto all'aiuto nel prossimo futuro.

Grazie mille, funziona!
 
-Alexey-:
Questo avrebbe senso, ma ora l'operazione ">" ("<" non ha controllato) può restituire vero per tali numeri "uguali nel senso della macchina zero". L'effetto è stato rilevato perché il risultato del calcolo numerico era più grande di quello teoricamente possibile a causa di questo effetto, ma dopo aver usato le funzioni speciali di cui sopra è diventato vero. Ecco perché propongo un'aggiunta all'aiuto.

Basta usare DBL_EPSILON in tutti i confronti, non è difficile:

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


Se lavorate con i prezzi, normalizzateli dopo ogni calcolo e usate Point/2.0 invece di 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
 
Grazie.
 

Per qualche motivo, la lettura di un array tramite la funzione FileReadArray non funziona , anche se il file è aperto, contiene dati, ecc:

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:

Per qualche motivo, la lettura di un array tramite la funzione FileReadArray non funziona , anche se il file è aperto, contiene dati, ecc:

Prima scrivi i dati nel file nello stesso modo, vedi il formato...

E poi leggere...

 
AlexSTAL:

Prima scrivi i dati in un file nello stesso modo, vedi il formato...

E poi leggere...

Scrivo i dati una linea alla volta nell'indicatore OnCalculated o OnInit dell'Expert Advisor tramite FileWrite.

Di conseguenza, il file è una lista di numeri:

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

Naturalmente, potremmo anche scrivere l'array nel suo insieme, ma perché dovremmo fare passi inutili e qual è l'errore qui?

Non ho trovato alcuna restrizione su questo nella documentazione.

 
DV2010:

Scrivo i dati riga per riga nell'indicatore OnCalculated o OnInit di Expert Advisor tramite FileWrite.

Di conseguenza, il file è una lista di numeri:

10000
10000
9996.85
10005.25
10023.4
10029.7

Naturalmente, puoi anche scrivere l'array nel suo insieme, ma perché devo fare cose inutili e qual è l'errore qui?

Non ho trovato alcuna limitazione su questo argomento nella documentazione.

Prima prova a guardare i formati di entrambi i file prima di discutere
 
DV2010:

Per qualche motivo, la lettura di un array tramite la funzione FileReadArray non funziona , anche se il file è aperto, contiene dati, ecc:


Dalla guida:

FileReadArray

Legge array di qualsiasi tipo eccetto gli array di stringhe (può essere un array di strutture che non contengono stringhe e array dinamici) da un file binario dalla posizione corrente del puntatore al file.