[ARCHIV]Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Ohne dich kann ich nirgendwo hingehen - 5. - Seite 209

 
polycomp:
Dies sind die Funktionen, und die Objekte sind die Rechtecke, die im Diagramm erscheinen.

Dateien:
 
polycomp:


Dateien:
 
Wir müssen abwarten, es wird Zeit brauchen.
 
polycomp:
Einer der möglichen Gründe dafür, dass der Code nach einer Neuinitialisierung anders funktioniert, ist die Besonderheit der Initialisierung statischer Variablen in MT4. In der Funktion isNewBar() verwenden Sie eine solche Variable. Während der primären Initialisierung ist BarTime = 0. Und bei einer erneuten Initialisierung wird diese Variable den vorherigen Wert (nicht 0) enthalten. Um diese Annahme zu überprüfen, machen Sie die Variable BarTime global und prüfen Sie, wie der Code funktioniert.
 
polycomp:
alsu:

Drucken Sie zunächst etwas über die Bibliotheksfunktionen in Print aus, damit Sie wissen, ob sie überhaupt aufgerufen werden

Grafische Objekte werden in Bibliotheksfunktionen erstellt. Nach dem ersten Aufruf des Indikators werden die Objekte erstellt und im Terminalfenster angezeigt.

Wenn man sie erneut aufruft, sind sie nicht in der Liste der Objekte vorhanden, was darauf schließen lässt, dass die externen Funktionen bei der Neuberechnung des Indikators aus irgendeinem Grund nicht funktionieren und das Terminal darüber schweigt.

Gut. Anstelle von indirekten Zeichen, drucken Sie ( " Aufruf dieser Funktion") in den Indikator; wir werden sofort sehen, ob diese Funktion aufgerufen wird.

Sie sollten weniger arrogant sein, dann werden die Fehler schneller gefunden)

 
polycomp:



Im Allgemeinen liegt das Problem höchstwahrscheinlich in der Funktion

bool isNewBar()
{
  static datetime BarTime;  
   bool res=false;
    
   if (BarTime!=Time[0]) 
      {
         BarTime=Time[0];  
         res=true;
      } 
   return(res);
}

Das Problem ist, dass die Statik bei der Neuinitialisierung nicht zurückgesetzt wird, so dass beim Neustart die BarTime immer gleich der Zeit des letzten gezählten Balkens ist, d.h. isNewBar () ist falsch, bis eine neue Kerze eintrifft. Es wäre besser, die Funktion aus der Bibliothek in den mqh-Inluder zu verschieben und BarTime=0 explizit in init () zu nullen.

Dies ist nur ein erster Blick auf den Code, also urteilen Sie nicht zu streng, wenn ich falsch liege.

 
polycomp:



Ich würde damit beginnen, diese Zeile aus Ihrer Bibliothek zu entfernen

#property library

Da Sie keine Bibliothek verwenden, sondern eine Include-Datei

 
alsu:

Soweit ich mich erinnere, müssen Sie sich diese Zeit speziell merken, wenn Sie den schwebenden Auftrag einstellen. Sie können sie direkt im Kommentar zum Auftrag speichern (oder in der Magie, als besondere Perversion:).
Ich danke Ihnen vielmals.
 

FRAGE 1.

Wie man diese Idee kodiert.

Um eine Pending Order zu setzen, diese aber nur in eine Market Order umzuwandeln , wenn der gesetzte Preis der Pending Order mit dem Eröffnungskurs einer beliebigen TF60-Kerze übereinstimmt

FRAGE 2.

Wie man diese Idee kodiert.

Wenn eine schwebende Order in eine Marktorder umgewandelt wird, sollten wir in 10 Minuten eine weitere schwebende Order mit denselben Werten einstellen: Eröffnungskurs, Stoppkurs, Volumen wie bei der vorherigen schwebenden Order, die in eine Marktorder umgewandelt wurde.

Ich danke Ihnen.

 
alsu:

Gut. Vielleicht sollten wir, anstatt nach indirekten Zeichen zu urteilen, einfach den Indikator selbst eingeben: Print ("Aufruf dieser und jener Funktion"); wir werden sofort sehen, ob sie aufgerufen wird oder nicht.

Sie sollten weniger übermütig sein, dann werden die Fehler schneller gefunden).

alsu:

Und im Allgemeinen liegt Ihr Problem höchstwahrscheinlich in der Funktion

Das Problem ist, dass die Statik bei der Neuinitialisierung nicht auf Null gesetzt wird, so dass beim Neustart die BarTime immer gleich der Zeit des letzten gezählten Balkens ist, d.h. isNewBar () wird falsch sein, bis eine neue Kerze eintrifft. Es wäre besser, die Funktion aus der Bibliothek in den mqh-Inluder zu verschieben und BarTime=0 explizit in init () zu nullen.

Dies ist nur ein erster Blick auf den Code, also urteilen Sie nicht zu streng, wenn ich falsch liege.


Herzlichen Dank!

isNewBar () wurde aus der Bibliothek entfernt und in die Indikatordatei aufgenommen. Alles funktioniert wie am Schnürchen!

Grund der Beschwerde: