Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 445

 
Artyom Trishkin:

Portanto, leia iCustom() diretamente pelo primeiro índice de laço.

Outra questão é que você precisa de dados da barra atual à esquerda. É por isso que eu digo - leia do zero para o encontrado, mas não mais do que taxas_total-1.

Leia somente quando o limite é >1

Outras vezes não há novos dados, e o índice da barra que você precisa não mudará.

Não, mas os números de barra das setas mais próximas no comentário estão corretos

//+------------------------------------------------------------------+
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:

Ele não quer.

Você lê o que eu escrevo?

A outra questão é que você quer dados da barra atual à esquerda. É por isso que eu digo - leia do zero para o encontrado, mas não mais do que taxas_total-1.

Leia apenas no limite>1

 
Artyom Trishkin:

Você lê o que eu escrevo?

A outra questão é que você precisa de dados da barra atual à esquerda. É por isso que eu digo - leia do zero para o encontrado, mas não mais do que taxas_total-1.

Leia apenas no limite>1

Não foi o que eu fiz?
if(limite>1)
{
limite=taxas_total-1;

 
mila.com:

Não foi isso que eu fiz?
if(limite>1)
{
limite=taxas_total-1;

Isto é o que você fez a seguir:

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

Do que eu estava falando?

 
Artyom Trishkin:

O que você fez a seguir é o seguinte:

O que eu estava dizendo?

Leia no limite>1

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

Eu não sei como fazer direito?

 
mila.com:

Leia no limite>1

Eu não sei como fazer direito?

É por isso que eu digo - leia do zero para o encontrado, mas não mais do que taxas_total-1.
 
Artyom Trishkin:
É por isso que eu digo ler de zero para encontrar o certo, mas não mais do que taxas_total-1.

Estou lhe dizendo, não sei como fazer isso. Mostre-me, por favor).

 
mila.com:

Já lhe disse, não sei como fazer isso. Mostre-me, por favor).

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

Este ciclo só irá até a barra que você quiser (se for encontrado), ou toda a história irá até o limite.

 
Artyom Trishkin:

Este ciclo só será até a barra que você quiser (se for encontrado), ou para toda a história, até o limite.

eu, bastante ruim, não mostra nada.

//+------------------------------------------------------------------+
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:

Eu sou realmente mau, não mostra nada.

Eu ainda não entendi: o que você quer encontrar e exibir? Apenas em palavras - sem código.

Aqui você está escrevendo:

Olá, ajude-me, por favor.

Quero, a qualquer momento, saber o número da barra onde se encontra a seta indicadora.

No exemplo, eu tentei preencher o buffer se a seta estiver na décima barra.

Então, a pergunta imediatamente: por que você está procurando na décima barra? E em geral, em que bar você quer? E qual flecha? O último? Ou os dois últimos - o superior e o inferior? Ou conhece a barra da seta desejada pelo seu número da direita para a esquerda?

Isto não está claro.

E anexar o indicador inteiro, não o OnCalculate()

Razão: