Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 444

 
mila.com:

l'advisor è stato fatto per controllare la possibilità stessa, si apre correttamente, ma nell'indicatore non vede affatto i valori dei due buffer vicini dell'indicatore "Arrow v.3

Quindi avete un indicatore fuori dall'array nel ciclo. Guardate quale limite, e quali valori il sono nei loop annidati. Dove si riferisce l'indice il quando limit == rates_total-2?

 
mila.com:

Come lo vedi?

Vedi il tuo codice

 
Artyom Trishkin:

Vedere qual è il limite, e quali sono i valori il nei cicli annidati.

stampa il numero di barra della prima e della seconda freccia, alternativamente

  for(int i=limit; i>=0; i--) 
     {
     for(int il=i+1;il<=i+300;il++)
        {
         if(NormalizeDouble(iCustom(NULL,0,"Arrow v.3",0,il),Digits)!=EMPTY_VALUE
            )
           {
            num_buy=il;
            Print(il);
           // break;
           }
        }
//
      if(num_buy==60)
        {
         BufferUP[i+1]=low[i+1]-distance*MyPoint;
         
        }
    }
 
Artyom Trishkin:

Controlla il tuo codice

Sono tre giorni che lo guardo, non so cosa c'è che non va).

Aiutatemi
 
mila.com:

stampa il numero di barra della prima e della seconda freccia, alternativamente

Che razza di strano ciclo è questo?

Perché vai dall'inizio della storia alla fine e continui a tornare indietro di trecento battute in un ciclo annidato ad ogni iterazione del primo ciclo?

Siete probabilmente salvati da iCustom(), che non dà valori al di fuori dei dati della storia.

Beh, date un'occhiata voi stessi. Supponiamo che abbiate una storia di sole 1000 barre: rates_total in questo caso avete 1000. Limite, 1000-2=998. Quindi, la prima barra della storia è esclusa dal ciclo. Non si preoccupi.

Si mette prima un indice sulla barra con il numero 998 (rates_total-2 = 1000-2 = 998),

e poi cosa fai? Poi si incorpora il ciclo partendo dal valore i, uguale a 998+1=999 - questa è la prima barra della storia - non c'è più niente a sinistra - è vuoto. E si fa il ciclo da 999 a 999+300. Non ci sono dati lì - questo sta andando fuori dall'array.

Quindi, il limite in questa situazione dovrebbe essere tale che il ciclo incorporato all'inizio raggiunga la barra 999. Questo è rates_total-2-300. Quindi, dato che iniziate il ciclo annidato da i+1, è allora che non ci sarà un superamento dell'array: i=1000-2-300 = 698. Nel ciclo annidato, li=i+1 = 698+1=699, e fino a li=i+300 = 698+300=998. Anche in questo caso la prima barra è esclusa dal calcolo. Ma non c'è alcun superamento dell'array.

A quanto pare, non sapete bene cosa state facendo.

Questo è indicato da un ciclo molto strano in generale.

Non hai bisogno di loop annidati lì. Se state cercando un certo numero di valori nel buffer dell'indicatore personalizzato, allora fate il ciclo da zero a un certo valore. Ma non più di rates_total.

 
Artyom Trishkin:

Che razza di strano ciclo è questo?

Perché vai dall'inizio della storia alla fine e continui a tornare indietro di trecento battute in un ciclo annidato ad ogni iterazione del primo ciclo?

Siete probabilmente salvati da iCustom(), che non dà valori al di fuori dei dati della storia.

Beh, date un'occhiata voi stessi. Supponiamo che abbiate una storia di sole 1000 barre: rates_total in questo caso avete 1000. Limite, 1000-2=998. Quindi, la prima barra della storia è esclusa dal ciclo. Lasciate che sia.

Si mette prima un indice sulla barra con il numero 998 (rates_total-2 = 1000-2 = 998),

e poi cosa fai? Poi si incorpora il ciclo partendo dal valore i, uguale a 998+1=999 - questa è la prima barra della storia - non c'è più niente a sinistra - è vuoto. E si fa il ciclo da 999 a 999+300. Non ci sono dati lì - questo sta andando fuori dall'array.

Quindi, il limite in questa situazione dovrebbe essere tale che il ciclo incorporato all'inizio raggiunga la barra 999. Questo è rates_total-2-300. Quindi, dato che iniziate il ciclo annidato da i+1, è allora che non ci sarà un superamento dell'array: i=1000-2-300 = 698. Nel ciclo annidato, li=i+1 = 698+1=699, e fino a li=i+300 = 698+300=998. Anche in questo caso la primissima barra è esclusa dal calcolo. Ma non c'è alcun superamento dell'array.

A quanto pare, non sapete bene cosa state facendo.

Questo è indicato da un ciclo molto strano in generale.


Grazie, è molto chiaro.

 
Artyom Trishkin:

Questo è indicato da un ciclo molto strano in generale.

Non hai bisogno di loop annidati lì. Se state cercando un certo numero di valori di buffer di indicatori personalizzati, allora fate un ciclo da zero a un certo valore. Ma non più di rates_total.

Perché da zero?

Ho bisogno di mettere un punto se sulla terza barra o "N" c'è una freccia dell'indicatore chiamato. Su tutta la storia

Qual è il ciclo corretto?

 
mila.com:

Perché da zero?

Ho bisogno di sapere se c'è una freccia sulla terza barra o "N" dell'indicatore da chiamare. Su tutta la storia.

Qual è il ciclo corretto?

Dove dovrebbe essere fatto questo? In un indicatore? In un EA?

 
Artyom Trishkin:

Dove dovrebbe essere fatto questo? In un indicatore? In un EA?

In un indicatore

 
mila.com:

Nell'indicatore

Quindi leggete iCustom() a destra dell'indice del primo ciclo.

Un'altra domanda è che avete bisogno di dati dalla barra corrente a sinistra. Ecco perché dico: leggete da zero a quello trovato, ma non più di rates_total-1.

E solo lettura quando limite>1

Altrimenti, non ci sono nuovi dati e l'indice della barra di cui avete bisogno non cambierà.