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

 
Artyom Trishkin:

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.

Leggere solo quando il limite>1

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

Non lo fa, ma i numeri delle barre delle frecce più vicine nel commento sono corretti

//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   if(rates_total<1) return(0);
   int limit=rates_total-prev_calculated;
   if(limit>1) 
     {
      limit=rates_total-1;
      ArrayInitialize(BufferUP,EMPTY_VALUE);
      ArrayInitialize(BufferDN,EMPTY_VALUE);
     }
   for(int i=limit; i>=0; i--) 
     {
         if(NormalizeDouble(iCustom(NULL,0,"Arrow v.3",0,i),Digits)!=EMPTY_VALUE)
           {
            num_buy=i;

           }
//
      if(num_buy==10)
        {
         BufferUP[i+1]=low[i+1]-distance*MyPoint;
         
        }
         if(NormalizeDouble(iCustom(NULL,0,"Arrow v.3",1,i),Digits)!=EMPTY_VALUE
            )
           {
            num_sell=i;

           }
      if(num_sell==10)
        {
         BufferDN[i+1]=high[i+1]+distance*MyPoint;

        }
     
      Comment(num_buy,"num_sell",num_sell);
     }
//--- return value of prev_calculated for next call

   return(rates_total);
  }
 
mila.com:

Non vuole.

Leggi quello che scrivo?

L'altra questione è che vuoi i dati dalla barra corrente a sinistra. Ecco perché dico - leggi da zero a quello trovato, ma non più di tassi_totale-1.

Solo lettura al limite>1

 
Artyom Trishkin:

Leggi quello che scrivo?

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

Solo lettura al limite>1

Non l'ho fatto così?
se(limite>1)
{
limit=rates_total-1;

 
mila.com:

Non è quello che ho fatto?
se(limite>1)
{
limit=rates_total-1;

Questo è quello che hai fatto dopo:

for(int i=limit; i>=0; i--) 

Di cosa stavo parlando?

 
Artyom Trishkin:

Quello che avete fatto dopo è questo:

Cosa stavo dicendo?

Leggere al limite>1

for(int i=limit; i>1; i--) 

Non so come farlo bene?

 
mila.com:

Leggere al limite>1

Non so come farlo bene?

Ecco perché dico: leggete da zero a quello trovato, ma non più di rates_total-1.
 
Artyom Trishkin:
Ecco perché dico di leggere da zero per trovare quello giusto, ma non più di tassi_totale-1.

Ti dico che non so come fare. Mostramelo, per favore).

 
mila.com:

Te l'ho detto, non so come fare. Mostramelo, per favore).

if(limit>1)
  {
   for(int i=0; i<limit; i++) 
     { 
      // тут поиск до нужного вам бара. Нашли - запомнили бар или поставили точку куда нужно и break;
     }
  }

Questo ciclo andrà solo alla barra desiderata (se trovata), o l'intera storia andrà al limite.

 
Artyom Trishkin:

Questo ciclo sarà solo fino alla barra desiderata (se trovata), o per tutta la storia, fino al limite.

me, abbastanza male, non mostra nulla.

//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   if(rates_total<1) return(0);
   int limit=rates_total-prev_calculated;
   if(limit>1) 
     {
      limit=rates_total-1;
      ArrayInitialize(BufferUP,EMPTY_VALUE);
      ArrayInitialize(BufferDN,EMPTY_VALUE);
     }
  if(limit>1)
  {
   for(int i=0; i<limit; i++) 
     { 
         if(NormalizeDouble(iCustom(NULL,0,"Arrow v.3",0,i),Digits)!=EMPTY_VALUE)
           {
            num_buy=i;

           }
//
      if(num_buy==10)
        {
         BufferUP[i+1]=low[i+1]-distance*MyPoint;
         
        }
         if(NormalizeDouble(iCustom(NULL,0,"Arrow v.3",1,i),Digits)!=EMPTY_VALUE
            )
           {
            num_sell=i;

           }
      if(num_sell==10)
        {
         BufferDN[i+1]=high[i+1]+distance*MyPoint;

        }
     
      Comment(num_buy,"num_sell",num_sell);
     }
     }
//--- return value of prev_calculated for next call

   return(rates_total);
  }
 
mila.com:

Sono molto cattivo, non si vede niente.

Continuo a non capire: cosa vuoi trovare e visualizzare? Solo a parole - senza codice.

Qui stai scrivendo:

Ciao, aiutami, per favore.

Voglio, in qualsiasi momento, conoscere il numero della barra in cui si trova la freccia dell'indicatore.

Nell'esempio, ho provato a riempire il buffer se la freccia è sulla decima barra.

Quindi, la domanda è subito: perché lo cercate alla decima barra? E in generale, su quale barra volete? E quale freccia? L'ultimo? O gli ultimi due - quello superiore e quello inferiore? O conoscere la barra della freccia desiderata per il suo numero da destra a sinistra?

Questo non è chiaro.

E allegare l'intero indicatore, non OnCalculate()

Motivazione: