Fehler, Irrtümer, Fragen - Seite 2132

 
fxsaber:

Wenn der Autor ein Teilzeitmoderator ist.

Vielmehr ist sie Moderatorin und Teilzeit-Codiererin.

 
fxsaber:
Ist es richtig, dass der Autor von EAs bei KB Kommentare Dritter in der entsprechenden Diskussion entfernt, die auf Fehler in seinem Code hinweisen?

Nein, natürlich nicht.

 
fxsaber:
Ist es richtig, dass der Autor von EAs bei KB Kommentare Dritter in der entsprechenden Diskussion löscht, die auf Fehler in seinem Code hinweisen?
Nein, natürlich nicht. Solche Kommentare tragen dazu bei, diese Fehler zu korrigieren. Sie zum Schweigen zu bringen oder zu zermalmen macht die KB zu einem schlechten Handbuch.
 

Ich verstehe nicht, warum man es bei MQL andersherum macht.

C++ VS2017
MQL
printf( "%s", ... )
printf( "%S", ... )
printf( "%S", ... )
printf( "%s", ... )
printf( "%c", ... )
printf( "%C", ... )
printf( "%C", ... )
printf( "%c", ... )
MQL::printf entspricht CPP::wprintf, obwohl es kein Analogon von CPP::printf in MQL gibt
 
A100:

Ich verstehe nicht, warum man es bei MQL andersherum macht.

C++ VS2017
MQL
printf( "%s", ... )
printf( "%S", ... )
printf( "%S", ... )
printf( "%s", ... )
printf( "%c", ... )
printf( "%C", ... )
printf( "%C", ... )
printf( "%c", ... )
MQL::printf entspricht eigentlich CPP::wprintf, obwohl es kein Analogon von CPP::printf in MQL gibt
MQL5 ist komplett auf Unicode umgestellt, so dass wir auf Single-Byte-Strings komplett verzichten.
 
Renat Fatkhullin:
MQL5 ist komplett auf Unicode umgestellt, so dass wir auf Single-Byte-Strings komplett verzichten.

Das glaube ich nicht ganz! Alles funktioniert.

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 );
}

Ergebnis: Ansi ist am Leben!

 
A100:

Das glaube ich nicht ganz! Alles funktioniert.

Ergebnis: Ansi ist am Leben!

Es ist unklug, Binärdaten in Unicode zu packen und dann das Risiko einzugehen, dass sie bei einem Aufruf über eine Systemfunktion explodieren.

Wahrscheinlich werden solche Versuche später herausgefiltert.

 
Renat Fatkhullin:

Es ist unvernünftig, das Risiko einer Explosion bei einem Aufruf einer Systemfunktion einzugehen.

Übertreiben Sie nicht, denn die Zeichenfolge endet garantiert mit Null. Außerdem sind Einzelbyte-Zeichen zusammen mit Multibyte-Zeichen eigentlich Teil von Unicode und in MQL funktioniert das alles auch gut, was es möglich macht, in Experts tab mit normaler (und nicht mit dieser schrecklichen monospaced) Schrift auszugeben.

Das ist so, als würde man den Aufruf einer DLL-Funktion mit dem Argument uchar[] verbieten, weil man befürchtet, dass der Benutzer es falsch ausfüllt (z.B. nicht mit Null abschließt), während viele Systemfunktionen genau uchar[] und nicht ushort[] verlangen (was übrigens auch falsch ausgefüllt werden kann)

 

Die 2. Zeile ist die Ausgabe in der Schriftart Human (nicht Monospace). Wie Sie sehen können, ist es technisch einfach, die Schriftart Monospace nur für ::ArrayPrint() zu verwenden

 

Hallo. Bitte helfen Sie mir, die Ursache für diesen Fehler zu finden. Ich versuche, einen Indikator von mql4 nach mql5 zu konvertieren. Ich verwende die folgende "Shell" für iHigh-Funktionen:

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);
     }
  }

Infolgedessen erhalte ich die Fehlermeldung 4301: "Unbekanntes Symbol", obwohl eine von der Funktion Symbol() zurückgegebene Zeichenfolge als Symbolparameter übergeben wird. Hier ist ein Teil des Codes der Funktion, die iHigh aufruft

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++;
        }
     }