Escala vertical (por precio y lecturas del indicador)

Las propiedades relacionadas con la escala vertical se establecen y analizan utilizando los elementos de dos enumeraciones: ENUM_CHART_PROPERTY_INTEGER y ENUM_CHART_PROPERTY_DOUBLE. En la siguiente tabla se enumeran las propiedades junto con su tipo de valor.

Algunas propiedades permiten acceder no sólo a la ventana principal sino también a una subventana, para lo cual las funciones ChartSet y ChartGet deben utilizar el parámetro window (0 significa la ventana principal y es el valor por defecto de la forma abreviada de ChartGet).

Identificador

Descripción

Tipo de valor

CHART_SCALEFIX

Modo de escala fija

bool

CHART_FIXED_MAX

Máximo fijo de la subventana window o máximo inicial de la ventana principal

double

CHART_FIXED_MIN

Mínimo fijo de la subventana window o mínimo inicial de la ventana principal

double

CHART_SCALEFIX_11

Modo de escala 1:1

bool

CHART_SCALE_PT_PER_BAR

Modo de indicación de la escala en puntos por barra

bool

CHART_POINTS_PER_BAR

Valor de la escala en puntos por barra

double

CHART_PRICE_MIN

Valores mínimos en la ventana o subventana window (sólo lectura)

double

CHART_PRICE_MAX

Valores máximos en la ventana o subventana window (sólo lectura)

double

CHART_HEIGHT_IN_PIXELS

Altura fija de la ventana o subventana en píxeles, se requiere el parámetro window

int

CHART_WINDOW_YDISTANCE

Distancia en píxeles a lo largo del eje vertical Y entre el marco superior de la subventana window y el marco superior de la ventana principal del gráfico. (sólo lectura)

int

Por defecto, los gráficos admiten la escala adaptativa para que las cotizaciones o las líneas indicadoras se ajusten completamente en vertical a un periodo de tiempo visible. Para algunas aplicaciones es conveniente fijar la escala, para lo cual el terminal ofrece varios modos. En ellos, el gráfico puede desplazarse con el ratón o con las teclas (Mayús + flecha) no sólo a izquierda/derecha, sino también arriba/abajo, y en la escala de la derecha aparece una barra deslizante con la que puede desplazar rápidamente el gráfico con el ratón.

El modo fijo se establece activando la bandera CHART_SCALEFIX y especificando el máximo y el mínimo requeridos en los campos CHART_FIXED_MAX y CHART_FIXED_MIN (en la ventana principal, el usuario podrá mover el gráfico hacia arriba o hacia abajo, debido a lo cual los valores CHART_FIXED_MAX y CHART_FIXED_MIN cambiarán sincrónicamente, pero la escala vertical seguirá siendo la misma). El usuario también podrá cambiar la escala vertical pulsando el botón del ratón sobre la escala de precios y, sin soltarlo, moviéndolo hacia arriba o hacia abajo. Las subventanas no permiten la edición interactiva de la escala vertical. A este respecto, más adelante presentaremos un indicador SubScaler.mq5 (véase la sección de eventos de teclado), que le permitirá al usuario controlar el rango de valores de la subventana mediante el teclado, en lugar de desde el cuadro de diálogo de configuración, utilizando los campos de la pestaña Scale.

El modo CHART_SCALEFIX_11 proporciona una igualdad visual aproximada de los lados del cuadrado en la pantalla: X barras en píxeles (horizontalmente) serán iguales a X puntos en píxeles (verticalmente). La igualdad es aproximada, ya que el tamaño de los píxeles, por regla general, no es el mismo vertical y horizontalmente.

Por último, existe un modo para fijar la relación del número de puntos por barra, que se activa mediante la opción CHART_SCALE_PT_PER_BAR, y la propia relación requerida se fija mediante la propiedad CHART_POINTS_PER_BAR. A diferencia del modo CHART_SCALEFIX, el usuario no podrá cambiar interactivamente la escala con el ratón sobre el gráfico. En este modo, la distancia horizontal de una barra se mostrará en la pantalla en la misma proporción con respecto al número especificado de puntos verticales que la relación de aspecto del gráfico (en píxeles). Si los marcos temporales y tamaños de los dos gráficos son iguales, uno se verá comprimido en precio comparado con el otro según la relación de sus valores CHART_POINTS_PER_BAR. Obviamente, cuanto más pequeño sea el marco temporal, menor será el rango de barras y, por lo tanto, con la misma escala, los marcos temporales pequeños parecen más «aplanados».

Establecer programáticamente la propiedad CHART_HEIGHT_IN_PIXELS hace imposible que el usuario edite el tamaño de la ventana/subventana. Esto suele utilizarse para ventanas que alojan paneles de trading con un conjunto predefinido de controles (botones, campos de entrada, etc.). Para eliminar la fijación del tamaño, establezca el valor de la propiedad en -1.

El valor CHART_WINDOW_YDISTANCE es necesario para convertir las coordenadas absolutas del gráfico principal en coordenadas locales de la subventana para trabajar correctamente con objetos gráficos. La cuestión es que cuando se producen eventos de ratón, las coordenadas del cursor se transfieren en relación con la ventana del gráfico principal, mientras que las coordenadas de los objetos gráficos de la subventana del indicador se establecen en relación con la esquina superior izquierda de la subventana.

Vamos a preparar el script ChartScalePrice.mq5 para analizar los cambios en las escalas y tamaños verticales.

void OnStart()
{
   int flags[] =
   {
      CHART_SCALEFIXCHART_SCALEFIX_11,
      CHART_SCALE_PT_PER_BARCHART_POINTS_PER_BAR,
      CHART_FIXED_MAXCHART_FIXED_MIN,
      CHART_PRICE_MINCHART_PRICE_MAX,
      CHART_HEIGHT_IN_PIXELSCHART_WINDOW_YDISTANCE
   };
   ChartModeMonitor m(flags);
   ...
}

Esto reacciona a la manipulación del gráfico de la siguiente manera:

Initial state:
    [key] [value]   // ENUM_CHART_PROPERTY_INTEGER
[0]     6       0
[1]     7       0
[2]    10       0
[3]   107     357
[4]   110       0
    [key]  [value]  // ENUM_CHART_PROPERTY_DOUBLE
[0]    11 10.00000
[1]     8  1.13880
[2]     9  1.12330
[3]   108  1.12330
[4]   109  1.13880
// reduced the vertical size of the window
CHART_HEIGHT_IN_PIXELS 357 -> 370
CHART_HEIGHT_IN_PIXELS 370 -> 408
CHART_FIXED_MAX 1.1389 -> 1.1388
CHART_FIXED_MIN 1.1232 -> 1.1233
CHART_PRICE_MIN 1.1232 -> 1.1233
CHART_PRICE_MAX 1.1389 -> 1.1388
// reduced the horizontal scale, which increased the price range
CHART_FIXED_MAX 1.1388 -> 1.139
CHART_FIXED_MIN 1.1233 -> 1.1183
CHART_PRICE_MIN 1.1233 -> 1.1183
CHART_PRICE_MAX 1.1388 -> 1.139
CHART_FIXED_MAX 1.139 -> 1.1406
CHART_FIXED_MIN 1.1183 -> 1.1167
CHART_PRICE_MIN 1.1183 -> 1.1167
CHART_PRICE_MAX 1.139 -> 1.1406
// expand the price range using the mouse (quotes "shrink" vertically)
CHART_FIXED_MAX 1.1406 -> 1.1454
CHART_FIXED_MIN 1.1167 -> 1.1119
CHART_PRICE_MIN 1.1167 -> 1.1119
CHART_PRICE_MAX 1.1406 -> 1.1454