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

 
Oh, und noch etwas. Wenn Sie eine Dimension von 4 Zellen in einer der Array-Dimensionen deklarieren, können Sie nicht Buffer_OHLC[4][] aufrufen - der Punkt ist, dass die Nummerierung mit Null beginnt, nicht mit Eins. Das Maximum, das Sie aufrufen können, ist also Buffer_OHLC[3][];
 
drknn:


1. Die Variable "Kerzen" wird nirgendwo verwendet.

2. Die Linie

ist nicht korrekt geschrieben. Sie liegt in der Schleife - bei jeder Iteration der Schleife erstellen Sie eine neue Variable Cls. Und dort brauchen Sie es nicht. Der folgende Text ist ausreichend.


1. Ich habe vergessen zu erwähnen, dass die Arbeiten an den Indikatoren noch nicht abgeschlossen sind. In jedem Fall sollte dies aber die Funktionsweise dieser speziellen Funktion in keiner Weise beeinträchtigen.

2. So war es anfangs auch. Aber als es anfing, mir einen Fehler zu geben, dachte ich, dass das Problem irgendwie in der Übergabe von Daten aus einem Array in ein Array liegen könnte.

 
drknn:

Und versuchen Sie die Zeile

ersetzen Sie es durch


Das hat nicht geholfen. Der Fehler ist immer noch derselbe.
 
drknn:
Es gibt noch eine weitere Sache. Wenn Sie eine 4-Zellen-Dimension in einer der Array-Dimensionen deklariert haben, können Sie Buffer_OHLC[4][] nicht aufrufen - der Punkt ist, dass die Nummerierung mit Null beginnt, nicht mit Eins. Sie können also maximal Buffer_OHLC[3][] aufrufen;


Die Nullzelle kann auch leer bleiben. Ein ähnliches Beispiel wurde im Lehrbuch beschrieben. Im Allgemeinen bleibt der Fehler bestehen, auch wenn man die Größe des Feldes ändert.

PS Der Indikator sollte Daten aus einem anderen Werkzeug übernehmen und sie auf das aktuelle anwenden. Vielleicht mache ich bei der Lösung dieser Aufgabe etwas grundlegend falsch?

 
silhouette:


Die Nullzelle kann auch leer bleiben. Ein ähnliches Beispiel wurde im Lehrbuch beschrieben. Im Allgemeinen bleibt der Fehler auch nach einer Änderung der Array-Größe bestehen.

PS Der Indikator sollte Daten aus einem anderen Werkzeug übernehmen und sie auf das aktuelle Werkzeug anwenden. Vielleicht mache ich etwas grundlegend falsch, wenn ich dieses Problem löse?

Sie arbeiten einfach nicht korrekt mit einem zweidimensionalen Array

 

1. Den ersten Index mit dem zweiten Index vertauschen

2. ArrayResize verwenden

 
silhouette:


Die Nullzelle kann auch leer bleiben. Ein ähnliches Beispiel wurde im Lehrbuch beschrieben. Im Allgemeinen bleibt der Fehler bestehen, auch wenn man die Größe des Feldes ändert.

PS Der Indikator sollte Daten aus einem anderen Werkzeug übernehmen und sie auf das aktuelle anwenden. Vielleicht mache ich bei der Lösung dieser Aufgabe prinzipiell etwas falsch?


Sie haben das Array Buffer_OHLC[4][] deklariert. Sie adressieren eine nicht existierende Zelle des Arrays, nämlich Buffer_OHLC[4][i] - eine solche Zelle gibt es in dem von Ihnen angegebenen Array nicht. Das Maximum davon ist Buffer_OHLC[3][i].

Lassen Sie mich erklären: Sie haben 4 Zellen in der zweiten Dimension des Arrays deklariert (sagen wir, 4 Zeilen einer Tabelle mit einer unendlichen Anzahl von Spalten). Da die Nummerierung bei Null beginnt, ist die erste Zeile, auf die zugegriffen werden kann, Puffer_OHLC[0][], die zweite ist Puffer_OHLC[1][], die dritte ist Puffer_OHLC[2][] und die vierte ist Puffer_OHLC[3][]. Die Zeile Buffer_OHLC[4][] existiert nicht in dem von Ihnen deklarierten Array !

 
Dort gibt es auch [3,i] nicht, wenn i>0 :)
 

Achten Sie nicht auf die Bremsen, das ist das erste Mal, dass ich mit mehrdimensionalen Arrays zu tun habe :)

drknn, ich danke Ihnen! Ich verstehe Ihren Kommentar

tara:

1. Den ersten Index mit dem zweiten vertauschen

2. ArrayResize verwenden

Ich danke Ihnen! Ich habe das Ergebnis. Aber ich möchte auch über die Funktion ArrayResize und die Größe der ersten Dimension des Arrays aufklären.

   int counted_bars=IndicatorCounted();
   int limit=Bars-counted_bars-1;
   if (limit>1) 
      limit=Bars-1;
   
   ArrayResize(Buffer_OHLC,limit-1);
   for(int i=limit; i>=0; i--)
    {
      Buffer_OHLC[i][0]=iOpen (Smb,Period(),i);
      Buffer_OHLC[i][1]=iHigh (Smb,Period(),i);
      Buffer_OHLC[i][2]=iLow  (Smb,Period(),i);
      Buffer_OHLC[i][3]=iClose(Smb,Period(),i);
      
      if(Line==true)
       {
        Buffer_ind[i]=Buffer_OHLC[i][3];
       }
    }
   return(0);

Bei der Verwendung von limit-1 wird zwar ein Diagramm angezeigt, aber die Fehlermeldung 4051 "Ungültiger Wert des Funktionsparameters" wird eingeblendet.

 
Kann jemand erklären, wie man eine Order zu einem beliebigen Zeitpunkt eines Balkens eröffnet und die nächste Order erst beim nächsten Balken eröffnet?