Change%El ejemplo de un oscilador mostrando cambios porcentuales en los precios en relación con la sesión anterior
var close = Close(); var chng = CreateArray(close.length); for(var i = 0;i < close.length; i++) chng[i] = (close[i] - close[i-1]) / close[i-1] * 100; AddGraph(chng, 1); AddHorizLine(0);
|
... uno después de otro...
La expresión var ponemos ante cada variable definida, lo que garantiza que no será el tipo de variable global, que no interfiera con las definiciones de otros osciladores.
close es el nombre de nuestra variable, a la cual vamos a asignar las placas con valores del cierre de las cotizaciones (Close()).
El punto y la coma al final del renglón marcan el final de líneas de código.
var chng = CreateArray(close.length);
|
A la variable chng asignaremos usando la función CreateArray el tipo ,,placa" (array) y determinaremos el número de sus elementos. Este número obtendremos de la longitud (length) de la placa close que hemos definido anteriormente. Toda la expresión close.length devolverá pues el número de los elementos de la placa close.
for(var i=0; i < close.length; i++) chng[i] = (close[i] - close[i-1]) / close[i-1] * 100;
|
for es el bucle que se llevará acabo tantas veces, hasta que se cumpla la condición "i < close.length". Al comienzo del bucle, a la variable i asignamos el valor 0. Junto con cada salto del bucle, la variable se incrementará (agrandará) a uno (la expresión "i++" es idéntica con el registro "i+=1").
Cada transición del bucle lleva acabo los comandos descritos por la fórmula"chng[i] = (close[i] - close[i-1]) / close[i-1] * 100", es decir los de la antes ya creada variable chng del tipo array,junto con el índice siguiente i, se asignará la resulta del cuociente de la diferencia del valor actual close (close[i]) y del valor anterior close (close[i-1]) así como del producto del valor anterior close (close[i-1]) y del número 100.
Toda la operación devolverá los valores de la placa chng correspondientes a los diarios cambios porcentuales en los precios.
Tiempo para dibujar una línea de los elementos de la placa chng utilizando la función predefinida AddGraph. El valor 1 presentado como el segundo argumento de la función significa que comenzaremos a dibujar a partir del segundo elemento.
Al final dibujaremos una línea horizontal a la altura de 0 puntos utilizando la función predefinida AddHorizLine.
Rate of Change
var close = Close(); var roc = CreateArray(close.length); var n = Param(1); for(var i = 0; i < close.length; i++) roc[i] = (close[i] - close[i-n]) / close[i-n] * 100; AddGraph(roc, n); AddHorizLine(0); AddHorizLine(10); AddHorizLine(-10);
|
El ejemplo anterior es una modificación del oscilador Change% antes ya descrito. Aquí, usando el primer campo del parámetro,...
...podemos en la entrada de la función determinar el número de sesiones que se tomarán en cuenta a la hora de calcular un cambio porcentual en los precios (utilizando los campos de parámetros, no olvide introducir un valor predeterminado para el campo conveniente en la parte superior derecha de la ventana de edición de los osciladores).
Además han sido agregadas dos líneas horizontales a la altura de 10 y -10 puntos.
AddHorizLine(10); AddHorizLine(-10);
|
MACD
var close = Close(); var avg1 = ExpAvg(close, Param(1)); var avg2 = ExpAvg(close, Param(2)); var macd = CreateArray(avg1.length); for(var i = 0; i < avg1.length; i++) macd[i] = avg1[i] - avg2[i]; AddGraph(macd, Param(2)); var signal = ExpAvg(macd, Param(3)); AddGraph(signal, Param(2) + Param(3)); AddHorizLine(0);
|
La función antedicha construye el indicador MACD, a que es necesario el uso de las medias exponenciales.
var avg1 = ExpAvg(close, Param(1)); var avg2 = ExpAvg(close, Param(2));
|
La función ExpAvg crea una placa con los valores de la media exponencial de las cotizaciones close para un período correspondiente a los valores de los campos Param(1) e Param(2).
var signal = ExpAvg(macd, Param(3));
|
A su vez, a la variable signal asignaremos una placa con los valores de la media exponencial de la conducta macd (calculada dos renglones anteriormente) para el período correspondiente al valor del campo Param(3).
MACD con las señales de compra/venta
var close = Close(); var avg1 = ExpAvg(close, Param(1)); var avg2 = ExpAvg(close, Param(2)); var macd = CreateArray(avg1.length); for(var i = 0; i < avg1.length; i++) macd[i] = avg1[i] - avg2[i]; AddGraph(macd, Param(2)); var signal = ExpAvg(macd, Param(3)); AddGraph(signal, Param(2) + Param(3)); AddHorizLine(0); for(var i = Param(2) + Param(3); i < macd.length; i++) { if((macd[i-1] < signal[i-1]) && (macd[i] > signal[i])) AddBuySignal(i); else if((macd[i-1] > signal[i-1]) && (macd[i] < signal[i])) AddSellSignal(i); }
|
En el ejemplo anterior se añadió una secuencia, en la cual el bucle for ...
for(var i = Param(2) + Param(3); i < macd.length; i++) { ... }
|
... verifica la posición de la línea macd y de su media, es decir de la línea signal, en relación de una a otra.
if((macd[i-1] < signal[i-1]) && (macd[i] > signal[i])) AddBuySignal(i); else if((macd[i-1] > signal[i-1]) && (macd[i] < signal[i])) AddSellSignal(i);
|
Si el valor anterior macd (macd[i-1]) es menor que el valor anterior signal (signal[i-1]) y el valor actual macd (macd[i]) es mayor que el valor actual signal (signal[i]), por la función AddBuySignal se genera la señal de compra y es puesta en la conducta de la placa macd en el lugar, donde el índice i cumple las condiciones antedichas.
Es análogo con la señal de venta AddSellSignal, pero ciertamente para las condiciones inversas.