Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1245

 
Artyom Trishkin:

Nicht alle Arrays haben die gleiche Ausrichtung.

Ich verstehe, aber ich setze auch ArraySetAsSeries(barsBuffer1 ,true); !

Nun, das ist die halbe Miete. Aber ich kann nicht herausfinden, wie ich eine neue Kerze hinzufügen kann.

Ich habe es auf diese Weise versucht:

.........
   else
   {
      Print("tick_count = ",++tick_count);
      if(tick_count >= 5)
      {
         Print("Добавляем свечу.");
         
         double   O[1], H[1], L[1], C[1];
         O[0]  = newCandles_Open[3];
         H[0]  = newCandles_High[3];
         L[0]  = newCandles_Low[3];
         C[0]  = newCandles_Close[3];
         
         ArrayResize(barsBuffer1,ArraySize(barsBuffer1)+1);
         ArrayResize(barsBuffer2,ArraySize(barsBuffer2)+1);
         ArrayResize(barsBuffer3,ArraySize(barsBuffer3)+1);
         ArrayResize(barsBuffer4,ArraySize(barsBuffer4)+1);
         
         ArrayInsert(barsBuffer1,O,0);
         ArrayInsert(barsBuffer2,H,0);
         ArrayInsert(barsBuffer3,L,0);
         ArrayInsert(barsBuffer4,C,0);
         
         tick_count = 0;
      }
   }
//--- return value of prev_calculated for next call
   return(rates_total);
}

Funktioniert nicht... (((

 
Сергей Таболин:

Ich verstehe, aber ich setze auch ArraySetAsSeries(barsBuffer1 ,true); !

Nun, das ist die halbe Miete. Aber wie man eine neue Kerze hinzufügt, kann ich nicht herausfinden.

Ich habe es auf diese Weise versucht:

Funktioniert nicht... (((

Es tut mir leid, aber Arrays, die Indikatorpuffern zugewiesen sind, können nicht in der Größe verändert werden - das Subsystem des Terminals übernimmt dies.

   SetIndexBuffer(0, barsBuffer1, INDICATOR_DATA);
   SetIndexBuffer(1, barsBuffer2, INDICATOR_DATA);
   SetIndexBuffer(2, barsBuffer3, INDICATOR_DATA);
   SetIndexBuffer(3, barsBuffer4, INDICATOR_DATA);
         ArrayResize(barsBuffer1,ArraySize(barsBuffer1)+1);
         ArrayResize(barsBuffer2,ArraySize(barsBuffer2)+1);
         ArrayResize(barsBuffer3,ArraySize(barsBuffer3)+1);
         ArrayResize(barsBuffer4,ArraySize(barsBuffer4)+1);

Überdenken Sie Ihre Logik. Ich kenne sie überhaupt nicht und kann nur aufzeigen, was ganz offensichtlich falsch ist.

 
Artyom Trishkin:

Ich bitte um Entschuldigung, aber die den Indikatorpuffern zugewiesenen Arrays können nicht in der Größe verändert werden - dies wird vom Terminal-Subsystem übernommen.

Überdenken Sie Ihre Logik. Ich weiß es überhaupt nicht und kann nur aufzeigen, was ganz offensichtlich falsch ist.

So habe ich es auch verstanden, aber...

Artem, wenn der Indikatorpuffer vom Subsystem verwaltet wird, bedeutet das, dass dieses Subsystem auch seine Größe erhöht? Mit anderen Worten, eine neue Indikatorkerze kann erst dann im Diagramm gezeichnet werden, wenn eine neue Kerze erscheint?

 
Сергей Таболин:

So habe ich es auch verstanden, aber...

Artem, wenn der Indikatorpuffer von einem Subsystem verwaltet wird, bedeutet das, dass es auch seine Größe erhöht? Mit anderen Worten: Solange keine neue Kerze auf dem Chart erscheint, kann auch keine neue Indikatorkerze auf dem Chart gezeichnet werden?

Was ist mit "eine neue Kerze ziehen" gemeint?

Sie können sie zeichnen, aber die Balken können nicht hinzugefügt werden - sie sind noch nicht vorhanden.

Ja, das Terminal kümmert sich um die Größe der Indikatorfelder. Sie enthält auch Daten darüber, wie viele von ihnen beim letzten Anruf dabei waren.

 
Artyom Trishkin:

Was meinen Sie mit "eine neue Kerze ziehen"?

Sie können alles Mögliche zeichnen, aber Sie können keine Balken hinzufügen - die gibt es noch nicht.

Ja, das Terminal selbst kümmert sich um die Größe der Indikatorfelder. Sie enthält auch Daten darüber, wie viele von ihnen beim letzten Anruf dabei waren.

Danke, jetzt verstehe ich, warum es nicht klappt.

Dann noch eine letzte Frage. Ich weiß, dass wir Candlesticks aus einem anderen Zeitrahmen im Indikator anzeigen können. Wenn der Indikator Kerzen von H2 und Kerzen von H1 anzeigt, bedeutet dies, dass wir 2 Kerzen während der Lebensdauer einer Kerze ziehen sollten. Wie kann das passieren, wenn der Puffer nur durch das System erhöht wird? Oder geben Sie mir einen Link zu dem Beispiel, wenn das nicht zu viel Aufwand ist. Vielleicht finde ich es ja heraus ))))

 
Сергей Таболин:

Danke, jetzt verstehe ich, warum es bei mir nicht funktioniert.

Dann noch eine letzte Frage. Ich weiß, dass Sie Candlesticks aus einem anderen Zeitrahmen im Indikator anzeigen können. Wenn der Indikator Kerzen von H1 anzeigt, bedeutet dies, dass wir 2 Kerzen während einer Kerzenlebensdauer zeichnen sollten. Wie kann das passieren, wenn der Puffer nur durch das System erhöht wird? Oder geben Sie mir einen Link zu dem Beispiel, wenn das nicht zu viel Aufwand ist. Vielleicht finde ich es ja heraus)))

Ich habe in meinen letzten Artikeln über Indikatoren Beispiele angeführt, aber sie basieren auf Bibliotheken.

Und um zu verstehen, wie man zwei Kerzen anstelle einer Kerze zeichnet, sehen Sie sich das Diagramm an. Schauen Sie sich die Zeit an, zu der die Kerze auf H2 geöffnet wurde und wo sich die Kerze mit der gleichen Zeit auf H1 befindet. Alles wird klar werden.

 
Artyom Trishkin:

In meinen letzten Artikeln über Indikatoren habe ich Beispiele angeführt, aber sie basieren alle auf Bibliotheken.

Und um zu verstehen, wie man zwei Kerzen anstelle von einer zeichnet, schauen Sie sich das Diagramm an. Schauen Sie sich die Zeit an, zu der die Kerze auf H2 geöffnet wurde und wo sich die Kerze mit der gleichen Zeit auf H1 befindet. Alles wird klar werden.

Artem, die Sache ist die, dass ich es nicht verstehe!

Der Candlestick auf H2 ist beispielsweise um 12:00 Uhr geöffnet. Der nächste Termin ist um 14:00 Uhr. Aber auf H1 wird der nächste um 13:00 Uhr sein. Nach der Logik, bis die Kerze öffnet auf der höheren TF, der Indikator Array wird nicht erhöht werden! Bedeutet das, dass ich die zweite Kerze nicht in den Indikator einzeichnen kann? Oder was?

Erklären Sie es mir, unklar takomu..... Warum und wie kann ich zwei (oder eigentlich n) Candlesticks in einem Diagramm zeichnen? Warum ändert sich der Indikator nicht, wenn ich den 0. Index des Indikatorpuffers mit einem neuen Wert fülle (einfache Zuweisung)?

Vielleicht sollte ich die Entwickler nach einer solchen Möglichkeit fragen? Ich habe ein neues Element zu diesem Puffer hinzugefügt - es wird mit einer Verschiebung aller vorherigen Elemente nach links gezeichnet. Immerhin ist es mein Indikator! Ich schreibe es so, wie ich will! Ich möchte sie nicht an die Eröffnung eines neuen Balkens im Diagramm binden! Wie schwer kann das sein?

 

Vielen Dank an Artem und Vladimir! Ihre Antworten und Erklärungen haben mich auf die Idee gebracht, und der Indikator ist herausgekommen. Ich danke Ihnen nochmals.


 

Können Sie mir bitte sagen, was los ist?

Es gibt eine einfache Variablendeklaration:

input double   StopLoss=150.0;

Bei der Fehlersuche an echten Daten hat die Variable StopLoss den Wert "150". Wenn ich jedoch das Debugging für historische Daten aktiviere, hat die gleiche Variable im gleichen Code einen anderen Wert. Was könnte der Grund dafür sein? Und wie geht man mit diesem Problem um?

 
Sayberix:

Können Sie mir bitte sagen, was los ist?

Es gibt eine einfache Variablendeklaration:

Bei der Fehlersuche an echten Daten hat die Variable StopLoss den Wert "150". Wenn ich jedoch das Debugging für historische Daten aktiviere, hat die gleiche Variable im gleichen Code einen anderen Wert. Was könnte der Grund dafür sein? Und wie geht man mit diesem Problem um?

Überprüfen Sie die Werte auf der Registerkarte "Parameter" des Strategieprüfers. Wenn Sie das Debugging für reale Daten aktivieren, übernimmt der Expert Advisor die Werte aus den Eingabevariablen, und wenn Sie es für die Historie aktivieren, werden die Werte aus den Einstellungen des Testers übernommen.