[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 311

 
Oh, ed ecco un'altra cosa. Dichiarando la dimensione di 4 celle in una delle dimensioni dell'array, non potete chiamare Buffer_OHLC[4][] - il punto è che la numerazione inizia con zero, non con uno. Quindi il massimo che potete chiamare è Buffer_OHLC[3][];
 
drknn:


1. La variabile Candles non è usata da nessuna parte.

2. La linea

non è scritto correttamente. Sta nel ciclo - ad ogni iterazione del ciclo si crea una nuova variabile Cls. E non ne hai bisogno lì. Il testo seguente sarà sufficiente.


1. Ho dimenticato di sottolineare che il lavoro dell'indicatore non è stato completato. Ma in ogni caso questo non dovrebbe influenzare in alcun modo il funzionamento di questa particolare funzione.

2. All'inizio era così. Ma quando ha iniziato a darmi un errore, ho pensato che il problema potesse risiedere in qualche modo nel passaggio di dati da un array in un array.

 
drknn:

E prova la linea

sostituirlo con


Non ha aiutato. L'errore è sempre lo stesso.
 
drknn:
C'è un'altra cosa. Se avete dichiarato una dimensione di 4 celle in una delle dimensioni dell'array, non potete chiamare Buffer_OHLC[4][] - il punto è che la numerazione inizia con zero, non con uno. Quindi il massimo che potete chiamare è Buffer_OHLC[3][];


La cella zero può anche rimanere vuota. Un esempio simile è stato descritto nel libro di testo. Beh, in generale, anche cambiando la dimensione dell'array, l'errore rimane.

PS L'indicatore dovrebbe prendere i dati da un altro strumento e applicarli a quello attuale. Forse sto facendo qualcosa di fondamentalmente sbagliato nel risolvere questo compito?

 
silhouette:


La cella nulla può anche rimanere vuota. Un esempio simile è stato descritto nel libro di testo. Beh, in generale, anche dopo aver cambiato la dimensione dell'array, l'errore persiste.

PS L'indicatore dovrebbe prendere i dati da un altro strumento e applicarli allo strumento corrente. Forse sto facendo qualcosa di fondamentalmente sbagliato nel risolvere questo problema?

Semplicemente non state lavorando correttamente con un array bidimensionale

 

1. Scambiare il primo indice con il secondo indice

2. usare ArrayResize

 
silhouette:


La cella zero può anche rimanere vuota. Un esempio simile è stato descritto nel libro di testo. Beh, in generale, anche cambiando la dimensione dell'array, l'errore rimane.

PS L'indicatore dovrebbe prendere i dati da un altro strumento e applicarli a quello attuale. Forse sto facendo qualcosa di sbagliato in linea di principio nel risolvere questo compito?


Avete dichiarato l'array Buffer_OHLC[4][]. Stai indirizzando una cella inesistente dell'array, cioè Buffer_OHLC[4][i] - non c'è una cella simile nell'array che hai dichiarato. Il massimo è Buffer_OHLC[3][i].

Mi spiego: avete dichiarato 4 celle nella seconda dimensione dell'array (diciamo 4 righe di una tabella con un numero infinito di colonne). Poiché la numerazione parte da zero, la prima linea accessibile è Buffer_OHLC[0][], la seconda è Buffer_OHLC[1][], la terza è Buffer_OHLC[2][], e la quarta è Buffer_OHLC[3][]. La linea Buffer_OHLC[4][] non esiste nell'array che hai dichiarato !

 
Anche lì [3,i] non esiste quando i>0 :)
 

Non fate caso ai freni, è la prima volta che ho a che fare con gli array multidimensionali :)

drknn, grazie! Capisco il suo commento

tara:

1. Scambia il primo indice con il secondo

2. usare ArrayResize

Grazie! Ho il risultato. Ma vorrei anche chiarire la funzione ArrayResize e la dimensione della prima dimensione dell'array.

   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);

Quando si usa limit-1, c'è un grafico, ma appare l'errore 4051 "Invalid value of function parameter".

 
Qualcuno può spiegare come aprire un ordine in qualsiasi momento di una barra e aprire l'ordine successivo solo nella barra successiva?