Limitaciones y ventajas de los indicadores

Todas las funciones especializadas que se tratan en este capítulo sólo están disponibles en los códigos fuente de los indicadores. No tiene sentido utilizarlos en otros tipos de programas MQL: devolverán un error.

Hay otras funciones que están prohibidas en los indicadores:

Algunos de ellos (con el prefijo Order-) se refieren a cálculos de negociación y sólo están permitidos en Asesores Expertos y scripts. Otros están pensados para ejecutar peticiones que bloquean la ejecución del hilo hasta que se devuelve el resultado, mientras que esto no está permitido para los indicadores porque se ejecutan en el hilo de interfaz del terminal. Por una razón similar, las funciones Sleep y MessageBox están prohibidas.

Los indicadores se encargan principalmente de visualizar los datos y, curiosamente, no sirven para realizar cálculos masivos. En concreto, si decide crear un indicador que entrene una red neuronal o un árbol de decisión en el proceso, lo más probable es que esto afecte negativamente al funcionamiento normal del terminal.

El efecto de un cálculo largo se demuestra con el indicador IndBarIndex.mq5, que en el modo normal está diseñado para mostrar números de barra en los elementos de su búfer. No obstante, utilizando el parámetro de entrada SimulateCalculation, que debe ajustarse a true, puede iniciar un bucle infinito en un temporizador.

// Setting to true will freeze the drawing of indicators
// on charts of the same working symbol
// Attention! Don't forget to remove the indicator after the experiment!
input bool SimulateCalculation = false;
 
void OnInit()
{
   ...
   if(SimulateCalculation)
   {
      EventSetTimer(1);
   }
}
...  
void OnTimer()
{
   Comment("Calculation started at "TimeLocal());
   while(!IsStopped())
   {
   // infinite loop to emulate calculations
   }
   Comment("");
}

En este modo, el indicador, como era de esperar, empieza a ocupar por completo 1 núcleo del procesador, pero también aparece otro efecto secundario: cualquier indicador en el mismo símbolo donde se coloca IndBarIndex deja de actualizarse. Por ejemplo, podemos ejecutar IndBarIndex en EURUSD (cualquier marco temporal), y luego en cualquier otro gráfico EURUSD, puede intentar aplicar una media móvil regular: no se mostrará hasta que elimine IndBarIndex del primer gráfico.

A este respecto, todos los cálculos largos deben colocarse en hilos separados, es decir, scripts o Asesores Expertos no comerciales, y sólo sus resultados deben ser utilizados en los indicadores. La API de MQL5 permite crear nuevos gráficos u objetos con gráficos en los que es posible aplicar plantillas tpl con el Asesor Experto o script requerido.