Fundamentos de Creación de Indicadores del Usuario


Introducción

El presente artículo ha sido escrito con el fin de explicar e ilustrar los principios de la creación de indicadores del usuario y examinar las dificultades que los programadores puedan tener al dar sus primeros pasos en el desarrollo de NTL + (la lengua NetTradeX).


En la elaboración del algoritmo de un indicador del usuario, Ud. tendrá que determinar cómo se calculan y se muestran en la pantalla los valores que se escriben en el búfer del indicador. La correcta formación de estos valores es el objetivo final de aplicación de los indicadores.


Como ejemplo, vamos a crear un indicador que muestra la diferencia entre el número de barras, con el precio de cierre más alto que el precio de apertura y el número de barras, con el precio de cierre más alto que el precio de apertura, para los últimos intervalos. Vamos a mostrar nuestro indicador como un histograma en una ventana separada.


Escritura del Código Script

El algoritmo que vamos a usar es simple y lo suficientemente intuitivo para comprobar fácilmente el funcionamiento del indicador grafico. Analizaremos las barras anteriores n para cada i-bar y la forma de estadística, donde estaremos sumando 1 al valor resultante, si la barra se levanta y restando 1 en caso de que caiga el bar.

Examinemos el código del indicador:


En primer lugar, hay que declarar todas las variables que se utilizan en nuestro indicador.

#set_indicator_separate double ExtMapBuffer1[]; int ExtCountedBars=0; extern int period = 10;

El #set_indicator_separate es una directiva de preprocesador que indica que el grafico se mostrará en una ventana sin solaparse con los principales gráficos de precios. La siguiente línea declara la colección global ExtMapBuffer1 donde se almacenarían los valores de tampón indicadores. Cabe señalar que no se especifica el tamaño de la matriz, ya que el propio compilador asignará la cantidad de memoria necesaria. El ExtMapBuffer1 realmente almacena las ordenadas de los puntos incluidos en la tabla, con sus abscisas que se definen por el índice de los elementos de la matriz. Luego inicializamos el valor de la variable ExtCountedBars a 0, sino que almacenará el número de barras ya calculadas. Por lo tanto no habrá necesidad de realizar cálculos de rutina para todas las barras, lo que acelera en gran medida del cálculo de los valores de los indicadores, así como el movimiento de la tabla del indicador. La siguiente línea declara el período variable global que almacena el número de intervalos, en el que el indicador calcula sus estadísticas. Tenga en cuenta que el uso de modificador externo nos permite cambiar el parámetro de tiempo por medio de las propiedades del indicador sin necesidad de recopilación.


Consideremos la función Initialize(), en la que se especificará la configuración básica de nuestro indicador.


El método SetIndexCount del objeto indicador, establece la cantidad de buffers para los valores de los indicadores. Tenemos un tampón con los valores ExtMapBuffer1 values, por lo que especificar 'uno' como el único parámetro. También tendremos que vincular el número de búfer en una matriz con los valores de búfer. Este enlace se define en la línea del Indicator.SetIndexBuffer(0,ExtMapBuffer1), en la que se especifica que las propiedades del indicador de cero se utilizan para representar los valores almacenados en la memoria intermedia de búfer ExtMapBuffer1. En la línea siguiente, hemos puesto las propiedades para nuestro indicador. El primer parámetro del método SetIndexStyle es el numero del búfer, lo que representa el valor "0" que especificamos en el SetIndexBuffer. El segundo parámetro define el tipo de dibujo- un histograma. En el tercer parámetro, se especifica el estilo lsSolid (en realidad, aquí se puede especificar cualquier valor, ya que el valor de este parámetro solo afecta a los gráficos de líneas y un bar con espesor 1). En los siguientes parámetros, establecemos un espesor 5 de la línea y el color azul con el correspondiente clrBlue constante(también podemos especificar el color en formato RGB, por ejemplo, 0x0000FF).


Luego viene la función Run() realiza comprobaciones básicas y ejecuta la función draw() de usuario, que desarrolla todo el cálculo..