Una fórmula es una expresión matemática definida por usted. Las fórmulas se usan para definir indicadores, sistemas de test, y exploraciones.
Además de los indicadores predefinidos listados en el Indicator QuickList, Metastock proporciona una robusta colección de herramientas que usted puede usar para crear sus propios indicadores. Este capítulo explica cómo crear y representar estos «indicadores de diseño».
Usted puede crear hasta 1.000 diferentes indicadores. Los indicadores se almacenan automáticamente por Metastock de forma que usted no tiene que reescribirlos cada vez que quiera representar en la pantalla la fórmula.
Las fórmulas creadas en el menú Indicator Builder y las fórmulas empleadas para calcular los indicadores que vienen en el paquete de software son completamente independientes unas de otras. Los cambios que se hagan a un indicador de nuevo diseño no afectarán a los indicadores predefinidos.
Comenzando
– Con un chart sobre la pantalla, elija Indicator Builder desde el menú Tools. Aparecerá el diálogo del Indicator Builder (los indicadores de diseño que aparecen en su lista serán diferentes de aquellos que se muestran más abajo).
– Haga click en el botón New. Teclee el nombre de la fórmula como «Tutorial».
– Haga click en la caja Dispaly in QuickList para que el indicador de diseño aparezca en el Indicator QuickList sobre la barra de herramientas estándar.
– Haga click en la caja de edición de fórmulas y ya puede comenzar a escribir una fórmula.
Identificadores de Precio
Los identificadores de precio especifican campos de precio. Los identificadores de precio son apertura, máximo, mínimo, cierre, volumen, open interest e indicador.
– Por ejemplo, teclee la palabra «HIGH» -sin comillas- y haga click en el botón OK. Esto crea una fórmula que representará en pantalla los precios máximos diarios.
Los identificadores de precio pueden abreviarse como se muestra en la tabla siguiente. Este tutorial usa tanto el nombre largo como las abreviaturas, según lo permita el espacio disponible.
Nombre largo |
Abreviatura |
Open (apertura) |
O |
High (máximo) |
H |
Low (mínimo) |
L |
Close (cierre) |
C |
Volume (volumen) |
V |
Interest (open interest) |
OI |
Indicator (indicador) |
P |
Representación en pantalla de un indicador de diseño propio
– Haga click en el Indicator QuickList para que se vean los indicadores estándar y los indicadores de nuevo diseño.
– Pulse y arrastre el indicador llamado «Tutorial» desde la QuickList hasta la cabecera de un chart. Se abrirá una nueva ventana interior y se representará en la misma el precio máximo del valor.
Pueden distinguirse los indicadores de nuevo diseño de los otros que vienen predefinidos en la QuickList por un icono que aparece a la izquierda del nombre del indicador de nuevo diseño.
– Ahora elija Indicator Builder desde el menú Tools o haga click en el botón del Indicator Builder sobre la barra de tareas estandar.
Operadores matemáticos.
Las fórmulas pueden contener los siguientes operadores matemáticos. También pueden contener operadores avanzados tales como la raiz cuadrada, pero se explicarán luego.
+ | Suma |
– | Resta |
* | Multiplicación |
/ | División |
– Ilumine (marcandola con el puntero del ratón) la fórmula llamada «Tutorial» y elija Edit. Borre la fórmula existente («HIGH») en la caja de edición de las fórmulas y teclee en su lugar la fórmula que se muestra más abajo.
( H + L ) / 2
Esta fórmula suma los precios máximos y mínimos del día y luego los divide por dos. El indicador mostrado en la pantalla se actualizará automáticamente para reflejar el cambio de fórmula cuando abandone el Indicator Builder.
Prioridad de los operadores
El paréntesis se empleó en la fórmula precedente para controlar la prioridad (orden de la operación). Metastock siempre calcula primero las operaciones que se hallan dentro del paréntesis más próximo.
Cuando no se usan paréntesis, la prioridad es la siguiente
– | Valores negativos |
* | Multiplicación |
/ | División |
+ | Suma |
– | Resta |
< | Menor que |
> | Mayor que |
<= | Menor que o igual a |
>= | Mayor que o igual a |
= | Igual a |
<> | Distinto a |
And | «Y» lógico |
Or | «O» lógico |
La expresión «H+L/2» (sin paréntesis) se habría calculado por Metastock como «L/2» más «H», ya que las divisiones tienen prioridad superior. Esto habría supuesto un resultado bastante diferente a «(H+L)/2».
Por facilitar la lectura, recomendamos emplear los paréntesis para controlar la prioridad.
«Functions»
Además de los cuatro operadores matemáticos, Metastock contiene cerca de 190 «functions» que realizand operaciones matemáticas.
Por ejemplo, la función «sqrt()» calcula la raíz cuadrada de un número.
– Teclee la siguiente fórmula: sqrt( CLOSE )
Esta fórmula representa en pantalla la raíz cuadrada de los precios de cierre.
Como ya se habrá dado cuenta, esta sintaxis es extremadamente similar a la que se emplea para introducir fórmulas en las hojas de cálculo.
Todas las funciones deben ser seguidas por un par de paréntesis. Si un paréntesis de apertura no es el primer carácter después del nombre de la función, aparecerá un mensaje de error.
Parámetros de la Function
La función sqrt() requiere un parámetro simple dentro del paréntesis («CLOSE» en el anterior ejemplo). Otras funciones, tales como el macd(), no requieren ningún parámetro.
La siguiente fórmula suma las «raíces cuadradas» de los precios máximos al indicador MACD: sqrt( HIGH ) + macd()
Algunas funciones requieren múltiples parámetros dentro del paréntesis. Por ejemplo, la función Price Oscillator requiere cuatro parámetros:
oscp( 10, 20, EXPONENTIAL, % )
En la fórmula de arriba, los parámteros le dicen a Metastock que calcule el Price Oscillator exponencial 10-20 empleando el método porcentual de cálculo.
Si usted se olvida de introducir el parámetro adecuado, Metastock mostrará una ventana recordándole que espera un parámetro.
Localizar errores en las fórmulas
Metastock hace un excelente trabajo recordando los errores de las fórmulas. De hecho, es imposible introducir una fórmula no válida. Esto no significa que sus fórmulas siempre funcionarán como usted espera que lo hagan, porque Metastock no sabe lo que usted está tratando de crear o conseguir. Sin embargo, significa que la sintaxis de la fórmula siempre será válida. Cuando introduce una fórmula, Metastock testea la sintaxis de la misma. Si halla algún error, la fórmula volverá a verse en la pantalla, el cursor será posicionado en el punto donde se localiza el error, y aparecerá un mensaje explicativo acerca del error cometido. Esto se ilustra en el siguiente ejemplo.
Supongamos que usted quiere representar una fórmula que contenga una media móvil exponencial de 10 períodos del precio de cierre. Todo lo que recuerda es que la función de la media móvil se llama «mov».
– Introduzca lo que sepa: mov y haga click en el botón OK.
El cursor se posicionará detrás del nombre de la función («mov») y le presentará el siguiente mensaje:
«A ‘(‘ must immediately follow a function name», que significa que debe poner un paréntesis detrás del nombre de la función..
– Ahora añada un paréntesis de apertura. mov( y haga click en OK.
En este momento, el cursor estará posicionado después de «(» y se mostrará el mensaje:
«Price array or function expected», que significa que le falta el precio o una función detrás del parentesis.
– Introduzca el identificador de precio «CLOSE» mov(CLOSE y haga click en OK.
Si continúa este proceso Metastock le seguirá pidiendo datos hasta que la sintaxis de la fórmula sea la correcta, es decir:
mov(CLOSE,10,EXPONENTIAL)
Introducir Functions
La sección precedente explicaba como le ayuda Metastcok a corregir los errores sintácticos dentro de las fórmulas. Esta sección le explica cómo puede ayudarle Metastock a recordar (e introducir) las 190 funciones.
Haciendo click en el botón Functions mientras se edita una fórmula veremos el diálogo Paste Functions. Este diálogo lista las categorías de funciones disponibles a mano izquierda y los nombres de las funciones de cada categoría a mano derecha.
Haciendo click en OK cuando se muestra el diálogo Paste Functions insertaremos dentro de la fórmula (en el lugar en que se encuentre el cursor) la función que actualmente aparece iluminada. La función también puede insertarse con una descripción de los argumentos requeridos (si son necesarios) marcando la caja Paste Arguments.
Escribir comentarios
Pueden introducirse comentarios en una fórmula rodeándolos con «{» y «}». La siguiente fórmula contiene dos comentarios:
macd() {the MACD times} * ((H+L+C) / 3) {the average price}
Cuando se emplean adecuadamente, los comentarios hacen mucho más fácil la comprensión de fórmulas complejas. Los comentarios dentro de comentarios causan un mensaje de error.
Anidar Functions
Los ejemplos precedentes empleaban identificadores de precio como parámetros de datos. También pueden usarse otras funciones como parámetros de datos tal como muestran los tres siguientes ejemplos:
stdev( stoch(5,3), 10 )
mov( rsi(15), 10, SIMPLE)
mov( mov( rsi(15), 20, W), 10, SIMPLE)
El primer ejemplo calcula el oscilador estocástico y luego calcula la desviación estándar de 10 períodos del oscilador estocástico.
El segundo ejemplo calcula una media móvil simple de 10 períodos del RSI de 15 períodos.
El tercer ejemplo calcula una media móvil ponderada de 20 periodos del RSI de 15 períodos y luego calcula una media móvil simple de 10 períodos de esta media móvil.
Esta técnica (colocar funciones dentro de funciones) la llamaremos «anidar funciones»
La función if()
La función if() se emplea para crear proposiciones condicionadas (es decir, «si-entonces»). Contiene tres parámetros como se muestra en el siguiente ejemplo:
La siguiente fórmula dibuja «volumen positivo» si el cierre es mayor que el precio medio. En otro caso, dibuja «volumen negativo».
if( CLOSE > (HIGH+LOW)/2, +V, -V )
Empleo de los operadores «and» y «or»
Si una fórmula requiere múltiples condiciones, pueden combinarse estas condiciones con los operadores «and» y «or». Por ejemplo, quizás le gustaría representar en la pantalla +1 cuando el MACD es mayor que cero y el RSI es mayor de 70. La fórmula se escribiría como sigue:
If( macd() > 0 AND rsi(14) > 70, +1, 0 )
Puede añadir tantas condiciones como le permita el espacio dentro de una fórmula. Por ejemplo:
If(macd() > 0 AND rsi(14) > 70 AND CCI(14) > 100 AND close > mov(close,10,e), +1, 0)
Puede hasta combinar los operadores AND y OR dentro de la misma fórmula:
If((macd() > 0 OR close > mov(close,10,e)) AND rsi(14) > 70, +1, 0)
La fórmula de arriba dice que se represente un «+1» si el MACD es mayor que cero o el precio de cierre está por encima de la media móvil, y el RSI es mayor de 70.
Note que los paréntesis se colocaron alrededor de la condición OR porque la prioridad especifica que la condición AND se evalúa primero. Si los paréntesis no se huebieran colocado alrededor de la condición OR, la media móvil y el RSI habrían sido agrupados juntos con la condición AND, lo cual no es lo que buscamos calcular con la fórmula.
Referencias a otros indicadores de diseño propio
Los indicadore que diseñemos pueden contener referencias a otros indicadores diseñados por nosotros mismos, para ello empleamos la función fml(). Por ejemplo, la función «fml( «My MACD»)» es el valor de la fórmula que contiene el texto «My MACD» como nombre. No se requiere el nombre completo, solamente la cantidad de texto suficiente que consiga diferenciarlas.
La siguiente fórmula representa en pantalla el valor de la fórmula llamada «Down Day» si el precio de cierre es menor o igual a la media móvil exponencial de 10 períodos de los precios de cierre. En otro caso, se representa el valor de la fórmula llamada «Up Day.»
if( close <= mov(close, 10, E), fml(«Down Day»), fml(«Up Day») )
A esta técnica nos referiremos como «anidado de fórmulas».
El empleo de fórmulas anidadas es una manera excelente de simplificar fórmulas largas o complejas.
Una fórmula anidada puede hacer referencia a una fórmula anidada que hace referencia a una fórmula anidada y así consecutivamente.
Las referencias circulares (una fórmula llama a otra fórmula que llama a la primera) causarán un mensaje de error cuando se represente dicha fórmula.
Autoreferencia de fórmulas empleando PREV
La constante PREV le permite crear fórmulas autoreferenciadas. Una fórmula autoreferenciada es aquella que es capaz de referenciarse a sus propios valores de un periodo «previo».
Por ejemplo, la siguiente fórmula es un ejemplo de fórmula autoreferenciada:
((H+L+C)/3) + PREV
Esta simple fórmula divide el máximo, mínimo y cierre por 3 y luego suma este valor al valor que tuvo ayer el indicador.
El cálculo del popular indicador On Balance Volume ilustra el empleo de la función PREV:
(if(c>ref(c,-1),1,-1)*volume)+PREV
Aunque el OBV puede ser calculado sin el empleo de la función PREV, el calculo de una media móvil exponencial no puede hacerse sin ella (a no ser que se emplee la función mov()). La siguiente fórmula muestra como una media móvil exponencia del 18% (aproximadamente 10 periodos) se calcula empleando la función PREV.
(close*0.18)+(PREV*0.82)
Dese cuenta de que si pone la constante PREV en una función (por ejemplo, mov(PREV,20,s) ), dicha función funcionará pero seguro que le induce a confusión.
El identificador «P»
Un identificador de precio especial (la variable «P» se emplea para referenciar cualquier línea o traza de un indicador o precio. Con los indicadores de diseño propio, la variable «P» representa la línea sobre la que se pega el indicador. Con los system tests y las exploraciones, la variable «P» representa la línea seleccionada. Esto puede ser útil si se quiere que un indicador, una exploración, un system test, o un expert calcule tomando como referencia una línea del gráfico y no el valor base del chart.
Si se aplica (arrastrandolo) un indicador de diseño propio que contenga la variable «P» sobre las barras de precios high/low/close, el precio de cierre (close) será el que se use por la variable «P». Por ejemplo, la siguiente fórmula dibuja un indicador «MACD-type» (es decir, la diferencia entre las medias móviles exponenciales de 12 y 26 periodos) de la línea del gráfico sobre la que se sitúe.
mov( P, 12, E) – mov( P, 26, E)
Si quiere representar el indicador predefinido Accumulation/Distribution y luego dibujar el anterior indicador citado sobre él desde la QuickList, el resultado será el MACD del indicador Accumulation/Distribution.
Naturalmente, podría escribirse la formula precedente sin emplear el identificador «P» como se muestra más abajo, pero tendría que modificarla si quisiera obtener el MACD de otro indicador diferente del Accumulation/Distribution. Mediante el empleo del identificador «P» la fórmula es más versátil.
mov( ad(), 12, E) – mov( ad(), 26, E)
En un indicador de diseño propio, los valores para HIGH, LOW, CLOSE, VOLUME, OPEN y OPEN INTEREST siempre se toman del valor base del chart. Por ejemplo, si arrastra el indicador «HIGH – LOW / P» sobre una línea de precio que no está en el chart del valor base, los valores HIGH y LOW seguirán tomándose del valor base. El valor «P» representará el precio de cierre (close) del valor sobre el que arrastro.
Para dibujar un indicador de diseño propio con la variable «P»:
– Escriba un indicador empleando la variable «P» en lugar del identificador de datos (por ejemplo, mov(p,10,e), sum(p,25), stdev(p,12), etc.).
– Arrastre el indicador desde la QuickList y suéltelo sobre la línea que quiere que haga la función de la variable «P» en la fórmula.
Para hacer funcionar un system test o una exploración que contenga la variable «P»:
– Escriba un system test o una exploración empleando la variable «P» en lugar del identificador de datos (por ejemplo, mov(p,10,e), sum(p,25), stdev(p,12), etc.).
– Seleccione la línea (indicador o precio) que va a usar como variable «P» haciendo click directamente en el gráfico. Se ve que se ha seleccionado porque aparecen pequeños cuadraditos sobre la línea.
– Haga funcionar el system test o la exploración.