Erros, bugs, perguntas - página 2132

 
fxsaber:

Quando o autor é um moderador a tempo parcial.

Em vez disso, um moderador e codificador a tempo parcial.

 
fxsaber:
É correcto que o autor de EAs no KB remova comentários de terceiros na discussão relevante que apontem erros no seu código?

não, claro.

 
fxsaber:
É correcto que o autor de EAs no KB elimine comentários de terceiros na discussão relevante que apontem erros no seu código?
Não, claro que não. Tais comentários contribuem para corrigir esses erros. Silenciá-los ou amassá-los faz do KB um mau manual.
 

Não percebo, qual foi a vantagem de o fazer ao contrário na MQL?

C++ VS2017
MQL
printf( "%s", ... )
printf( "%S", ... )
printf( "%S", ... )
printf( "%s", ... )
printf( "%c", ... )
printf( "%C", ... )
printf( "%C", ... )
printf( "%c", ... )
de facto MQL::printf corresponde a CPP::wprintf, embora não haja análogo de CPP::printf em MQL
 
A100:

Não percebo, qual foi a vantagem de o fazer ao contrário na MQL?

C++ VS2017
MQL
printf( "%s", ... )
printf( "%S", ... )
printf( "%S", ... )
printf( "%s", ... )
printf( "%c", ... )
printf( "%C", ... )
printf( "%C", ... )
printf( "%c", ... )
na realidade MQL::printf corresponde a CPP::wprintf, embora não haja análogo de CPP::printf em MQL
MQL5 é tudo unicode, pelo que abandonámos completamente as cordas de byte único.
 
Renat Fatkhullin:
MQL5 é tudo unicode, pelo que abandonámos completamente as cordas de byte único.

Não acredito completamente nisso! Tudo 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á viva!

 
A100:

Não acredito completamente nisso! Tudo funciona.

Resultado: Ansi está viva!

Embalar o binário em unicode e depois correr o risco de explodir numa chamada através de uma função do sistema é insensato.

Provavelmente, essas tentativas serão filtradas mais tarde.

 
Renat Fatkhullin:

Não é razoável ter o risco de explodir numa chamada de função do sistema.

Não exagerar porque o cordel tem a garantia de terminar com zero. Além disso, os caracteres de byte único juntamente com os de multibyte fazem realmente parte de Unicode e em MQL tudo funciona bem, o que torna possível a saída em Separador de Especialistas com fonte normal (e não aquela horrível monospaced), por exemplo.

Isto é como proibir a chamada da função dll com argumento uchar[], temendo que o utilizador a preencha incorrectamente (por exemplo, não terminará com zero), enquanto muitas funções do sistema requerem exactamente uchar[] e não ushort[] (que, por acaso, também pode ser preenchida incorrectamente)

 

A 2ª linha é a saída em fonte humana (não monoespacial). Como pode ver, é tecnicamente fácil deixar a fonte monoespacial apenas para ::ArrayPrint()

 

Olá. Ajude-me, por favor, a encontrar a causa deste erro. Estou a transferir um indicador de mql4 para mql5. Estou a utilizar a seguinte "concha" para funções 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, recebo o erro 4301: "Símbolo desconhecido", embora uma string devolvida pela função Symbol() seja passada como o parâmetro do símbolo. Aqui está um pedaço de código da função que chama 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++;
        }
     }