statisches Array ? - Seite 4

 
Für i=Bars in der zweiten Schleife werden alle Array-Elemente gedruckt, aber nicht die Werte, und alle = 0

Ich bin verwirrt

Ich habe die Endung i-- in der ersten Schleife entfernt, aber das hatte keinen Effekt.

 

Mit einer kleinen Änderung scheint Ihr Code etwas zu tun...

2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[0]= 0
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[1]= 0
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[2]= 0
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[3]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[4]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[5]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[6]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[7]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[8]= 0

Wenn Sie das Buch über Arrays gelesen haben, haben Sie gesehen, wo dies steht?

"Bei der Deklaration eines Arrays müssen Datentyp, Array-Name und Anzahl der Elemente jeder Dimension angegeben werden:"

 
RaptorUK:

Mit einer kleinen Änderung scheint Ihr Code etwas zu tun...

2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[0]= 0
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[1]= 0
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[2]= 0
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[3]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[4]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[5]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[6]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[7]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[8]= 0

Wenn Sie das Buch über Arrays gelesen haben, haben Sie gesehen, wo dies steht?

"Bei der Deklaration eines Arrays müssen Datentyp, Array-Name und Anzahl der Elemente jeder Dimension angegeben werden:"

Ja, das habe ich

Mein Verständnis war, dass double v1[] den Datentyp global und vor dem Start() bestimmt.
Dann wird das Array mit [i] initialisiert, um ihm mitzuteilen, wie viele Elemente im Array sind, in diesem Fall 1 Dimension mit elements = Bars, aber die Anzahl ändert sich beim Deinkrementieren von i--.
richtig?

Wenn also die Anzahl der Elemente deinkrementiert wird, wie speichert und postet der Puffer den Indikator, wenn die Anzahl der Elemente nicht mehr vorhanden ist?
Oder sollte ich besser sagen, was passiert mit den Elementen, wenn sie [i] deinkrementieren?
Verschwinden sie einfach? Werden sie noch in v1[i] gespeichert, um referenziert zu werden, oder sind sie weg?

Wenn ich das herausfinde, kann ich vielleicht verstehen, wie ich sie referenzieren kann, oder wenn sie verschwunden sind, kann ich herausfinden, wie ich sie für die Verwendung speichern kann.
Was ich nicht verstehe, ist, dass die else-Anweisung in der Lage zu sein scheint, v1[i]=v1[i+1] zu referenzieren. Wie kann sie also v1[i] referenzieren, wenn zu diesem Zeitpunkt v1[i] = 0 ist, wenn ich an diesem Punkt drucke.

Dies macht irgendwie Sinn = 0 in gewissem Sinne, denn wenn das Array leer ist, dann würde es das leere Array als 0 drucken, da es keine Elemente im Array gibt.

Ich bin mir nicht sicher, ob ich es wirklich verstehe, aber ich denke ständig darüber nach und lese das Dokument immer wieder.

Wenn man bedenkt, dass Bars mehr als eine Nummer hat, die mit ihr verbunden ist, könnte die Dimension anders sein als das, was ich denke.
Also werde ich wohl noch mehr darüber lesen, um sicher zu sein, dass ich verstehe, was ich eigentlich bin.

Ich hatte gedacht, dass es sich nur um eine einzelne Zahl handelt, wie z.B. Bar=die Anzahl der Balken im Diagramm
Wenn ich Bars ausdrucke, erhalte ich 1002 auf dem 5-Minuten-Chart, und ich denke, dass dies eine einzelne Dimension ist.


Ich werde weiter daran arbeiten.

 

Wenn Sie ein Array größer (oder kleiner) machen wollen, müssen Sie ArrayResize verwenden... ein Array ist genau wie jede andere Variable ... es ist nur so, dass es viele davon geben kann, auf die man leicht zugreifen kann ...

Kopieren Sie diesen Code und führen Sie ihn als Skript aus. Was glauben Sie, wie die Ausgabe aussehen wird?

//+------------------------------------------------------------------+
//|                                                  TestArray.mq4   |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      ""


// #property indicator_chart_window



//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   
   
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
   {
   double test[];
   
   test[39] = 45.6;
   Print("test[39]= ",test[39] );
   

      return(0);
   }
//+------------------------------------------------------------------+

     
 
2011.09.21 07:54:26 keine EURUSD,M5: entfernt
2011.09.21 07:54:26 keine EURUSD,M5: uninit Grund 0
2011.09.21 07:54:26 keine EURUSD,M5: deinitialisiert
2011.09.21 07:54:26 keine EURUSD,M5: test[39]= 0
2011.09.21 07:54:26 keine EURUSD,M5: initialisiert


Dies ist, was das Skript produziert ich kopiert es genau

Ich habe einfach doppelt geklickt und es lief und das ist, was in der Registerkarte Experten

Das Journal des Skripts sagt nur
2011.09.21 07:54:26 Skript keine EURUSD,M5: entfernt
2011.09.21 07:54:26 Skript keine EURUSD,M5: erfolgreich geladen

Ich dachte, ich sollte 45,6 als die Ausgabe zu sehen? bin ich falsch?

Ich habe mein eigenes festes Array[5] = {1,2,3,4,5} erstellt

und scheine in der Lage zu sein, Print[5] oder Print[3] etc.

Ich füge die geschweiften Klammern ein und sehe mir das Skript noch einmal an





 

OK, gut . . jetzt diese Zeile bearbeiten . .

. . und versuchen Sie es erneut.

double test[];

to

double test[40];
 
2011.09.21 08:07:58 keine EURUSD,M5: uninit Grund 0
2011.09.21 08:07:58 keine EURUSD,M5: deinitialisiert
2011.09.21 08:07:58 keine EURUSD,M5: test[39]= 45.6


Verdammt, ich muss los, bin in ein paar Stunden zurück.

Vielleicht kann ich während des Fahrens weiter darüber nachdenken

 

Es gibt wirklich nichts, worüber man nachdenken müsste...

"Bei der Deklaration eines Arrays müssen Datentyp, Array-Name und Anzahl der Elemente jeder Dimension angegeben werden:"

Sie müssen die Anzahl der Elemente im Array angeben...

 

Interessant
Ich dachte, die Anzahl der Elemente wird mit v1[i] deklariert? Da i=Bars, dachte ich, es sei dasselbe wie v1[Bars] zu sagen, was auch immer diese Zahl ist


Wenn es nicht deklariert ist, verstehe ich nicht, wie der Indikator weiß, was v1[i] ist, wenn ich es auch nicht referenzieren kann?
Das gleiche Skript arbeitet mit der Indikatorversion und speichert diese im Puffer von v1[], woher weiß es also, wie es auf den Puffer verweisen kann, um die Linie zu zeichnen?

Der Indikator funktioniert derzeit. Ist dies ein anderes Thema?

 

Ja, Indikatorpuffer werden anders behandelt als gewöhnliche Arrays.

v[i] deklariert nicht das Array, es ist nur eines der Elemente . . aber double v[]; ist ein Array mit Nullelementen . . also ist v[anything] immer = 0