ABRIR UN SELECTOR:
En la ventana para abrir un selector además de seleccionar que selector abrir, también incluye unas opciones seleccionables en la parte superior:
Mostrar gráficos: los resultados del selector se muestran en una lista de gráficos.
Guardar resultado en una lista: el resultado se guarda en una lista, ya sea nueva o añadiéndolos al final de una existente.
CREAR Y EDITAR SELECTORES:
Crearemos o abriremos el archivo del selector con el editor manual. Ver Instrucciones de la ventana principal.
Un archivo de selector se compone por un código script encerrado entre las líneas: 0,--CODE y 0,--END CODE
Y luego, los mercados o listas en que el selector buscará:
Para incluir un mercado, el NYSE por ejemplo, una línea como la siguiente: 2,NYS
Para incluir un lista, pondremos 1 y su nombre, por ejemplo: 1,NYS
Algunos puntos básicos:
Comandos del selector
// Las dos barras permiten poner anotaciones de texto
* = multiplicar
/ = dividir
! = operando not
|| (alt grande+1) = or
&& =and: añadir una condición además de la anterior
> < = mayor menor que
if (X >1) {lo que se quiera } Ejecuta si cumple una condición.
Letras que definen el tipo de dato:
C=Cierre
A=Apertura
MX=Máximo
MN=Mínimo
V=Volumen
Se pone la letra adecuada para el dato que se quiera manejar y entre paréntesis el número de sesión: última =(0), hace un mes =(20), hace un año = (250), etc.
Funciones matemáticas:
Math.pow(x,y) calcula x elevado a y
Math.log(x) calcula el logaritmo natural de x
Math.abs(x) calcula el valor absoluto de x
Algunos ejemplos:
Empecemos por algo facilito y luego lo vamos complicando.
Vamos a buscar los valores que en el último año han subido más del 300% en el mercado NYSE.
0,--CODE
return (C(0) / C(250)) >3;
0,--END CODE
2,NYS
El siguiente ejemplo hace lo mismo que el anterior pero busca en una lista llamada SEGUIMIENTO.lig la cual se encuentra en el carpeta LISTAS:
0,--CODE
return (C(0) / C(250)) > 3;
0,--END CODE
1,SEGUIMIENTO.lig
Si la lista está en la carpeta USUARIO dentro de LISTAS, usaríamos:
1,USUARIO/SEGUIMIENTO.lig
También podemos poner una ruta completa a la lista (para quienes guarden sus listas en otros directorios).
Este otro ejemplo selecciona los “basuritos” que han bajado más del 95% en la última sesión.
0,--CODE
return (C(0) / C(1)) <0.05;
0,--END CODE
2,PNK
Este otro escoge valores que en el último día han dibujado una vela que entre la apertura y el cierre hay más de un 5% en dos mercados. Para que entren tanto las velas al alza como a la baja se pone el comando “or”.
Se puede ver que ponemos el nombre de la carpeta en ETCHART de dos mercados. Se pueden poner los que se quieran, los repasa todos. Lógicamente, si se ponen muchos valores, tarda más tiempo en sacar la lista.
0,--CODE
return (A(0) / C(0)) >1.05 || (C(0) / A(0)) >1.05;
0,--END CODE
2,NYS
2,QQQ
Ejemplo que escoge valores que en el último día han dibujado una vela que entre la apertura y el cierre hay más de un 10% en dos mercados. Además, tiene que cumplir otra condición: que el volumen de la última sesión sea mayor del triple del volumen de hace 20 sesiones.
0,--CODE
return (A(0) / C(0)) >1.1 || (C(0) / A(0)) >1.1 && (V(0) / V(20)) >3;
0,--END CODE
2,NYS
2,QQQ
Ahora un poco más complicado, para que veáis que el límite es vuestra imaginación.
Después de subir el 50% como mínimo en el último año (250 sesiones), busca una vela fuerte a la baja con un 5% entre apertura y cierre, producida en cualquiera de las últimas 5 sesiones. Además, calcula que el volumen del día sea mayor del 300% de la media del volumen de los últimos 10 días.
Para que no se ralentice la búsqueda, utiliza el comando “IF”, que sólo calcula la media del volumen en el caso que haya pasado el filtro anterior.
0,--CODE
function calcular(sesAtr) {
resultadoParcial = (C(1+sesAtr) / C(250+sesAtr)) > 1.5 && (A(0+sesAtr) / C(0+sesAtr) >= 1.05);
// Lo siguiente calcula la media del volumen sólo en el caso que haya pasado el filtro anterior. Esto se hace para que no se ralentice la búsqueda.
if (resultadoParcial) {
var mediaVolumen = 0;
for (i = 0; i < 10; ++i) {
mediaVolumen = mediaVolumen + V(i+sesAtr);
}
mediaVolumen = mediaVolumen / 10;
return resultadoParcial && (V(0+sesAtr) > mediaVolumen*3);
} else {
return false;
}
}
// llama a la función 'calcular' con 0, 1, 2, 3, 4 y 5 sesiones atrasadas
for (sesionesAtrasar = 0; sesionesAtrasar < 5; ++sesionesAtrasar) {
if(calcular(sesionesAtrasar)) {
return true;
}
}
return false;
0,--END CODE
2,NYS
2,QQQ
Tal como vemos en estos ejemplos el lenguaje es calcado a JavaSript, si se tienen nociones básicas de este lenguaje (estructuras de control, variables, operadores, funciones y objetos del lenguaje) se puede manejar los selectores a la perfección. En internet hay muchos tutoriales gratuitos de JavaScript.
Hay que tener en cuenta, tal como se ve en los ejemplos, que siempre se tiene que ejecutar return devolviendo un valor booleano.
Uso avanzado:
Para probar el correcto funcionamiento de un selector, se pueden mostrar mensajes debug mediante la función print(); Lo que se ponga entre paréntesis, sea el valor de una variable, un texto entre comillas, etc, se mostrará en una ventana que se abrirá automáticamente. Además, hay definidas las constantes NUM_GRAFICO y DESCRIPCION, cuyo valor es, respectivamente, el número de gráfico que se está procesando y su descripción o nombre largo. Con "abortar_selector();", podemos parar de inmediato el selector. Ejemplo:
if (NUM_GRAFICO == 12) {
print(DESCRIPCION + ": " + varableEjemplo);
abortar_selector();
}