Fehler, Irrtümer, Fragen - Seite 1394

 
Ilya Malev:

OK, hier ist der Code

Ich kenne mich mit Indikatoren nicht so gut aus, aber diese Zeile ist fragwürdig

return(CopyBuffer(hnd, buf, index, 1, Arr)==1?Arr[0]:EMPTY_VALUE);

Rückgabewert

Die Anzahl der kopierten Array-Elemente oder -1 im Falle eines Fehlers.

Wenn nur 1 Element kopiert wird, gibt die Funktion dessen Wert zurück, wenn es keine Elemente gibt oder wenn es mehr als 1 gibt, gibt die Funktion EMPTY_VALUE zurück.

Vielleicht wäre es besser?

return(CopyBuffer(hnd, buf, index, 1, Arr)>=1?Arr[0]:EMPTY_VALUE);
 
Ilya Malev:

OK, hier ist der Code

Ich habe die Zeile korrigiert und es scheint zu funktionieren ))))

buffer2[i]=-MathRand()%5*Point();
 
Vladimir Pastushak:

Die Zeile wurde korrigiert und es schien zu funktionieren ))))

Ich habe es schließlich selbst so geändert. Aber ich frage mich, warum sie die Logik geändert haben (in MT4 war die Skala ohne Multiplikation mit Punkt gut). Und warum gibt es keine Möglichkeit, dass Puffer ohne Zeichnung (c DRAW_NONE) keine Auswirkung auf die Diagrammskala haben.

 
Vladimir Pastushak:

Ich kenne mich mit Indikatoren nicht wirklich aus, aber diese Zeile ist fragwürdig

1. RückgabewertAnzahl der kopierten Array-Elemente oder -1 im Falle eines Fehlers.

2. Wenn 1 Element kopiert wird, gibt die Funktion dessen Wert zurück

Die Aussagen 1 und 2 stehen im Widerspruch zueinander, meinen Sie nicht?
 
Ilya Malev:
Die Aussagen 1 und 2 stehen im Widerspruch zueinander, meinen Sie nicht?

Nein )))

1 Er kann von 1 bis zum Grenzwert betragen

2 nur, wenn 1 Element kopiert wird Wenn 2 oder mehr kopiert werden, wird EMPTY_VALUE zurückgegeben

In der Hilfe heißt es

Rückgabewert

Anzahl der kopierten Array-Elemente oder -1 im Falle eines Fehlers. Unter welchen Bedingungen wird 1 Element kopiert?

 
Ilya Malev:

Ich habe es schließlich selbst so geändert. Aber ich frage mich, warum sie die Logik geändert haben (in MT4 war die Skala ohne Multiplikation mit Punkt gut). Und warum gibt es keine Möglichkeit, dass die Puffer ohne Zeichnung (c DRAW_NONE) den Maßstab des Diagramms nicht beeinflussen.

Sie gehen nicht durch den gesamten Indikatorpuffer. Schreiben

for(int i=rates_total-MathMax(1, prev_calculated); i>=0; i--)

ist überhaupt nicht korrekt. Sie haben die Variablen rates_total, prev_calculated und den Indikator offset iStdDev. Beim ersten Durchgang müssen Sie die leeren Indizes ausfüllen:

Indikatorverschiebung

und gehen dann die restlichen Indizes des Indikatorpuffers durch (durchgehen heißt Werte zuweisen).

 
Karputov Vladimir:

Sie gehen nicht durch den gesamten Indikatorpuffer. Der Eintrag

ist überhaupt nicht korrekt. Sie haben die Variablen rates_total, prev_calculated und den Indikator offset iStdDev. Beim ersten Durchgang müssen Sie die leeren Indizes ausfüllen:

und gehen dann die restlichen Indizes des Indikatorpuffers durch (durchgehen heißt Werte zuweisen).

In der ursprünglichen Version hatte ich eine Funktion, die alles mit Nullen des Typs

      for(int i=(int)SeriesInfoInteger(Symbol(), Period(), SERIES_BARS_COUNT)-1; i>=0; i--){
         buffer1[i]=0;
         buffer1[i]=0;
      }

Dies spielt in diesem Fall keine Rolle. Wenn es leere Werte gäbe, stünden sie am Anfang des Diagramms und hätten keinen Einfluss auf die Skala des Fensters ganz am Ende. Das ist hier nicht der Fall, der Genosse oben hat es bereits herausgefunden.

 
Ilya Malev:

Ich habe es schließlich selbst so geändert. Aber ich frage mich, warum sie die Logik geändert haben (in MT4 war die Skala ohne Multiplikation mit Punkt gut). Und warum gibt es keine Möglichkeit, dass Puffer ohne Zeichnung (c DRAW_NONE) den Maßstab des Diagramms nicht beeinflussen.

So können Sie es ausprobieren:

PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
PLOT_EMPTY_VALUE >>>
 
Vladimir Pastushak:

Nein )))

Unter welchen Bedingungen wird 1 Element kopiert?

Ja )))

int  CopyBuffer(
    int       indicator_handle,     // handle индикатора
    int       buffer_num,           // номер буфера индикатора
    int       start_pos,            // откуда начнем 
    int       count,                // сколько копируем
    double    buffer[]              // массив, куда будут скопированы данные
    );
 
Ilya Malev:

Ja )))

Ja, dann ist Ihr Satz richtig.