Fragen von Anfängern in MQL5. Fachleute kommen nicht vorbei. - Seite 6

 
_o0O:

Schon gar nicht irgendeine, daher sind alle Fragen nur willkommen.

In der Hilfe ist diese Nuance nicht enthalten. DRAW_NONE funktioniert nicht entweder #property oder in PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_NONE), PlotIndexSetString(0, PLOT_LABEL, "Buff") funktioniert auch nicht, was ist also die Logik hinter der Angabe von clrNONE, um dieses Ziel zu erreichen?

Außerdem kann nicht jeder die Sprachdokumentation lesen.

Der vorgestellte Code enthält alles, was man überprüfen und verstehen muss.

 
Alexey Viktorov:

Außerdem weiß nicht jeder, wie man die Sprachdokumentation liest.

Der mitgelieferte Code enthält alles, was Sie zum Prüfen und Verstehen benötigen.

Willst du reden?

GUT. Bitte zeigen Sie mir die Stelle in der Hilfe, an der es eine Lösung für mein Problem gibt. Und Ihr Code ist eine Krücke, eine undokumentierte Funktion, wie die Angabe clrNONE nicht auf den Puffer zu rendern sieht wahnhaft.

 
Alexey Viktorov:

Sie müssen nicht den Typ DRAV_NONE, sondern die Farbe clr_NONE angeben.

Hier ist der Testcode

Erklären Sie das:

limit = rates_total-prev_calculated; // Это тупо для примера. В нормальном индикаторе так делать нельзя!

Warum können Sie das nicht? Warum in Rot mit einem Ausrufezeichen?

 
_o0O:

Wie kann ich erreichen, dass einige Indikatorpuffer nicht auf dem Diagramm gezeichnet werden, sondern ihre Werte im"Datenfenster" des Indikators angezeigt werden?

Das tue ich:


aber dennoch zeichnet der Indikator einen Puffer.

Ein Beispiel können Sie hier sehen:

3TF_RSI_Average
3TF_RSI_Average
  • www.mql5.com
Индикатор Three timeframes RSI Average - отображает в отдельном окне три индикатора Relative Strength Index с заданных таймфреймов и их среднее значение. Имеет десять настраиваемых параметров: RSI period - период расчёта RSIOverbought - уровень перекупленностиOversold - уровень перепроданностиDrawing mode - режим рисованияFirst RSI timeframe...
 
Artyom Trishkin:

Ein Beispiel können Sie hier sehen:

Nein, das ist es nicht.

In Ihrem Beispiel werden 4 Puffer gezeichnet und 4 befinden sich im Datenfenster. Sie sollen nicht gezeichnet werden, sondern im Datenfenster sein und einen bestimmten Namen haben.

 
_o0O:

Nein, das ist es nicht.

In Ihrem Beispiel werden 4 Puffer gezeichnet und 4 befinden sich im Datenfenster. Es ist erforderlich, dass sie nicht gezeichnet werden, sondern sich im Datenfenster befinden und einen bestimmten Namen haben.

Und wenn Sie genau hinschauen? Die Anzeige von drei der vier Puffer wird nach und nach deaktiviert. Aber wenn Sie sie im Datenfenster ausschalten, werden sie weiterhin angezeigt, und zwar mit programmatisch vergebenen Namen - alles ist so, wie Sie es wollten. Oder habe ich die Frage falsch verstanden?

 
Artyom Trishkin:

Wie wäre es mit einem genaueren Blick? Es besteht die Möglichkeit, die Anzeige von drei der vier Puffer - jeweils einen - zu deaktivieren. Aber wenn sie ausgeschaltet sind, werden sie immer noch im Datenfenster angezeigt, und zwar mit den programmierten Namen - genau wie Sie es gewünscht haben. Oder habe ich die Frage falsch verstanden?

Ja, ich sehe, es gibt

PlotIndexSetInteger(0,PLOT_DRAW_TYPE,InpShowRSI1);

InpShowRSI1 nimmt die Werte 0 oder 1 an, so funktioniert es.

Aber ich habe PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_NONE) angegeben; und es funktioniert nicht

 
_o0O:

ja, ich kann es sehen

PlotIndexSetInteger(0,PLOT_DRAW_TYPE,InpShowRSI1);

InpShowRSI1 nimmt die Werte 0 oder 1 an, so funktioniert es.

Ich habe jedoch PlotIndexSetInteger(0,PLOT_DRAW_TYPE, DRAW_NONE) angegeben, und es hat nicht funktioniert

DRAW_NONE == 0

DRAW_LINE == 1

Sie haben also irgendwo etwas anderes. Theoretisch sollte das auch bei Ihnen funktionieren.

 
Artyom Trishkin:

Erklären Sie das:

Warum können Sie das nicht? Warum in Rot mit einem Ausrufezeichen?

Wenn der Indikator mehrere Balken berechnet, wird eine solche Implementierung außerhalb des Arrays liegen. Sie müssen also in jedem Fall Ihre Kopfmuskeln anspannen...
 
Alexey Viktorov:
Wenn der Indikator mehrere Balken berechnet, wird eine solche Implementierung außerhalb des Arrays liegen. Deshalb müssen wir in jedem Fall unsere Kopfmuskeln anspannen.

Nein, das müssen Sie nicht. Alles wird einmal bei Limit>1 durchgeführt. Dies ist der erste Lauf und das Laden der Historie. Und wenn Sie die Glättungsperiode_sm=10 haben, dann sollte das Limit in diesem Fall um 10 niedriger sein. Dementsprechend:

if(limit>1)
  {
   limit=rates_total-period_sm-1;
   ArrayInitialize(Buffer,InitValue);
  }

InitValue - Wert zur Initialisierung des Puffers - 0 oder EMPTY_VALUE - je nach Bedarf. Oder vielleicht -100500 ...