Indicadores: ID Lite Info MA

 

ID Lite Info MA:

El indicador muestra los valores Moving Averages (MA), la diferencia entre valores y la diferencia entre МА.

Líneas del indicador, marcas y diferencias en puntos entre los High y Low de las velas, redondeadas hasta dos decimales, en el gráfico con cotizaciones de tres dígitos.

Autor: Dina Paches

 

Si este indicador no funciona para usted. Y el MetaEditor de su terminal de comercio muestra tales mensajes de error al compilar un archivo con este indicador (puede ser, por ejemplo, al compilarlo para la build 1150 de MetaTrader5):



Para compilar y ejecutar este indicador:

1. Copie esta función y añádala al final del código del indicador:

//+------------------------------------------------------------------+
//| Borrado de objetos por prefijo común en nombres de objetos |||
//||(y tipo de objeto, si es necesario):|
//| 2014 (última modificación: 14.07.2015), Dina Paches |
//| https://login.mql5.com/ru/users/dipach |
//+------------------------------------------------------------------+
//| string prefix_obj = prefijo común en nombres de objetos |
//| long chart_ID = identificador del gráfico | 
//| int sub_window=-1 = índice de la ventana|
//| int type=-1 = tipo de objeto (o en lugar de int - tipo de objeto por |
//| enumeración ENUM_OBJECT)|
//| int start_pos=-1 = posición inicial de la subcadena del prefijo común en |
//| el nombre de los objetos|
//+------------------------------------------------------------------+
void ObDeleteN(string prefix_obj,int chart_ID=0,int sub_window=-1,
               int type=-1,int start_pos=0)
  {
   int quantObj=ObjectsTotal(chart_ID,sub_window,type);
   if(quantObj>0)
     {
      int count=0;
      int prefixLen=StringLen(prefix_obj);
      string name[];
      ArrayResize(name,quantObj,quantObj+1);
      ArraySetAsSeries(name,true);

      for(int i=quantObj;i>=0;i--)
        {
         string objNameX=ObjectName(chart_ID,i,sub_window,type);
         string findValue=StringSubstr(objNameX,start_pos,prefixLen);

         if(StringCompare(findValue,prefix_obj,true)==0)
           {
            count=count+1;
            name[count-1]=objNameX;
           }
        }
      if(count>0)
        {
         ArrayResize(name,count,count+1);
         for(int i=count-1;i>=0; i--)
           {
            ObjectDelete(chart_ID,name[i]);
           }
        }
     }
     else return;
  }
//+------------------------------------------------------------------+


2. Ponga una doble barra "//" justo antes de esta línea en las secciones OnDeinit() y OnChartEvent() del código:

 ObjectsDeleteAll(0,prefixObj,0,-1);


3. Copie y ponga esta línea en el código del indicador (póngala debajo de la línea anterior y, dado que la línea anterior aparece dos veces en el código, deberá poner esta línea en dos lugares):

ObDeleteN(prefixObj,0,0);


4. Como resultado, las secciones de código con la variante de función que no funciona, por ejemplo, en la build 1150, tendrán este aspecto en el código:


   //ObjectsDeleteAll(0,prefixObj,0,-1);
   ObDeleteN(prefixObj,0,0);


5. Después, compile el código. Los mensajes de error desaparecerán y el indicador estará listo para trabajar en los gráficos de la build 1150 del MetaTrader5.


P./S.: Si tiene alguna pregunta - escriba aquí en la discusión o en un mensaje privado.

 
P./S: Sustituida la función de borrado de objetos del post anterior por una opción algo más versátil y que ahorra algo más de trabajo.
 

Uf... es como si se me hubiera caído una piedra del alma. "El que busca siempre encuentra" (c) funcionó, afortunadamente, esta vez.

Encontré los prototipos de la variante de la función anterior después de todo.

Y ahora puedo decir muchas gracias por el esquema detallado a Kovalyov, el autor del libro de texto, Artyom y desconocido para mí por el nombre 7777877.


P./S.: En un tiempo, mientras analizaba los prototipos de esta función por mí mismo, adentrándome en su significado y realizando experimentos, me las arreglé para no guardar (¡no a propósito!) sus fuentes de MQL4, en base a las cuales fue finalmente compilada y utilizada en diferentes formas para mis códigos en MQL4 y MQL5. No he publicado el código de esta función (o sus otras variantes) pública o abiertamente antes.

Recuerdo que por muy desafortunadas coincidencias me encontré con obras en el sitio / búsqueda no funciona (o es que he buscado, como ahora me doy cuenta, de forma incorrecta), cuando mi conciencia me recordó a encontrar fuentes. En particular, recordando que vi información sobre el esquema en el foro, no me acordaba del libro de texto. En consecuencia, lo dejé para "más adelante".

Así que, tratando con respeto por el trabajo de los demás, trato si es posible copiar inmediatamente la información, de dónde / de quién tomé qué.

Por lo tanto, estoy sinceramente contento de que sin ningún tipo de pistas o recordatorios desde el exterior, he encontrado las fuentes primarias-prototipos de esta función por mí mismo.

 
¡Por favor, publique el código del indicador con los cambios realizados, es un bosque oscuro para mí, pero lo necesito mucho! No puedo conseguirlo yo mismo. ¡¡¡¡Si no es difícil, el archivo compilado para mt5!!!!
 
Siarhei Pekar:
¡Por favor, publique el código del indicador con los cambios realizados, es un bosque oscuro para mí, pero lo necesito mucho! No puedo conseguirlo yo mismo. ¡¡¡¡Si no es difícil, el archivo compilado para mt5!!!!

La versión del indicador en Kodobase se ha cambiado a la versión 1.01, con los cambios ya realizados, y ahora está disponible para su descarga directamente desde la página de este indicador.

 
Siarhei Pekar:

Mientras pensaba en reemplazar el código, me las arreglé para borrar mi explicación de que:

La función ObjectsDeleteAll(), que fue reemplazada por otra en la versión 1.01, para borrar objetos por su prefijo de nombre, funciona más rápido, lo que contribuye a un rendimiento más rápido del código.

Por lo tanto, después de la transición oficial de la build 1150 (lanzada en el momento en que la capacidad de la función ObjectsDeleteAll() para borrar objetos por su prefijo de nombre aún no estaba fijada en la Documentación) a otra build, será mejor cambiar la versión del código del indicador a la que tiene el uso de ObjectsDeleteAll():


 

He actualizado el código de este indicador. Incluyendo, habiendo detectado, corregido errores en la activación/desactivación de la visualización de las líneas del indicador en el gráfico (había un problema cuando la activación de la visualización de las líneas después de la desactivación no funcionaba).

Versión actual: 1.39

 

He descubierto que en el código de este indicador para MT5 (versión 1.39), no he añadido un recálculo adicional de valores en prev_calculated=0, similar al que hay en el código de dicho indicador para MT4. Es decir, cuando se trabaja con la versión 1.39, existe la posibilidad de que aparezcan valores cero en la tabla del indicador en prev_calculated=0.

Lo siento.

Ahora he enviado una nueva versión(1.42) para su publicación

Como los moderadores de CodeBase son gente ocupada y es posible que la actualización no se publique pronto, de momento adjuntaré aquí la versión corregida.

 

Muchas gracias al moderador de CodeBase.

Código actualizado esta tarde a la versión 1.42

P./S.: He borrado el archivo adjunto arriba.

 

Ayer salió la actualización a la versión 1.45 (acabo de entrar ahora)

Lo principal: he sustituido la función de eliminar un indicador del gráfico - he corregido el valor de uno de sus parámetros de entrada.