Errores, fallos, preguntas - página 280

 

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

Mis conocimientos sobre el tema son superficiales, así que no puedo valorar lo que has dicho. Escriba al Servicio de Atención al Cliente y le echarán un vistazo.

 

Developerc - Gracias por el trabajo realizado - mt5 es una buena herramienta,

Me gustaría añadir más ejemplos de trabajo con funciones,

clases, etc. Por supuesto que hacerlo en la ayuda - ideal, pero aquí también

Pero aquí sería bueno.


Un agradecimiento especial a los que escriben artículos con ejemplos. Muchas gracias.

 
uncleVic:

Por ahora, tome este archivo como ejemplo.

La clase CSignalCustomMACD es absolutamente idéntica a CSignalMACD, excepto por el hecho de que se basa en la versión "personalizada" del indicador de la entrega estándar.

No olvides añadir una línea en el código fuente del Asesor Experto:

de lo contrario no funcionará en el probador.

Si la carpeta Indicators\Examples no contiene el archivo MACD.ex5, el indicador debe ser compilado.

En un futuro próximo se añadirá un ejemplo a la ayuda.

Muchas gracias, ¡funciona!
 
-Alexey-:
Esto tendría sentido, pero ahora la operación ">" ("<" no lo comprobó) puede devolver verdadero para tales números "iguales en el sentido de la máquina cero". El efecto se detectó porque el resultado del cálculo numérico era mayor de lo teóricamente posible como consecuencia de este efecto, pero después de utilizar las funciones especiales anteriores se hizo realidad. Por eso propongo un complemento a la ayuda.

Basta con utilizar DBL_EPSILON en todas las comparaciones, no es difícil:

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


Si trabaja con precios, normalícelos después de cualquier cálculo y utilice Point/2.0 en lugar 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
 
Gracias.
 

Por alguna razón, la lectura de un array a través de la función FileReadArray no funciona , aunque el fichero esté abierto, contenga datos, 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:

Por alguna razón, la lectura de un array a través de la función FileReadArray no funciona , aunque el archivo esté abierto, contenga datos, etc:

Primero se escriben los datos en el archivo de la misma manera, ver el formato...

Y luego lee...

 
AlexSTAL:

Primero se escriben los datos en un archivo de la misma manera, ver el formato...

Y luego lee...

Escribo los datos una línea a la vez en el indicador OnCalculated o OnInit del Asesor Experto a través de FileWrite.

Como resultado, el archivo es una lista de números:

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

Por supuesto, también podríamos escribir el array como un todo, pero ¿por qué deberíamos hacer pasos innecesarios y cuál es el error aquí?

No he podido encontrar ninguna restricción al respecto en la documentación.

 
DV2010:

Escribo los datos línea por línea en el indicador OnCalculated o OnInit del Asesor Experto a través de FileWrite.

Como resultado, el archivo es una lista de números:

10000
10000
9996.85
10005.25
10023.4
10029.7

Por supuesto, también se puede escribir el array como un todo, pero ¿por qué tengo que hacer cosas innecesarias y cuál es el error aquí?

No he encontrado ninguna limitación al respecto en la documentación.

En primer lugar, trate de ver los formatos de ambos archivos antes de discutir
 
DV2010:

Por alguna razón, la lectura de un array a través de la función FileReadArray no funciona , aunque el fichero esté abierto, contenga datos, etc:


De la ayuda:

FileReadArray

Lee matrices de cualquier tipo, excepto matrices de cadenas (pueden ser matrices de estructuras que no contengan cadenas y matrices dinámicas), de un archivo binario desde la posición actual del puntero del archivo.