Propiedades de los rayos para objetos con líneas rectas

Entre los objetos gráficos existen varios tipos en los que las líneas entre puntos de anclaje pueden mostrarse como segmentos (es decir, estrictamente entre un par de puntos) o como líneas rectas infinitas que continúan en una u otra dirección a lo largo de toda el área de visibilidad de la ventana. Tales objetos son:

  • Línea de tendencia
  • Línea de tendencia por ángulo
  • Todos los tipos de canales (equidistantes, desviaciones estándar, regresión, horquilla de Andrews)
  • Línea de Gann
  • Líneas de Fibonacci
  • Canal de Fibonacci
  • Expansión de Fibonacci

Para ellos, puede activar por separado la continuación de línea hacia la izquierda o hacia la derecha mediante las propiedades OBJPROP_RAY_LEFT y OBJPROP_RAY_RIGHT, respectivamente. Además, para una línea vertical, puede especificar si debe dibujarse en todas las subventanas del gráfico o sólo en la actual (donde se encuentra el punto de anclaje): la propiedad OBJPROP_RAY se encarga de ello. Todas las propiedades son booleanas, lo que significa que pueden estar activadas (true) o desactivadas (false).

Identificador

Descripción

OBJPROP_RAY_LEFT

El rayo continúa hacia la izquierda.

OBJPROP_RAY_RIGHT

El rayo continúa hacia la derecha.

OBJPROP_RAY

La línea vertical se extiende a todas las ventanas del gráfico.

Puede comprobar el funcionamiento de los rayos utilizando el script ObjectRays.mq5. Crea 3 canales de desviación estándar con diferentes configuraciones de rayo.

La función de ayuda SetupChannel crea y configura un objeto específico. Mediante sus parámetros se establece la longitud del canal en barras y la anchura del canal (desviación), así como las opciones de visualización de los rayos a izquierda y derecha, y el color.

#include "ObjectPrefix.mqh"
   
void SetupChannel(const int lengthconst double deviation = 1.0,
   const bool right = falseconst bool left = false,
   const color clr = clrRed)
{
   const string name = ObjNamePrefix + "Channel"
      + (right ? "R" : "") + (left ? "L" : "");
   // NB: Anchor point 0 must have an earlier time than anchor point 1,
   // otherwise the channel will degenerate
   ObjectCreate(0nameOBJ_STDDEVCHANNEL0iTime(NULL0length), 0);
   ObjectSetInteger(0nameOBJPROP_TIME1iTime(NULL00));
   // deviation
   ObjectSetDouble(0nameOBJPROP_DEVIATIONdeviation);
   // color and description
   ObjectSetInteger(0nameOBJPROP_COLORclr);
   ObjectSetString(0nameOBJPROP_TEXTStringFormat("%2.1"deviation)
      + ((!right && !left) ? " NO RAYS" : "")
      + (right ? " RIGHT RAY" : "") + (left ? " LEFT RAY" : ""));
   // properties of rays
   ObjectSetInteger(0nameOBJPROP_RAY_RIGHTright);
   ObjectSetInteger(0nameOBJPROP_RAY_LEFTleft);
   // lighting up objects by highlighting
   // (besides, it's easier for the user to remove them)
   ObjectSetInteger(0nameOBJPROP_SELECTABLEtrue);
   ObjectSetInteger(0nameOBJPROP_SELECTEDtrue);
}

En la función OnStart, llamamos a SetupChannel para 3 canales diferentes.

void OnStart()
{
   SetupChannel(241.0true);
   SetupChannel(482.0falsetrueclrBlue);
   SetupChannel(363.0falsefalseclrGreen);
}

Como resultado, obtenemos un gráfico de la siguiente forma.

Canales con diferentes configuraciones de las propiedades OBJPROP_RAY_LEFT y OBJPROP_RAY_RIGHT

Canales con diferentes configuraciones de las propiedades OBJPROP_RAY_LEFT y OBJPROP_RAY_RIGHT

Cuando los rayos están activados, es posible solicitar al objeto que extrapole valores de tiempo y precio utilizando las funciones que describiremos en la sección Obtener la hora o el precio en determinados puntos de las líneas.