Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 744

 
Marat Sultanov:
Há aí uma secção de código que eu não compreendi. Tem de ser o próprio a corrigi-lo.


Pode mostrar-me o que exactamente....

 
Rafael Sahibgareev:


Pode mostrar-me o que exactamente....


Descarregar o código -Marat Sultano escreveu aí o que não está claro.
 

Marat, obrigado pela sua ajuda com o código ......

Outra pergunta, por favor mostre-me como organizar correctamente um laço para a seguinte secção de código ......

//--- цикл расчета 
      
        {
        
         //--- если предыдущая свеча имеет параметры больше MSC
         if(IsLossCandle)
            if(ASSHighBuf[i-1]>=max_size_candel)
               BufferLossCanle[i]=low[i-1];
                 {
                  if(IsTopShadow)
                     if((ASSOpenBuf[i-1]==ASSCloseBuf[i-1]) && IMaDifBuff[i]-IMaDifBuff[i-1]>0 || (ASSLowBuf[i-1]==0 && IMaDifBuff[i]-IMaDifBuff[i-1]>0))
                        BufferTop[i]=low[i-1];
                  if(IsLowerShadow)
                     if((ASSOpenBuf[i-1]==ASSCloseBuf[i-1]) && IMaDifBuff[i]-IMaDifBuff[i-1]<0 || (ASSLowBuf[i-1]==0 && IMaDifBuff[i]-IMaDifBuff[i-1]<0))
                        BufferLower[i]=high[i-1];
                 }
        }


//--- return value of prev_calculated for next call 
   return(rates_total);
  }
 
Rafael Sahibgareev:

Marat, obrigado pela sua ajuda com o código ......

Outra pergunta, por favor mostre-me como organizar correctamente um laço para o seguinte fragmento de código ......

É assim:

//--- цикл расчета
   const int Limit = fmax(prev_calculated, 1);

   for(int i=Limit; i<rates_total; ++i)
   {
      //--- если предыдущая свеча имеет параметры больше MSC
      if(IsLossCandle)
      {
         if(ASSHighBuf[i-1]>=max_size_candel) BufferLossCanle[i]=low[i-1];

         if(IsTopShadow)
         {
            if((ASSOpenBuf[i-1]==ASSCloseBuf[i-1] && IMaDifBuff[i]-IMaDifBuff[i-1]>0) || (ASSLowBuf[i-1]==0 && IMaDifBuff[i]-IMaDifBuff[i-1]>0))
            {
               BufferTop[i]=low[i-1];
            }
         }

         if(IsLowerShadow)
         {
            if((ASSOpenBuf[i-1]==ASSCloseBuf[i-1] && IMaDifBuff[i]-IMaDifBuff[i-1]<0) || (ASSLowBuf[i-1]==0 && IMaDifBuff[i]-IMaDifBuff[i-1]<0))
            {
               BufferLower[i]=high[i-1];
            }
         }
      }
   }

//--- return value of prev_calculated for next call 
   return(rates_total);
}

Estou apenas confuso com uma parte do seu código:

if(ASSHighBuf[i-1]>=max_size_candel)
   BufferLossCanle[i]=low[i-1];
     {

Porque é que o suporte encaracolado deve estar ali? Havia uma intenção que não implementou? (aludindo aooutro operador condicional)

 

Marat, obrigado mais uma vez, escrevi o meu último código na escola há 22 anos.

Eu estava sentado às custas de outro operador, onde colocá-lo como um disjuntor dos próximos quatro operadores.....

Acho que eu próprio posso tratar disso ........

Marat, por favor aconselhe-me ou indique-me a ligação se o cálculo puder ser feito sem utilizar o "loop" .....

 
Rafael Sahibgareev:

Marat, obrigado mais uma vez, escrevi o meu último código na escola há 22 anos.

Eu estava sentado às custas de outro operador, onde colocá-lo como um disjuntor dos próximos quatro operadores.....

Acho que eu próprio posso tratar disso ........

Marat, por favor aconselhe-me ou indique-me a ligação se este cálculo pode ser feito sem utilizar um "loop" .....

Desculpe, posso perguntar-lhe qual é o seu objectivo, que resultado pretende obter com a peça de código discutida? Assim que compreender a vossa intenção, será muito mais fácil para mim ajudar-vos :)
 

Sobre o ciclo pedido por curiosidade...... Será isto possível......

Não é complicado, o primeiro operador "se", se funcionar proibido, os operadores de classificação de direcção não funcionam .......

Além disso, no futuro, pretendo alterar o código, para o fazer funcionar com trabalho numa barra de zero,

para que este mesmo classificador de proibição apareça no tick quando a propagação vai além do indicador.... sem filtros de agregação adicionais escalper....

De facto, compreendo que todos os padrões vivem em ticks......

 

É necessário um ciclo para percorrer as barras. Se precisar de leituras apenas para as últimas 1 ou 2 barras, pode passar sem o laço, mas se precisar de analisar uma dúzia ou mais barras, é melhor usar o laço, certo?

Se se recusar a utilizar loops, condenar-se-á ao código chinês :)

 

Raphael, recomendo-lhe que leia por esta ordem:

  1. Declaração de if-else condicional
  2. Operador para
  3. Enquanto operador de laço
  4. Continuar operador continuar
  5. continuar a pausa do operador

E se for sugado, então vá mais fundo:

  1. Operadores
  2. Noções básicas da língua
Dividi-os por frequência de utilização na prática. Nada de complicado, apenas o suficiente para obter a sua essência.


 

Obrigado pelos conselhos e recomendações, hoje é tarde demais, amanhã vou ler novamente a ajuda e os artigos....

Só estava interessado nas últimas três barras, incluindo a opção[0].....

Mais tarde precisarei provavelmente de mais 15-20 ...... Não posso passar sem os ciclos .....

Mais uma vez obrigado sinceramente pela sua ajuda e apoio.....