Objetos de gráfico y trazados
Los objetos de gráfico (trazados) permiten dibujar líneas o formas geométricas en los gráficos de cTrader. Al usarlos, puede dibujar patrones o mostrar ciertos eventos en los gráficos basados en los datos de su cBot o indicador.
Los objetos del gráfico utilizan coordenadas X e Y para el posicionamiento.
- El eje X representa el tiempo del gráfico o los índices de barras.
- El eje Y es el precio del símbolo.
Todos los objetos del gráfico se derivan de la clase base ChartObject, lo que significa que todos ellos heredan ciertas características base.
Ejemplos de código de objetos del gráfico
Dibujar dentro de las ventanas de indicadores
Al crear objetos del gráfico, no está limitado al gráfico principal del símbolo. De hecho, puede dibujar objetos del gráfico dentro de cualquier ventana que contenga salidas de indicadores.
La clase Chart tiene la colección IndicatorAreas. Contiene todas las ventanas no superpuestas o separadas en las que los indicadores pueden mostrar sus salidas.
También puede acceder a su área de indicador actual utilizando la propiedad IndicatorArea de su clase Indicator.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
Cuando ejecute una instancia del indicador anterior, debería ver una línea roja en una ventana de indicador separada. Al crear gráficos en áreas de indicadores separadas, puede utilizar todos los métodos de dibujo, ya que tanto Chart como IndicatorArea heredan de la clase base ChartArea.
Texto estático
En lugar de utilizar coordenadas X e Y para el posicionamiento, el texto estático utiliza alineaciones horizontales y verticales estáticas. Para mostrar o dibujar un texto estático, utilice el método DrawStaticText().
1 | |
Si adjunta este objeto del gráfico a un indicador y ejecuta una instancia, verá el siguiente texto en el gráfico principal.

Línea vertical
Utilice el método DrawVerticalLine() para dibujar una línea vertical.
1 2 3 | |
Línea horizontal
Utilice el método DrawHorizontalLine() para dibujar una línea horizontal.
1 2 3 | |
Línea de tendencia
Una línea de tendencia comienza desde un punto determinado en el gráfico y termina en otro punto. Las líneas de tendencia son útiles para crear diferentes formas o patrones complejos.
Para dibujar una línea de tendencia, utilice el método DrawTrendLine().
1 2 3 4 5 6 7 | |
Rectángulo
Utilice el método DrawRectangle() para dibujar un rectángulo.
1 2 3 4 5 6 7 | |
Triángulo
Utilice el método DrawTriangle() para dibujar un triángulo.
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
Otros objetos del gráfico
Por razones de brevedad, no mencionamos varios otros objetos del gráfico en los fragmentos de código anteriores. Estos objetos incluyen, pero no se limitan a los siguientes:
- Elipse
- Icono
- Horquilla de Andrews
- Canal equidistante
- Expansión de Fibonacci
- Abanico de Fibonacci
- Retroceso de Fibonacci
Todos estos objetos se pueden dibujar utilizando métodos Draw...() con nombres similares que aceptan parámetros similares.
Riesgo-recompensa
La interfaz ChartRiskReward proporciona tipos que le permiten crear y gestionar objetos de riesgo-recompensa programáticamente en los gráficos.
El código a continuación le muestra cómo crear un indicador que dibuja un objeto de riesgo-recompensa:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | |

Configuraciones clave de objetos
Nombrar objetos del gráfico
Siempre que intente dibujar un objeto del gráfico, debe proporcionar su nombre como argumento para el método de dibujo.
Todos los nombres de objetos del gráfico deben ser únicos. Si no se cumple este requisito, se corre el riesgo de que los objetos del gráfico sobrescriban objetos del gráfico con los mismos nombres dependiendo de sus tiempos de ejecución. Puede utilizar el valor del índice de barra actual o el tiempo actual para generar nombres únicos para cada objeto.
Acceder a objetos del gráfico
Todos los objetos del gráfico están contenidos dentro de la colección Objects. Esta colección incluye objetos dibujados por el usuario. Como resultado, se puede acceder a la colección Objects para eliminar objetos de los gráficos o modificar sus propiedades.
El ejemplo a continuación accede a los miembros de la colección Objects:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | |
Eventos
Los objetos del gráfico tienen varios eventos que puede utilizar para saber qué objetos se dibujan, actualizan o eliminan:
ObjectsAdded- se activa cuando se añaden uno o más objetos del gráfico a un gráfico.ObjectsRemoved- se activa cuando se eliminan uno o más objetos del gráfico de un gráfico.ObjectsUpdated- se activa cuando se actualizan uno o más objetos del gráfico (una de sus propiedades es cambiada por el usuario o el indicador o cBot activo).ObjectsSelectionChanged- se activa cuando el usuario selecciona uno o más objetos del gráfico.ObjectHoverChanged- se activa cuando el cursor del ratón se desplaza sobre un objeto del gráfico.
El siguiente ejemplo utiliza los cinco tipos de eventos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | |
Objetos interactivos y no interactivos
Al trabajar con objetos interactivos, los usuarios pueden cambiar sus propiedades como la posición del objeto, el color, el comentario, etc. Todos los objetos dibujados por el usuario son interactivos por defecto.
Nota
La propiedad ChartStaticText no se puede cambiar independientemente de si su objeto relacionado es interactivo.
Para hacer que un objeto sea interactivo, establezca su propiedad IsInteractive en true como se muestra a continuación:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
Todos los objetos del gráfico tienen la propiedad IsInteractive. Su valor predeterminado es false.
Si un objeto del gráfico es interactivo, no se eliminará cuando se elimine o detenga una instancia de indicador o cBot. Por el contrario, los objetos no interactivos se eliminan automáticamente cuando un indicador o cBot deja de funcionar.
Para evitar el desorden, asegúrese de limpiar los objetos interactivos después de que se elimine su instancia relacionada utilizando los métodos Destroy del indicador o OnStop del cBot.
Si un objeto del gráfico no es interactivo, también será invisible en las listas y colecciones de objetos del gráfico.
Objetos bloqueados y desbloqueados
Bloquear un objeto del gráfico impide que el usuario lo modifique o actualice. Puede hacerlo a través del cuadro Trader (Propiedades del gráfico) o estableciendo la propiedad IsLocked en true. El valor predeterminado es false.
Puede utilizar el bloqueo para hacer que un objeto sea interactivo pero al mismo tiempo impedir que el usuario lo actualice. El siguiente ejemplo bloquea un objeto de línea vertical:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
Mostrar y ocultar
Puede dibujar un objeto en el gráfico y, posteriormente, ocultarlo. Aunque el objeto seguirá presente en el gráfico, será completamente invisible.
Para hacerlo, establezca la propiedad IsHidden en true.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
El uso de recursos es la consideración principal para utilizar esta función. Si hay un objeto que debe aparecer con frecuencia en el gráfico (pero no todo el tiempo), es mejor ocultarlo en lugar de eliminarlo y volver a dibujarlo cada vez que se necesite.
Selección de objetos e índice de apariencia (ZIndex)
Naturalmente, puede haber casos en los que varios objetos se intersecten entre sí en un gráfico, lo que dificulta o imposibilita la selección de un objeto específico. Solo el objeto que se dibujó en último lugar será seleccionable al pasar el cursor del ratón sobre un grupo de objetos del gráfico que se intersectan.
Para cambiar este comportamiento, puede utilizar la propiedad ZIndex. Puede ser útil cuando se intenta mostrar patrones complejos de objetos del gráfico.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | |
Una vez adjunto a un gráfico, el indicador anterior mostrará una línea vertical roja en lugar de una amarilla. Como el valor de la propiedad ZIndex de la primera línea es mayor que el valor correspondiente de la segunda línea, tiene prioridad sobre la segunda línea (amarilla).
En otras palabras, la propiedad ZIndex determina qué objetos del gráfico se muestran primero cuando se superponen. A todos los objetos del gráfico dibujados se les asigna automáticamente un valor determinado para la propiedad ZIndex.
Saber si un objeto ha sido eliminado
Todos los objetos del gráfico heredan la propiedad IsAlive de la clase base ChartObject. El valor de esta propiedad es true mientras un objeto esté presente en el gráfico (independientemente de si es visible o invisible). El valor se establece en false tan pronto como se elimina un objeto del gráfico.
Si guarda una referencia a un objeto del gráfico y el usuario elimina este objeto, puede comprobar la propiedad IsAlive para verificar si un objeto está vivo o muerto.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | |
Si ejecuta una instancia de este indicador, haga clic con el botón derecho en la línea roja y elimínela. El registro debería mostrar entonces el mensaje "Object reference removed".
Si mantiene una referencia a un objeto de gráfico (muerto), se producirá una fuga de memoria. Durante la recolección de basura, su objeto seguirá considerándose vivo, lo que significa que sobrevivirá al proceso de recolección.
Para evitar este problema, utilice el evento ObjectsRemoved en combinación con la propiedad IsAlive.
Índice de barra o tiempo
Al codificar objetos de gráfico, puede utilizar el tiempo del gráfico o el índice de barra para el eje X.
En nuestra opinión, el tiempo del gráfico es la mejor opción. Al utilizar índices de barra, no puede planificar valores futuros (porque los índices requeridos aún no existen) ni tener en cuenta los espacios entre barras. Sin embargo, los índices de barra pueden ser más fáciles de usar, especialmente en el caso de objetos de gráfico relativamente simples.
Todos los métodos Chart.Draw tienen diferentes sobrecargas para índices de barra y tiempo de gráfico.