Fehler, Irrtümer, Fragen - Seite 815

 
tol64:

Können Sie mir sagen, warum beim Abrufen eines Indikator-Handles ein Fehler auftritt, wenn der Name des aufzurufenden Indikators in einer Variablen enthalten ist?

Ich meine, es gibt keinen Fehler wie diesen:

Auf diese Weise erhalten wir den Fehler 4802 (Indikator kann nicht erstellt werden):

Lesen Sie hier übertester_indicator.
 
marketeer:
Lesen Sie hier überden tester_indicator.
Ja, ich habe alles schon mehrmals gelesen und wieder gelesen. )) Aber ich habe es nicht geschafft, das zu bekommen, was ich brauche. Und ich muss den Namen des Indikators auf eine Variable setzen.
 
tol64:
Ich habe das Ganze immer und immer wieder gelesen. )) Aber ich kann nicht bekommen, was ich brauche. Und ich muss den Namen des Indikators auf eine Variable setzen.
Also, haben Sie die Eigenschaft test_indicator hinzugefügt? Ich schätze, ich kann es nicht ohne sie tun.
 
marketeer:
Haben Sie also die Eigenschaft test_indicator hinzugefügt? Ich glaube nicht, dass ich es ohne sie geschafft hätte.

Ich habe es versucht. So funktioniert das nicht. Könnten Sie mir ein Beispiel zeigen (vielleicht mache ich es falsch)?

P.S.: Es hat funktioniert. Einfacher geht's nicht. Ausruhen. ))

P.S2. Aber ich bekomme die Abhängigkeit davon, dass ich alle Indikatoren über die Eigenschaft test_indicator registrieren muss. Das heißt, wenn der Name des Indikators durch einen externen Parameter angegeben wird und ein Benutzer einen neuen Indikator hat, müssen wir den Code erneut öffnen. Das ist nicht gerade das, was wir wollen.

 
tol64:

P.S2. Aber wir haben immer noch die Abhängigkeit, dass wir alle Indikatoren über die Eigenschaft test_indicator schreiben müssen. Das heißt, wenn der Name des Indikators durch einen externen Parameter angegeben wird und ein Benutzer einen neuen Indikator hat, müssen wir den Code erneut öffnen. Das ist nicht gerade das, was wir wollen.

Sie wird in fünf Schritten durchgeführt. Ich habe damit Indizes aus einigen anderen zufällig ausgewählten Indizes erstellt. Vielleicht werden uns die Entwickler sagen, was sie davon halten.
 
marketeer:
So wird es in fünf gemacht. Ich selbst habe damit Indizes aus mehreren anderen zufällig ausgewählten Indizes erstellt. Vielleicht werden uns die Entwickler sagen, was sie davon halten.

Die Sache ist, dass EAs in der MT5-Tester außerhalb des Terminals gestartet werden und nicht alle die Bibliothek Umwelt, die in MT4 war.

Zum Beispiel wird der Expert Advisor überhaupt an die Cloud gesendet, und um zusätzliche Links zu übergeben, müssen wir das tun:

  1. Verwendung von statischen Indikatornamen in Aufrufen, die es dem Compiler ermöglichen, die Abhängigkeiten des Experten automatisch vorzuschreiben
  2. die Liste der erforderlichen Indikatoren explizit über eine Eigenschaft vorschreiben, um die Liste der Abhängigkeiten manuell zu erstellen.

Wenn dynamische Indikatoraufrufe verwendet werden, müssen Sie die Liste der verwendeten Indikatoren manuell vorgeben. Bei der Durchführung eines Fremdtests werden alle abhängigen Dateien zusammen mit dem Expert Advisor gesendet. Dabei kann es sich sowohl um lokale (sie befinden sich ohnehin außerhalb des Terminals) als auch um Remote- oder Cloud-Agenten handeln.

Das ist der Preis, den man für "Drücken Sie auf Start und denken Sie an nichts anderes, alles funktioniert automatisch" zahlen muss.

Способы вызова индикаторов в MQL5
Способы вызова индикаторов в MQL5
  • 2010.03.09
  • KlimMalgin
  • www.mql5.com
C появлением новой версии языка MQL, не только изменился подход к работе с индикаторами, но и появились новые способы создания индикаторов. Кроме того, появилась дополнительная гибкость при работе с индикаторными буферами - теперь вы можете самостоятельно указать нужное направление индексации и получать ровно столько значений индикатора, сколько вам требуется. В этой статье рассмотрены базовые методы вызова индикаторов и получения данных из индикаторных буферов.
 
Renat:

Der springende Punkt ist, dass die EAs im MT5-Tester außerhalb des Terminals laufen und nicht über die gesamte Bibliotheksumgebung verfügen, die MT4 hatte.

Das ist der Preis, den man für "Drücken Sie auf Start und denken Sie an nichts anderes, alles funktioniert automatisch" zahlen muss.

Das ist verständlich, aber auf der anderen Seite haben die Nutzer regelmäßig eine Gegenfrage, weil die gewohnte und effektive Flexibilität verloren gegangen ist. Sie haben nämlich nur ein statisches Bindungsmodell implementiert. Und die Leute fragen auch nach dynamischen Verlinkungen. Die Idee ist, dass selbst wenn etwas an die Cloud gesendet wird, mit der Zählung beginnt und plötzlich auf einen externen Turm zugreift, Sie es abfragen und abrufen können, ähnlich wie den Rest der Umgebung, die vom Terminal an den Agenten weitergegeben wird. Nun, das ist nur ein lauter Gedanke. Ich habe diese Frage nicht gestellt ;-).
 

Vielleicht wurde diese Frage bereits gestellt, aber ich konnte sie im Forum nicht finden.

Wenn im folgenden Code (in der test()-Methode) ein konstanter Deskriptor (Verweis) auf ein Objekt genommen und einem nicht konstanten zugewiesen wird, erzeugt der Compiler (MetaEditor 5.00, Build 687) keinen Fehler:

class A{
   public:
      void someDo() {}
};

class B{
   public:
      void B( A* aA ) : mA( aA ) {}
      const A* getA() { return (mA); }   
   private:
      A* mA;
};

void test(){
   A a;
   B b( GetPointer( a ) );

   //Ошибки нет. И это правильно   
   const A* a1 = b.getA();
   //Ошибка есть: "...someDo' - call non-const method for constant object..". И это правильно   
   a1.someDo();
   
   //Ошибки нет. Это НЕ правильно(CONST A* B::getA())!
   A* a2 = b.getA();
   //ошибки нет. Правильно (а2 не const)
   a2.someDo();
}
 
mvk:

Diese Frage wurde vielleicht schon einmal gestellt, aber ich habe sie im Forum nicht gefunden.

Im folgenden Code (in der test()-Methode) erzeugt der Compiler (MetaEditor 5.00, Build 687) keinen Fehler, wenn er einen konstanten Deskriptor (Verweis) auf ein Objekt abruft und ihn einem nicht konstanten Objekt zuweist:

dies wäre auch ohne den Fehler der Fall.

class A{
   public:
      void someDo() const {};
};
 

Frage an Entwickler zur Geschwindigkeit von Objektzeigern


Warum ist der erste Code

class CSomeObj
{
public:
   double prm;
};

CSomeObj arr;

void OnStart()
{
        EventSetTimer(1);

        uint s0=GetTickCount();
        for (int i=0; i<100000000; i++) arr. prm=10;
        Print("1=", GetTickCount()-s0);
        
        s0=GetTickCount();
        CSomeObj *item=GetPointer(arr);
        for (int i=0; i<100000000; i++) item. prm=10;
        Print("2=", GetTickCount()-s0);
}

doppelt so schnell arbeitet wie der zweite?

2012.08.21 09:56:40 info (EURUSD,D1) 2=1654
2012.08.21 09:56:38 info (EURUSD,D1) 1=795

Können Sie es optimieren, um die Geschwindigkeit zu erhöhen?