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

 
-Aleks-:

Obtención de errores: ¿qué ocurre? En MQL4 funciona...


'{' - demasiados inicializadores TZ_Sky_and_Ground_V_04.mq5 2484 6

Debería poner arrFibo[18] - dicen 18 elementos.
 
Vladimir Karputov:

¿Has visto la ayuda deiMA?

Primer paso: declarar una variable en la "cabecera" para almacenar el indicador iMA:

Segundo paso: crear el manejador del indicador en OnInit().

Y el resultado (la retícula en la captura de pantalla está fijada en la barra nº 1):

Pregunta: si hago un bucle a través del indicador, ¿debo establecer también el doble MA[1]; o debo pedir/recibir un array mayor? No entiendo a qué se debe toda esta complejidad, cuál es la ventaja en comparación con MQL4.
 
-Aleks-:

Si intento utilizar el doble MA[1] en el bucle, ¿debo utilizar el doble MA[1]; o es mejor solicitar/recibir el tamaño de matriz más grande? No entiendo por qué se necesitan todas estas complicaciones - cuál es la ventaja en comparación con MQL4.


Mi ejemplo con la función iMAGetes un ejemplo diseñado para recibir un valor a la vez de un indicador. Si quieres obtener más valores del indicador, debes utilizarCopyBuffer con los parámetros "from" y "to" y guardar el resultado en un array.


Añadido: habrá un ejemplo más adelante...


Ejemplo prometido.

Parámetros de entrada:

  • obtener valores en un array - si es "true" - entonces usamos obtener valores en un array, si es "false" - entonces obtenemos un valor a la vez
  • count -> sólo si "get values into an array"==true - el número de barras copiadas en el array
  • posición inicial -> sólo si "get values into an array"==true - número del elemento inicial (barra) que se copiará en el array desde

Trabajando con el array y el indicador Moving Avegarege en el Expert Advisor:

Trabajar con la matriz y el indicador Moving Avegarege en el EA

Por favor, preste atención al array arr_ma y a los valores de los elementos con índice #0 y con índice #8.

ds

Archivos adjuntos:
iMAGet.mq5  12 kb
 
Vladimir Karputov:


Mi ejemplo con la función iMAGetes un ejemplo diseñado para recibir un valor a la vez del indicador. Si quieres obtener varios valores del indicador, debes utilizarCopyBuffer con los parámetros "from" y "to" y guardar el resultado en un array.

Añadido: habrá un ejemplo más adelante...

Ejemplo prometido.

Parámetros de entrada:

  • obtener valores en un array - si es "true", entonces usamos obtener valores en un array, si es "false", entonces obtenemos un valor a la vez
  • count -> sólo si "get values into an array"==true - el número de barras copiadas en el array
  • posición inicial -> sólo si "get values into an array"==true - número del elemento inicial (barra) que se copiará en el array desde

Trabajando con el array y el indicador Moving Avegarege en el Expert Advisor:

Por favor, preste atención al array arr_ma y a los valores de los elementos con índice #0 y con índice #8.

ds

Gracias por el ejemplo.

Es muy importante para mí entender si hay alguna ventaja en solicitar un solo valor de indicador y copiar una docena de valores de indicador - ¿tal vez hubo alguna investigación al respecto?

El hecho de que la serie temporal esté invertida - no es bueno - estoy acostumbrado a la numeración estándar de las barras 0123, pero aquí obtengo 1230 en orden inverso.

Si no sé cuántas barras necesito durante la búsqueda (por ejemplo, cuando buscamos la MA y el punto de cruce de barras), ¿debo solicitar el máximo número posible? ¿Afecta de alguna manera al rendimiento?

 
-Aleks-:

Gracias por el ejemplo.

Es muy importante para mí entender si hay una ventaja en solicitar un solo valor de indicador y copiar una docena de valores de indicador - ¿tal vez ha habido alguna investigación sobre esto?

...


¿Quién nos impide investigar nosotros mismos?) ?

...

El hecho de que la serie temporal esté invertida - no es bueno - estoy acostumbrado a la numeración estándar de las barras 0123, y aquí tenemos 1230 en orden inverso.

...

Lo único que hay que hacer después de obtener un array (tras llamar a iMAGetArray) es ejecutarArraySetAsSeries('nuestro array',true).
...

Si no sé qué número de barras voy a necesitar en la búsqueda (por ejemplo, al buscar una MA y un punto de cruce de barras), ¿debo solicitar el máximo número posible? ¿Afecta de alguna manera al rendimiento?


En estos casos, es mejor hacer varias consultas. Por ejemplo, primera consulta - 50 elementos, si es necesario - segunda consulta (50 elementos de nuevo) ...
 
Vladimir Karputov:

Quién nos impide investigar por nuestra cuenta :) ?


Mi analfabetismo en MQL5 es un obstáculo: puedo engañar a todo el mundo por un error en el código, ¡pero su profesionalidad inspiraría más confianza en estos estudios!

Vladimir Karputov:


Todo lo que necesitas es ejecutarArraySetAsSeries('nuestro array',true) después de obtener el array (tras llamar a iMAGetArray).

Me refiero a hacerlo en una función a la vez?


Vladimir Karputov:


En estos casos, es mejor hacer varias consultas. Por ejemplo, la primera solicitud - 50 elementos, y, si es necesario, la segunda solicitud (50 elementos de nuevo) ...
Brr... Es decir, ¿poner un bucle en el bucle? ¿Y por qué 50 y no 100? Todas las mismas investigaciones sobre este tema son necesarias, puede ser que no tenga sentido en la recepción de la información más de una barra...
 
Los comentarios no relacionados con este tema han sido trasladados a "Preguntas de los principiantes de MQL4 MT4 MetaTrader 4".
 
-Aleks-:

...

Es decir, ¿hacerlo en una función a la vez?

...


Es mejor voltear la matriz hacia adentro:

Vladimir Karputov:

Después de recibir el array (tras llamar a iMAGetArray), tendrás que ejecutarArraySetAsSeries('nuestro array',true).

-Aleks-:

...

Brr... Es decir, ¿poner un bucle en el bucle? ¿Por qué 50 y no 100? De todos modos, los estudios sobre este tema son necesarios, tal vez no tenga sentido informarse sobre más de un bar...

No hay bucles anidados - sólo habrá un bucle alrededor de todos los valores: todo el procesamiento es secuencial - el resultado de la búsqueda en una función separada (en ella, solicitamos un valor determinado - por ejemplo, 50 valores). Si no encontramos el resultado, hacemos una nueva petición.

 

¡Trabajar con indicadores en MQL5 después de MQL4 es terrible! Realmente me pone enfermo.

¡No entiendo por qué no pueden combinar todo en una sola función, incluyendo el mango, en lugar de manchar la llamada del indicador en todo el código!

Y si la configuración de un indicador va a ser modificada por la función en la que se encuentra el indicador, ¡no entiendo qué hacer! ¿Es necesario iniciar todas las variantes del indicador?


He visto un ejemplo en MQL4 - ¿cómo hacerlo en MQL5?


int BarPeresek_iMAf(int PeriodMA)
  {
   int TFT=0;
   int shiftMAT=0;
   int typeMAT=0;
   int priceMAT=0;
   int BarPeresek=0;
   if(Bars(Symbol(),0)>PeriodMA)
     {
      for(int X=1;X<1000; X++)
        {
         double MAT=NormalizeDouble(iMA(Symbol(),TFT,PeriodMA,shiftMAT,typeMAT,priceMAT,X),Digits());
         if((Low(X)>MAT && High(X)>MAT) || 
            (Low(X)<MAT && High(X)<MAT))BarPeresek++;
         else {BarPeresek++; break;}
        }

     }
   return BarPeresek;
  }
Торговые советники и собственные индикаторы - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Торговые советники и собственные индикаторы - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Среди программ для автоматического трейдинга можно выделить две большие категории: торговые роботы и индикаторы. Первые предназначены для...
 

¿Pueden decirme cómo eliminar los marcadores después de cerrar una posición para que no se muestren?

¿Es posible eliminarlas mediante programación?

Gracias.

Razón de la queja: