array statico ? - pagina 4

 
Per i=Bars nel secondo ciclo stampa tutti gli elementi dell'array ma non i valori, e tutti = 0

Sono confuso

Ho tolto la finale i-- nel primo ciclo oops. ma non ha avuto effetto

 

Con una piccola modifica il tuo codice sembra fare qualcosa...

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

Quando hai letto il libro sugli array hai visto dove dice questo?

"Quando si dichiara un array, il tipo di dati, il nome dell'array e il numero di elementi di ogni dimensione devono essere specificati:"

 
RaptorUK:

Con una piccola modifica il tuo codice sembra fare qualcosa...

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

Quando hai letto il libro sugli array hai visto dove dice questo?

"Quando si dichiara un array, il tipo di dati, il nome dell'array e il numero di elementi di ogni dimensione devono essere specificati:"

Sì, l'ho fatto

La mia comprensione era che double v1[] ha deciso il tipo di dati globalmente e prima dello start()
Poi [i] ha inizializzato l'array dicendogli quanti elementi ci sono nell'array in questo caso 1 dimensione con elementi = Bar, tuttavia il numero cambia durante la deincrementazione di i--.
giusto?

Quindi, se sta deincrementando il numero di elementi, come fa il buffer a memorizzare e postare l'indicatore se il numero di elementi non è più presente?
O immagino che dovrei dire cosa succede agli elementi mentre deincrementano [i] ?
Scompaiono semplicemente? Sono ancora memorizzati in v1[i] per essere referenziati o sono spariti?

Se riesco a capire questo forse posso essere in grado di capire come fare riferimento a loro o se sono spariti allora posso capire come tenerli per l'uso.
La cosa che non capisco è la dichiarazione else sembra essere in grado di fare riferimento a v1[i]=v1[i+1] Quindi come può fare riferimento a v1[i] se a quel punto v1[i] = 0 quando stampo a questo punto.

Questa sorta di senso di = 0 in un certo senso perché se l'array è vuoto allora stamperebbe l'array vuoto come 0 poiché non ci sono elementi nell'array.

Non sono sicuro di capirlo davvero, ma continuo a pensarci e a leggere il documento più e più volte.

Ora considerando Bars se Bars ha più di 1 numero associato ad esso allora la dimensione potrebbe essere diversa da quella che sto pensando.
Quindi credo che leggerò di più anche su questo per essere sicuro di capire cosa sia in realtà.

Ho pensato che fosse solo un conteggio di un singolo numero come Bar=il numero di barre sul grafico
Quando stampo Bars mi dà 1002 sul grafico a 5 minuti e sto pensando che questa sia una dimensione singola.


Continuerò a lavorarci.

 

Se volete rendere un Array più grande (o più piccolo) dovete usare ArrayResize. . . un Array è proprio come qualsiasi altra variabile . . è solo che ce ne possono essere molte a cui potete accedere facilmente . . .

Copiate questo codice ed eseguitelo come script, quale pensate sarà l'output?

//+------------------------------------------------------------------+
//|                                                  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 none EURUSD,M5: rimosso
2011.09.21 07:54:26 none EURUSD,M5: uninit reason 0
2011.09.21 07:54:26 none EURUSD,M5: deinizializzato
2011.09.21 07:54:26 none EURUSD,M5: test[39]= 0
2011.09.21 07:54:26 none EURUSD,M5: inizializzato


Questo è ciò che lo script produce, l'ho copiato esattamente

Ho solo fatto doppio clic su di esso e l'ha eseguito e questo è ciò che appare nella scheda degli esperti

Il giornale dello script dice solo
2011.09.21 07:54:26 Script none EURUSD,M5: removed
2011.09.21 07:54:26 Script none EURUSD,M5: loaded successfully

Pensavo di dover vedere 45.6 come output? Mi sbaglio?

Ho creato il mio array fisso[5] = {1,2,3,4,5}

E sembra essere in grado di stampare[5] o stampare[3] ecc.

fammi mettere le parentesi graffe e vedere di nuovo lo script





 

Ok, bene... ora modifica questa linea...

. . . e prova di nuovo.

double test[];

to

double test[40];
 
2011.09.21 08:07:58 nessuno EURUSD,M5: uninit reason 0
2011.09.21 08:07:58 nessuno EURUSD,M5: deinizializzato
2011.09.21 08:07:58 nessuno EURUSD,M5: test[39]= 45.6


Darn, ho avuto modo di correre fuori essere di nuovo in un paio d'ore.

Forse posso pensarci ancora un po' mentre guido

 

Non c'è davvero nulla a cui pensare . . .

"Quando si dichiara un array, il tipo di dati, il nome dell'array e il numero di elementi di ogni dimensione devono essere specificati:"

Dovete dichiarare il numero di elementi nell'array . . .

 

Interessante
Pensavo che la dichiarazione del numero di elementi fosse fatta con v1[i]? Dato che i=Bars pensavo fosse lo stesso che dire v1[Bars] che è qualunque sia quel numero


Se non è dichiarato, non capisco come l'indicatore possa sapere cos'è v1[i] se non posso nemmeno farvi riferimento?
Questo stesso script lavora sulla versione dell'indicatore e lo memorizza nel buffer di v1[] quindi come fa a sapere come fare riferimento al buffer per disegnare la linea?

Attualmente funziona sull'indicatore. Si tratta di un altro argomento?

 

Sì, i buffer indicatori sono gestiti in modo diverso dagli array ordinari.

v[i] non sta dichiarando l'array, è solo uno degli elementi . . ma double v[]; è un array con zero elementi . . quindi v[anything] sempre = 0