Crear un indicador técnico en cTrader
Este artículo describe los pasos para crear indicadores técnicos personalizados, incluyendo herramientas para operaciones con algoritmos o acciones manuales en cTrader.
En la pestaña Indicadores de la aplicación Algo, haga clic en el botón Nuevo para abrir el asistente de creación de algoritmos.
Introduzca un nombre para su indicador, luego seleccione un lenguaje de programación entre C# y Python.
Elija un método de creación entre:
-
Desde cero – el nuevo indicador contendrá solo una plantilla básica.
-
Usando una plantilla – podrá seleccionar un algoritmo prediseñado de una lista de plantillas de Python# o C#, que cubren una amplia gama de tipos de indicadores, herramientas de análisis técnico y más.
Nota
Los algoritmos prediseñados ya contienen lógica para cálculos y parámetros personalizables. Estos indicadores están listos para mostrarse en los gráficos una vez que los guarde y compile.
Después de hacer clic en Crear, se abre el editor de código y puede comenzar a editar el código del indicador.
Editar el código
Dependiendo de su método de creación, la muestra de código del indicador debe contener uno o más de los siguientes elementos:
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 | |
El atributo Indicator, junto con sus propiedades opcionales como TimeZone y AccessRights, precede a la declaración de la clase del indicador (SimpleIndicator).
Estos métodos se incluyen en cada indicador por defecto:
- El método
Initialize()se invoca una vez cuando su indicador se inicia. Normalmente se utiliza para configurar variables, indicadores anidados y series que deben estar listas desde el principio. - El método
Calculate()se invoca automáticamente en cada barra histórica y en tiempo real en cada nuevo tic. Aquí es donde implementa la fórmula del indicador y define cómo se calculan y muestran los resultados.
El atributo [Output()] especifica los valores que produce su indicador y cómo aparecen en el gráfico. Puede personalizar el nombre y el estilo de cada salida, por ejemplo, estableciendo el color de su línea.
Los métodos Initialize() y Calculate() forman la base de cada indicador personalizado y nunca deben omitirse. Puede agregar sus propios métodos para ampliar la funcionalidad, al igual que lo haría al programar un cBot. Para aprender más sobre algoritmos, comience con la guía de conceptos básicos de C# y explore ejemplos de código de indicadores.
Nota
Referencias incluye todas las clases, eventos, métodos, variables, etc. para crear algoritmos en cTrader, mientras que los ejemplos completos de algoritmos y plantillas están disponibles en un repositorio de GitHub.
Aplique sus nuevos conocimientos para editar el código del indicador y adaptarlo a sus necesidades.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
La clase SimpleIndicator define un indicador personalizado en Python.
Estos métodos se incluyen en cada indicador por defecto:
- El método
initialize(self)se invoca una vez cuando su indicador se inicia. Normalmente se utiliza para inicializar variables, indicadores anidados y series que deben estar listas desde el principio. - El método
calculate(self, index)se invoca automáticamente en cada barra histórica y en tiempo real en cada nuevo tic. Aquí es donde implementa la fórmula del indicador y define cómo se calculan y muestran los resultados.
Los métodos initialize(self) y calculate(self, index) forman la base de cada indicador personalizado y nunca deben omitirse. También puede agregar sus propios métodos auxiliares dentro de la clase para ampliar la funcionalidad, al igual que lo haría al programar un cBot. Para aprender más sobre algoritmos, comience con conceptos básicos de Python y explore ejemplos de código de indicadores.
Aplique sus nuevos conocimientos para editar el código del indicador y adaptarlo a sus necesidades.
Guardar y compilar
Guarde su código haciendo clic en el botón Guardar en la parte superior del editor de código o utilice el atajo Ctrl+S.
Antes de poder usar su indicador, necesita validar su código compilando el proyecto del indicador. Haga clic en el botón Compilar en la parte superior del editor de código o pulse Ctrl+B.
Guarde su código haciendo clic en el icono Guardar en la parte superior del editor de código o utilice el atajo Cmd+S.
Antes de poder usar su indicador, necesita validar su código compilando el proyecto del indicador. Haga clic en el icono Compilar en la parte superior del editor de código o pulse Cmd+B.
Cuando la compilación tiene éxito, verá un mensaje de confirmación en Resultado de la compilación. Si la compilación falla, aparecerá en su lugar un resumen de todos los errores encontrados.
Si hay cambios en el código desde la última compilación, aparecerá un asterisco junto al icono Compilar. En este caso, debe compilar el indicador nuevamente antes de agregar una instancia del mismo a cualquier gráfico.
Para usar o mostrar el indicador en un gráfico, agregue una instancia del mismo, o puede continuar modificando el código del indicador como se explica en las secciones.
Usar aritmética NaN
Los indicadores realizan cálculos para generar visualizaciones específicas, y es esencial que su código maneje correctamente los casos extremos y las condiciones límite durante estos cálculos.
Considere el siguiente fragmento de un indicador que genera un oscilador de precio sin tendencia:
1 2 3 4 5 6 7 8 9 10 11 | |
El código anterior define reglas de cálculo generales pero omite las condiciones límite. Por ejemplo, si Periods se establece en 10 y index cae dentro del rango 0–9, el cálculo devolverá NaN (Not a Number). Este problema ocurre porque el indicador no puede calcular valores para un gráfico de barras con un índice negativo.
Para abordar el problema, puede agregar una condición como se muestra a continuación:
1 2 3 4 5 6 7 | |
El código para el promedio móvil simple también debe verificar que index >= Periods. Si utiliza un indicador anidado, como otro tipo de promedio móvil, la condición será diferente para tener en cuenta cálculos adicionales.
Aunque puede definir condiciones límite explícitas, C# ofrece una forma conveniente de evitar estos problemas mediante la aritmética NaN. Específicamente, el tipo de datos double admite completamente los cálculos NaN. Por ejemplo:
1 2 3 4 5 | |
Sin embargo, cuando cualquier operando en un cálculo es NaN, el resultado también será NaN. Como los indicadores personalizados de cTrader operan con el tipo DataSeries, si intenta acceder a un elemento DataSeries con un índice negativo, devolverá NaN, y el valor no se dibujará en el gráfico de operaciones. Este comportamiento permite que el indicador continúe operando sin lanzar excepciones. En la mayoría de los casos, puede ignorar de manera segura las condiciones límite y centrarse solo en la lógica de cálculo general.
Agregar comprobaciones explícitas
Aunque la aritmética NaN simplifica el manejo de condiciones límite, algunos casos aún requieren comprobaciones NaN explícitas. Los indicadores recursivos son un ejemplo común. Un indicador recursivo calcula su valor actual basándose en el valor calculado previamente.
Considere la siguiente implementación de un promedio móvil exponencial:
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
Cuando el indicador calcula el primer período, el valor inicial debe establecerse explícitamente en un tipo no NaN. De lo contrario, todos los cálculos posteriores devolverán NaN, haciendo que el indicador sea inútil.
En el código anterior, esto se maneja con el método double.IsNaN(previousValue). El operador == no se puede usar para esta comprobación (previousValue == double.NaN) porque cualquier comparación de NaN con otro valor, incluido él mismo, siempre se evalúa como false.
Cuando esté satisfecho con el código del indicador, compílelo, luego úselo agregando una instancia a un gráfico.
