[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 470

 
iliaalyoshin >>:


Разные приёмы? Какие, например?

if (NormalizeDouble(a, 4)==NormalizeDouble(b, 4)) { ... }

 
sergeev >>:

if (NormalizeDouble(a, 4)==NormalizeDouble(b, 4)) { ... }


Yo también lo he intentado, y por si acaso, en lugar de Dígitos he escrito 4, luego 5, luego 6... No funciona.
 


Gracias. Efectivamente, el artículo es muy informativo. Pero no he encontrado la función bool CompareDoubles en el MetaEditor...
 


¿O quizás no entiendo del todo, o más bien no entiendo lo que es una biblioteca?
 
iliaalyoshin писал(а) >>


¿O quizás no entiendo del todo, o más bien no entiendo lo que es una biblioteca?


Una función para comparar números reales
//+------------------------------------------------------------------+
//| correct comparison of 2 doubles                                  |
//+------------------------------------------------------------------+
bool CompareDoubles(double number1,double number2)
  {
   if(NormalizeDouble(number1-number2,8)==0) return(true);
   else return(false);
  }
 
Camaradas profesionales, ayúdenme.
¿Podría decirme qué hacer aquí?

Quiero leer números de un archivo en las matrices correspondientes.

Los números del archivo tienen la forma 1.2121;1.2323;1.3434;1.4545

Les preparo las siguientes matrices: double s1[], s2[], r1[], r2[]

en la etapa de inicialización leo lo siguiente

k=0;
//----------------------------------------------

Handle=FileOpen(File_Name,FILE_CSV|FILE_READ,";");// Открытие файла
if(Handle<0) // Неудача при открытии файла
{
if(GetLastError()==4103) // Если файла не существует,..
Alert("Нет файла с именем ",File_Name);//.. извещаем трейдера
else // При любой другой ошибке..
Alert("Ошибка при открытии файла ",File_Name);//..такое сообщ
PlaySound("Bzrrr.wav"); // Звуковое сопровождение
return;
}
while(FileIsEnding(Handle)==false) // До тех пор, пока файловый ..
{ // ..указатель не в конце файла
//--------------------------------------------------------- 5 --
S_1 =StrToDouble(FileReadString(Handle));//
R_1 =StrToDouble(FileReadString(Handle));
S_2 =StrToDouble(FileReadString(Handle));
R_2 =StrToDouble(FileReadString(Handle));
s1[k]=S1; s2[k]=S_2; r1[k]=R_1; r2[k]=R_2;
k=k+1;
if(FileIsEnding(Handle)==true) // Файловый указатель в конце
break; // Выход из чтения и рисования
//--------------------------------------------------------- 6 --
}
FileClose( Handle ); // Закрываем файл
PlaySound("bulk.wav"); // Звуковое сопровождение

pero, por desgracia, las matrices no se rellenan...

Aconsejar cómo ser aquí....
 

Посоветуйте, как тут быть....

En primer lugar, en los archivos csv, los elementos se separan con "," y no con ";"
En segundo lugar, hay que rellenar las matrices con el primer elemento de cada línea del archivo, porque primero se recupera toda la línea con FileReadString, luego se convierte en un único número real, y el siguiente comando FileRead ya funciona en la siguiente línea del archivo.

Puede organizar la lectura de la siguiente manera:

for(;;) {
str=FileReadString(Handle);
s1[k] =StrToDouble(StringSubstr(str,0,6));
s2[k] =StrToDouble(StringSubstr(str,7,6));
r1[k] =StrToDouble(StringSubstr(str,14,6));
r2[k] =StrToDouble(StringSubstr(str,21,6));
k++;
if(FileIsEnding(Handle)) break;
}


Debería funcionar... pero no estoy seguro :)

 
Axmed писал(а) >>

En primer lugar, en los archivos csv los elementos se separan con "," no con ";".
En segundo lugar, las matrices deben llenarse con el primer elemento de cada cadena del archivo, porque primero se recupera toda la cadena con el comando FileReadString, luego se convierte toda la cadena en un solo número real, y el siguiente comando FileRead ya funciona con la siguiente línea del archivo.

Puedes organizar la lectura de esta manera:

for(;;) {
str=FileReadString(Handle);
s1[k] =StrToDouble(StringSubstr(str,0,6));
s2[k] =StrToDouble(StringSubstr(str,7,6));
r1[k] =StrToDouble(StringSubstr(str,14,6));
r2[k] =StrToDouble(StringSubstr(str,21,6));
k++;
if(FileIsEnding(Handle)) break;
}


Debería funcionar... pero no estoy seguro :)


El delimitador por defecto es ";", aunque puede utilizar cualquier delimitador.
 
Axmed писал(а) >>

Estás escribiendo algo mal...

 
Vinin писал(а) >>


El delimitador por defecto es ";", aunque puede utilizar cualquiera.


CSV - Valores separados por comas. El "," es el delimitador por defecto. Separar con ";" es mucho menos común, y no estoy seguro de que sea soportado en absoluto en MQL4.

Estás escribiendo algo mal...

¿Qué es exactamente lo que no te gusta de lo que escribo...?