Errores, fallos, preguntas - página 2132

 
fxsaber:

Cuando el autor es un moderador a tiempo parcial.

Más bien, un moderador y codificador a tiempo parcial.

 
fxsaber:
¿Es correcto que el autor de los EA en KB elimine los comentarios de terceros en la discusión correspondiente que señalan errores en su código?

No, por supuesto.

 
fxsaber:
¿Es correcto que el autor de los EA en KB borre los comentarios de terceros en la discusión correspondiente que señalan errores en su código?
No, claro que no. Estos comentarios contribuyen a corregir esos errores. Silenciarlos o machacarlos hace que la KB sea un mal manual.
 

No lo entiendo, ¿qué sentido tenía hacerlo al revés en MQL?

C++ VS2017
MQL
printf( "%s", ... )
printf( "%S", ... )
printf( "%S", ... )
printf( "%s", ... )
printf( "%c", ... )
printf( "%C", ... )
printf( "%C", ... )
printf( "%c", ... )
de hecho MQL::printf se corresponde con CPP::wprintf, aunque no hay ningún análogo de CPP::printf en MQL
 
A100:

No lo entiendo, ¿qué sentido tenía hacerlo al revés en MQL?

C++ VS2017
MQL
printf( "%s", ... )
printf( "%S", ... )
printf( "%S", ... )
printf( "%s", ... )
printf( "%c", ... )
printf( "%C", ... )
printf( "%C", ... )
printf( "%c", ... )
en realidad MQL::printf se corresponde con CPP::wprintf, aunque no existe un análogo de CPP::printf en MQL
MQL5 es todo unicode, por lo que hemos abandonado por completo las cadenas de un solo byte.
 
Renat Fatkhullin:
MQL5 es todo unicode, por lo que hemos abandonado por completo las cadenas de un solo byte.

No me lo creo del todo. Todo funciona.

void OnStart()
{
        uchar ch[] = { 0x41,0x6E,0x73,0x69,0x20,0x69,0x73,0x20,0x61,0x6C,0x69,0x76,0x65,0x21 };
        string ansi;
        for ( int i = 0, j = 0; i < ArraySize( ch ); i+=2, j++ )
                StringSetCharacter( ansi, j, ch[ i ] | ch[ i + 1 ] << 8 );
        printf( "%S", ansi );
}

Resultado: ¡Ansi está vivo!

 
A100:

No me lo creo del todo. Todo funciona.

Resultado: ¡Ansi está vivo!

Empaquetar binario a unicode y luego tener el riesgo de explotar en una llamada a través de una función del sistema no es aconsejable.

Probablemente se filtrarán estos intentos más adelante.

 
Renat Fatkhullin:

No es razonable el riesgo de explotar en una llamada a una función del sistema.

No exageres porque la cadena está garantizada para terminar en cero. Y además, los caracteres de un solo byte junto con los multibyte son en realidad parte de Unicode y en MQL todo funciona bien también, lo que hace posible la salida en la pestaña de Expertos con la fuente normal (y no con ese horrible monoespacio).

Esto es como prohibir la llamada desde la función dll con el argumento uchar[], temiendo que el usuario lo rellene incorrectamente (por ejemplo, que no termine en cero), mientras que muchas funciones del sistema requieren exactamente uchar[] y no ushort[] (que por cierto también puede ser rellenado incorrectamente)

 

La segunda línea es la salida en fuente humana (no monospace). Como puedes ver, es técnicamente fácil dejar la fuente monospace sólo para ::ArrayPrint()

 

Hola. Por favor, ayúdenme a encontrar la causa de este error. Estoy tratando de convertir un indicador de mql4 a mql5. Estoy utilizando el siguiente "shell" para las funciones de iHigh:

double iHigh(string symbol,ENUM_TIMEFRAMES tf,int index)
  {
   if(index < 0) return(-1);
   double Arr[1];
   if(CopyHigh(symbol,tf,index,1,Arr)>0)
      return(Arr[0]);
   else
     {
      Print(__FUNCTION__,GetLastError());
      return(-1);
     }
  }

Como resultado, obtengo el error 4301: "Símbolo desconocido", a pesar de que se pasa una cadena devuelta por la función Symbol() como parámetro de símbolo. Aquí hay un trozo de código de la función que llama a iHigh

ENUM_TIMEFRAMES tf=Period();
   string symbol = Symbol();
   if(filtr1==false) 
      return(true);  
   int i1,i2=0; 
   for(i1=i+1; i2<6; i1++)
     {
      
      if(iLow(symbol,tf,i1)<=iLow(symbol,tf,i1+1) && 
         iHigh(symbol,tf,i1)>=iHigh(symbol,tf,i1+1)) 
        {
         break; //выход из цикла
        }
      else
        {
         i2++;
        }
     }
Razón de la queja: