Control del ratón y del teclado

En esta sección nos familiarizaremos con un grupo de propiedades que afectan a la forma en que el gráfico capturará ciertas manipulaciones del ratón y del teclado, que se consideran por defecto acciones de control. En concreto, los usuarios de MetaTrader 5 saben muy bien que el gráfico se puede desplazar con el ratón, y que se puede llamar al menú contextual para ejecutar los comandos más solicitados. MQL5 permite desactivar total o parcialmente este comportamiento del gráfico. Es importante señalar que esto sólo puede hacerse mediante programación: no hay opciones similares en la interfaz de usuario del terminal.

La única excepción es la opción CHART_DRAG_TRADE_LEVELS (véase en la tabla siguiente): la configuración del terminal proporciona la pestaña Charts con una lista desplegable que controla el permiso para arrastrar niveles de trading con el ratón.

Todas las propiedades de este grupo son de tipo booleano (true para permitido y false para deshabilitado) y están en la enumeración ENUM_CHART_PROPERTY_INTEGER.

Identificador

Descripción

CHART_CONTEXT_MENU

Activar/desactivar el acceso al menú contextual pulsando el botón derecho del ratón. El valor false desactiva sólo el menú contextual del gráfico, mientras que el menú contextual de los objetos del gráfico sigue estando disponible. El valor por defecto es true.

CHART_CROSSHAIR_TOOL

Activar/desactivar el acceso a la herramienta Crosshair pulsando el botón central del ratón. El valor por defecto es true.

CHART_MOUSE_SCROLL

Desplazamiento del gráfico con el botón izquierdo o la rueda del ratón. Cuando el desplazamiento está activado, esto se aplica no sólo al desplazamiento horizontal, sino también al vertical, pero este último sólo está disponible cuando se establece una escala fija: una de las propiedades CHART_SCALEFIX, CHART_SCALEFIX_11 o CHART_SCALE_PT_PER_BAR. El valor por defecto es true.

CHART_KEYBOARD_CONTROL

Posibilidad de manejar el gráfico desde el teclado (botones Home, End, PageUp/PageDown, +/-, flechas arriba/abajo, etc.). Si se configura en false, se puede desactivar el desplazamiento y la escala del gráfico, pero al mismo tiempo es posible recibir eventos de pulsación de estas teclas en OnChartEvent. El valor por defecto es true.

CHART_QUICK_NAVIGATION

Activación de la barra de navegación rápida en el gráfico, que aparece automáticamente en la esquina izquierda de la línea de tiempo al hacer doble clic con el ratón o pulsar las teclas Space o Input. Con la barra, puede cambiar rápidamente el símbolo, el marco temporal o la fecha de la primera barra visible. Por defecto, la propiedad está establecida en true y la navegación rápida está activada.

CHART_DRAG_TRADE_LEVELS

Permiso para arrastrar niveles de trading en el gráfico con el ratón. El modo de arrastre está activado por defecto (true).

En el script de prueba ChartInputControl.mq5, configuraremos el monitor con todas las propiedades anteriores y, además, proporcionaremos variables de entrada para que el usuario configure arbitrariamente los valores. Nuestro script guarda una copia de seguridad de la configuración al iniciarse, por lo que todas las propiedades modificadas se restaurarán cuando finalice el script.

#property script_show_inputs
   
#include <MQL5Book/ChartModeMonitor.mqh>
   
input bool ContextMenu = true// CHART_CONTEXT_MENU
input bool CrossHairTool = true// CHART_CROSSHAIR_TOOL
input bool MouseScroll = true// CHART_MOUSE_SCROLL
input bool KeyboardControl = true// CHART_KEYBOARD_CONTROL
input bool QuickNavigation = true// CHART_QUICK_NAVIGATION
input bool DragTradeLevels = true// CHART_DRAG_TRADE_LEVELS
   
void OnStart()
{
   const bool Inputs[] =
   {
      ContextMenuCrossHairToolMouseScroll,
      KeyboardControlQuickNavigationDragTradeLevels
   };
   const int flags[] =
   {
      CHART_CONTEXT_MENUCHART_CROSSHAIR_TOOLCHART_MOUSE_SCROLL,
      CHART_KEYBOARD_CONTROLCHART_QUICK_NAVIGATIONCHART_DRAG_TRADE_LEVELS
   };
   ChartModeMonitor m(flags);
   Print("Initial state:");
   m.print();
   m.backup();
   
   for(int i = 0i < ArraySize(flags); ++i)
   {
      ChartSetInteger(0, (ENUM_CHART_PROPERTY_INTEGER)flags[i], Inputs[i]);
   }
   
   while(!IsStopped())
   {
      m.snapshot();
      Sleep(500);
   }
   m.restore();
}

Por ejemplo, cuando ejecutamos el script, podemos restablecer los permisos para el menú contextual, la herramienta Crosshair, el ratón y los controles de teclado a false. El resultado está en el siguiente registro:

Initial state:
    [key] [value]
[0]    50       1
[1]    49       1
[2]    42       1
[3]    47       1
[4]    45       1
[5]    43       1
CHART_CONTEXT_MENU 1 -> 0
CHART_CROSSHAIR_TOOL 1 -> 0
CHART_MOUSE_SCROLL 1 -> 0
CHART_KEYBOARD_CONTROL 1 -> 0

En este caso, no podrá mover el gráfico ni con el ratón ni con el teclado, ni siquiera llamar al menú contextual. Por lo tanto, para restaurar su rendimiento, tendrá que soltar el mismo script u otro en el gráfico (recuerde que sólo puede haber un script en el gráfico, y cuando se aplica uno nuevo, el anterior se descarga). Basta con soltar una nueva instancia del script, pero no ejecutarlo (pulse Cancel en el cuadro de diálogo para introducir variables de entrada).