Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 804

 
Andrey Sokolov:

¿Pueden decirme qué se quiere decir en la entrada

int i,limit=prev_calculado==0 ? rates_total-1 : rates_total-prev_calculated;

"==" , "?" , ": "

?

Документация по MQL5: Основы языка / Операторы / Условный оператор ?:
Документация по MQL5: Основы языка / Операторы / Условный оператор ?:
  • www.mql5.com
В качестве первого операнда – "выражение1" – может быть использовано любое выражение, результатом которого является значение типа bool. Если результат равен , то выполняется третий операнд – "выражениеЗ". Второй и третий операнды, то есть "выражение2" и "выражениеЗ", должны возвращать значения одного типа и не должны иметь тип void...
 
¡Es simplemente horrible! Si todavía puedo rastrear la lógica en los Asesores Expertos, corregir algunas cosas, añadir algunas más... No entiendo para nada el código de los indicadores(
 
prom18:

Gracias, Igor. No lo he expresado correctamente. El indicador se calcula y se dibuja para un número determinado de barras (50 en este caso) y en una ventana independiente. No necesita el precio de apertura sino la primera barra del día para indicar la MA. Pero de todos modos, gracias.

read SetIndexDrawBegin() - esta es una restricción para dibujar el buffer del indicador, nunca se usa

o en mi ejemplo puedes hacerlo así:

input int BarCount = 50;
....

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[])
  {
   int i,limit;
   static double dayopen=0.0;
   static int lastday=0;
   if(prev_calculated==0)
     {
      limit=rates_total-1;
      dayopen=0.0;
      lastday=0;
     }
   else limit=rates_total-prev_calculated;
   limit = fmin(BarCount,limit);
   for(i=limit; i>=0; i--)
     {
      if(TimeDay(time[i])!=lastday)
        {
         dayopen=open[i];
         lastday= TimeDay(time[i]);
        }
      Label1Buffer[i]=dayopen;
     }
   return(rates_total);
  }

es decir, restringir el cálculo de los topes de los indicadores a la configuración deBarCount

 
Andrey Sokolov:

¿Pueden decirme qué se quiere decir en la entrada

int i,limit=prev_calculado==0 ? rates_total-1 : rates_total-prev_calculated;

"==" , "?" , ": "

?

https://docs.mql4.com/ru/basis/operators/ternary


He reescrito mi ejemplo, en la primera versión no funcionaba correctamente al cambiar de TF, hay que reiniciar dayopen y lastday, se describen con el modificador static

Условный оператор ?: - Операторы - Основы языка - Справочник MQL4
Условный оператор ?: - Операторы - Основы языка - Справочник MQL4
  • docs.mql4.com
В качестве первого операнда – "выражение1" – может быть использовано любое выражение, результатом которого является значение типа bool. Если результат равен , то выполняется третий операнд – "выражениеЗ". Второй и третий операнды, то есть "выражение2" и "выражениеЗ", должны возвращать значения одного типа и не должны иметь тип void...
 
Artyom Trishkin:

Devuelve también el índice del parámetro de la función pasado por referencia

Devuelto:

double GetPatt5barsDN()
{
double low3 = 0;
int índice = 0;
for(int i=1; i<20; i++)
{
si
((Close[i] > Open[i]) &&
(Close[i+1] > Open[i+1]) &&
(Close[i+2] > Open[i+2]) && //Low[i+2] es necesario en esta vela
(Close[i+3] < Open[i+3]) &&
(Close[i+4] < Open[i+4])

low3 = Low[i+2];
índice = i+2;
}

return(low3);
return(index);
}


¿Qué debo hacer ahora?

 
Sfinks35:

Devuelto:

double GetPatt5barsDN()
{
double low3 = 0;
int índice = 0;
for(int i=1; i<20; i++)
{
si
((Close[i] > Open[i]) &&
(Close[i+1] > Open[i+1]) &&
(Close[i+2] > Open[i+2]) && //Low[i+2] es necesario en esta vela
(Close[i+3] < Open[i+3]) &&
(Close[i+4] < Open[i+4])

low3 = Low[i+2];
índice = i+2;
}

return(low3);
return(index);
}


¿Qué debo hacer ahora?

Esa no es forma de recuperarlo.


Así.

int GetPatt5barsDN()
      {
       double low3 = 0;
       int index = 0;
       for(int i=1; i<20; i++)
          {
            if
            ((Close[i] > Open[i]) &&  
            (Close[i+1] > Open[i+1]) &&
            (Close[i+2] > Open[i+2]) && //На этой свече нужен Low[i+2]
            (Close[i+3] < Open[i+3]) &&  
            (Close[i+4] < Open[i+4]))
             
            low3 = Low[i+2];
            index = i+2;
          } 
           
          return(index);
      }


Más información en

double min = Low[GetPatt5barsDN()];
 
Sfinks35:

Devuelto:

double GetPatt5barsDN()
{
double low3 = 0;
int índice = 0;
for(int i=1; i<20; i++)
{
si
((Close[i] > Open[i]) &&
(Close[i+1] > Open[i+1]) &&
(Close[i+2] > Open[i+2]) && //Low[i+2] es necesario en esta vela
(Close[i+3] < Open[i+3]) &&
(Close[i+4] < Open[i+4])

low3 = Low[i+2];
índice = i+2;
}

return(low3);
return(index);
}


¿Qué debo hacer ahora?

¿Dónde está el retorno del índice a través de un parámetro por referencia?

Y por favor, inserte el código correctamente:


 
¿Existe una función en MQL4 que pueda detectar si una cotización tiene 5 o 4 decimales, cuántos decimales tiene un activo por ejemplo EURJPY tiene 2 decimales, EURUSD tiene 4 decimales?
 
Seric29:
¿Existe una función en MQL4 que pueda identificar las cotizaciones de un tipo de cuenta, como 5 o 4 decimales, cuáles son las formas de identificar cuántos ceros tiene un activo después de la coma por ejemplo EURJPY tiene 2 decimales, EURUSD tiene 4 decimales?

https://docs.mql4.com/ru/predefined/digitsvar

Digits - Предопределенные переменные - Справочник MQL4
Digits - Предопределенные переменные - Справочник MQL4
  • docs.mql4.com
Digits - Предопределенные переменные - Справочник MQL4
 
Artyom Trishkin:

¿Dónde está el retorno del índice a través de un parámetro por referencia?

Y por favor, inserte el código correctamente:


¡Buenas tardes!
Parece que ahora lo tengo claro:
double GetPatt5barsDN(int &index)
      {
       double low3 = 0;
       for(int i=1; i<20; i++)
          {
            if
            ((Close[i] > Open[i]) &&  
            (Close[i+1] > Open[i+1]) &&
            (Close[i+2] > Open[i+2]) && //На этой свече нужен Low[i+2]
            (Close[i+3] < Open[i+3]) &&  
            (Close[i+4] < Open[i+4]))
             
            low3 = Low[i+2];
            index = i+2;
          }           
     return(low3);
     }

Pero al compilar genera una advertencia: posible pérdida de datos debido a la conversión de tipo en línea:
índice = GetPatt5barsDN(índice);

double low3 = 0;
   int index = 0;
   low3 = GetPatt5barsDN(index);
   index = GetPatt5barsDN(index);
   Print("low3= ", low3);
   Print("index= ", index);

No hay errores en la cabecera de la función (o en la propia función) durante la compilación.

Razón de la queja: