Fehler, Irrtümer, Fragen - Seite 1313

 
Konstantin Karpov:
Wie kann ich zur Kompilierzeit feststellen, in welchem Bitmodus sich das Terminal befindet? Der Bezeichner TERMINAL_X64 passt nicht, da er für Funktionen vorgesehen ist. Höchstwahrscheinlich gibt es Makros, die nicht in der Hilfe erwähnt werden, aber sie tauchen gelegentlich auf die eine oder andere Weise auf :)
Das tun sie leider nicht. Es gibt eine Variable _IsX64, aber sie funktioniert nur zur Laufzeit.
 

Wie kann ich verhindern, dass ich zwei Dlls verwende, eine für 32-Bit-Terminals und eine für 64-Bit-Terminals? Es ist nicht kasher, zwei Kopien des Programms aufzubewahren...

By the way, wer hat Erfahrung, wenn Sie Code in ME x64 kompilieren, wird es auf 32-Bit-Terminals ohne Fehler arbeiten oder es wird einige versteckte Funktionen der Code-Ausführung sein?

 

Zum Beispiel gibt es die Funktion funcTest(...) in der Bibliothek für 32-Bit-Terminals library_x86.dll und für 64-Bit-Terminals library_x64.dll.

Wenn der Import in der gesamten Datei sichtbar ist, ist es dann richtig, ein solches Konstrukt zu schreiben?

void CClass::Test(...) {
  код метода...

   if(TerminalInfoInteger(TERMINAL_X64)) {
      #import  library_x64.dll
         library_x64::funcTest(...);
      #import
   } else {
      #import  library_x86.dll
         library_x86::funcTest(...);
      #import
   }

   код метода...
}
oder wird dieser Trick nicht funktionieren?
 
Konstantin Karpov:
Oder wird dieser Trick nicht funktionieren?

Soviel ich weiß, nein. Sie können beide DLLs importieren und die Funktionen der einen oder der anderen aufrufen, je nach der Bitrate des Terminals.

Im Allgemeinen ist die Aufteilung in zwei Versionen nach Bitrate keine so abwegige Option.

 

Ich nehme einen Indikator (einen beliebigen aus dem Standardsatz) und rufe ihn im Expert Advisor auf:

iCustom (NULL, 0, "Momentum", 0, 1);

Nach dem Ausführen des EA mit Visualisierung im Tester - alles funktioniert, der Indikator wird gezeichnet.

Jetzt ändere ich eine Zeile im Indikator

ExtMomBuffer[i]=close[i]*100/close[i-InpMomPeriod];

zu dieser Zeile:

ExtMomBuffer[i]=100;

Und jetzt zeichnet der Indikator überhaupt nichts mehr - nicht einmal eine vertikale Skala ist eingezeichnet.

Wo liegt der Fehler? MetaTrader 4 Build 765.

 
Sie benötigen zwei verschiedene Werte innerhalb des Fensters, damit die Skala erscheint? EMNIP. Ich bin nicht sicher, ob dies als Fehler angesehen werden kann.
 

OK, nennen wir es unkonventionelles Verhalten :)

Vielen Dank, aber ich habe noch eine Frage. Ja, das hat so funktioniert:

ExtMomBuffer[i]=i%2;

Und so hat es wieder aufgehört zu funktionieren:

ExtMomBuffer[0]=i%2;

In den alten MT-Versionen hat es funktioniert, was ist mit den neuen Versionen falsch?

 

In der zweiten Version gibt es also nur einen Wert.

Ich könnte mich allerdings irren.

 

Sie können es so machen, es funktioniert trotzdem nicht:

ExtMomBuffer[0]=cnt++;

Der Kern des Problems besteht darin, dass der Versuch, bei jedem Schritt des EA in den 0-Balken des Indikators zu schreiben, nichts bewirkt.

 

Ich glaube, ich habe gefunden, wo ich graben muss. Geändert

ArraySetAsSeries(ExtMomBuffer,false);

zu wahr und etwas beginnt sich zu zeigen. Ich werde mich jetzt betrinken.