Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 744

 
Marat Sultanov:
Hay una sección de código que no entendí. Tienes que corregirlo tú mismo.


¿Puede mostrarme qué es exactamente ....

 
Rafael Sahibgareev:


¿Puede mostrarme qué es exactamente ....


Descargar el código -Marat Sultano escribió allí lo que no está claro.
 

Marat, gracias por tu ayuda con el código ......

Otra pregunta, por favor muéstreme cómo organizar correctamente un bucle para la siguiente sección 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, gracias por tu ayuda con el código ......

Una pregunta más, por favor muéstreme cómo organizar correctamente un bucle para el siguiente fragmento de código ......

Es así:

//--- цикл расчета
   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);
}

Sólo estoy confundido por una parte de su código:

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

¿Por qué el corchete debe estar ahí? ¿Hubo alguna intención que no puso en práctica? (Me refiero al operador condicionalelse)

 

Marat, gracias una vez más, escribí mi último código en la escuela hace 22 años.

Yo estaba sentado a expensas de otro operador, donde ponerlo como un interruptor de los próximos cuatro operadores.....

Creo que puedo manejarlo yo mismo ........

Marat, por favor, aconséjame o indícame el enlace si el cálculo se puede hacer sin utilizar el "bucle" .....

 
Rafael Sahibgareev:

Marat, gracias una vez más, escribí mi último código en la escuela hace 22 años.

Yo estaba sentado a expensas de otro operador, donde ponerlo como un interruptor de los próximos cuatro operadores.....

Creo que puedo manejarlo yo mismo ........

Marat, por favor, aconséjame o indícame el enlace si el cálculo se puede hacer sin utilizar el "bucle" .....

Disculpe, ¿puedo preguntarle cuál es su propósito, qué resultado quiere obtener del trozo de código discutido? Una vez que entienda tu intención, me será mucho más fácil ayudarte :)
 

Sobre el ciclo preguntado por curiosidad...... Es posible......

En sí no es complicado, el primer operador "si" si funciona prohibido, los operadores de clasificación de dirección no funcionan .......

Además, en el futuro, planeo cambiar el código, para hacer que se marque con el trabajo en una barra de cero,

para que este mismo clasificador de la prohibición aparezca en el tick cuando el spread va más allá de....indicador sin filtros de agrupación adicionales scalper....

De hecho, entiendo que todos los patrones viven en ticks......

 

Necesitas un ciclo para atravesar las barras. Si sólo necesitas lecturas de los últimos 1 ó 2 compases, puedes prescindir del bucle, pero si necesitas analizar una docena de compases o más, es mejor que utilices el bucle, ¿no?

Si te niegas a usar bucles te condenarás a un código chino :)

 

Rafael, te recomiendo que leas en este orden:

  1. Declaración condicional if-else
  2. Operador para
  3. Operador de bucle While
  4. Continuar operador continuar
  5. continuar operador romper

Y si te dejas llevar, entonces profundiza:

  1. Operadores
  2. Conceptos básicos de la lengua
Los he dividido por la frecuencia de uso en la práctica. Nada complicado, sólo lo suficiente para entender lo esencial.


 

Gracias por los consejos y recomendaciones, hoy es muy tarde y mañana estudiaré la ayuda y los artículos....

Sólo me interesan las tres últimas barras incluyendo la opción[0].....

Más adelante probablemente necesitaré más 15-20 ...... No puedo prescindir de los ciclos .....

Gracias de nuevo sinceramente por su ayuda y apoyo.....