Diferencias entre el Explorador y el Backtest

por | Ene 15, 2023 | Amibroker, Premium, Screeners, Sistemas | 4 Comentarios

Quizás alguna vez te ha pasado que las señales del explorador de Amibroker y del backtest no coinciden las posiciones compradas por el sistema dando lugar a equivocaciones.

De hecho, es algo que el propio Tomasz lo ha repetido una y otra vez, el explorador y backtest son cosas totalmente distintas y no tiene por qué aparecer lo mismo.

Es fácil de entender puesto que en el backtest puedes utilizar CBT (Custom Backtest Interface) y stops, cosa que en el explorador no.

Pero, en este artículo te explico qué hago yo para que me coincidan los sistemas sencillos sin mucha lógica y no cometer errores.

Y te enseño a filtrar solo las señales de primera generación.

Antes de nada, hay que dejar claro que el sistema es totalmente independiente al explorador (de ahí las posibles confusiones). Por lo tanto, puede cometer errores de ejecución en la operativa ya que el buscador te puede estar dando una señal que luego el sistema no va a comprar. Hay que evitarlo.

Esto es debido a que cuando programas el screener tienes que ingeniártelas (si fuera posible, por las limitaciones que te comentaba anteriormente) para que te muestre las posiciones que el sistema va a comprar.

Lo más fácil es verlo con un ejemplo y he escogido el sistema Inercia Alcista Semanal de Javier Alfayate que puedes encontrar en Quantonomics.

El sistema compra 12 acciones con una IA superior a 810 y las vende cuando es inferior a 420. En el caso de que haya más acciones que cumplan la condición de entrada, se quedará con las que tengan mayor IA.

En Amibroker, para que el sistema compre las acciones según el criterio escogido se hace con la función PositionScore. En el caso de IA Semanal es esta línea:

Desbloquea todos los contenidos con la Membresía Premium

Previamente, tienes que haber definido la variable InerciaAlcista.

Ahora en el backtest y de forma totalmente automática gracias al PositionScore el sistema escogerá siempre las que tengan una IA superior en caso de tener que escoger entre dos o más activos.

Vamos ahora al explorador.

Como te dije antes, el sistema es totalmente independiente del screener. ¿Por qué digo esto? Porque podemos sacar por explorador lo que queramos, es decir, podríamos mostrar aquellas acciones que tienen un RSI menor que 20 que no tiene nada que ver con el sistema de Javier.

Como queremos un screener útil para el sistema, podemos filtrar aquellas acciones que tienen una IA superior a 810. Sería tan fácil como añadir la siguiente línea.

Desbloquea todos los contenidos con la Membresía Premium

Si lo haces, verás que te salen todas las acciones que tienen una IA mayor a 810 pero no nos sirve para seleccionar las acciones que acaban de cruzar ese nivel.

Recuerda que el sistema exige que acaben de cruzar en la última vela, a diferencia de la versión mensual que no lo requiere.

Si visualizamos, por ejemplo, Beazley (la 7ª de listado) te darás cuenta que fue compra a mediados de agosto.

Así que en realidad, aunque te salga en el explorador no la deberías comprar. El sistema no li haría. Te doy dos soluciones para evitarlo. Las dos son válidas. Seguramente la segunda sea más bonita:

Desbloquea todos los contenidos con la Membresía Premium

De estas dos formas, en el explorador solo salen los valores que esta semana han cruzado al alza el nivel.

Ya hemos hecho un primer filtro muy útil.

En el explorador le tienes que indicar qué quieres que te muestre. En este sistema es interesante ver la IA que nos sale en la columna número 7.

Si quieres que en cada ejecución te salga ordenado por mayor IA y ahorrarte un par de clics cada vez que ejecutas puedes añadir esto:

Desbloquea todos los contenidos con la Membresía Premium

De esta forma, ya sale ordenado como nos interesa.

Seguramente ya sabes que el sistema IA Semanal es un sistema de paso que da la señal solo la primera vez que cruza el nivel de compra.

Si visualizamos ahora Aflac (la 6ª de listado anterior), veremos que no es la primera vez que cruza el nivel sin antes haber sido salida.

Hasta que no se da la señal de venta, el activo se queda en un estado no comprable.

Es decir, si un valor da señal de compra, pero no tienes huecos en cartera, posteriormente vuelve a dar señal de compra y ahora sí tienes huecos, el sistema no la va a incorporar. Solo la incorporaría si previamente ha dado señal de venta.

Por eso, es importante también diferenciar lo que llamaremos señales de primera generación. De lo contrario, en el explorador verás señales que el sistema no acaba materializando.

Recuerda que en programación todos los caminos conducen a Roma. Te explico cómo lo soluciono yo que no tiene por qué ser la única forma de hacerlo.

Antes de nada, hay que definir una variable que indica si el valor está comprado o vendido con la función Flip.

Si está comprado su valor será 1 y si está vendido 0. Yo me lo imagino como un interruptor. De esta manera, puedes saber en todo momento si el valor se encuentra en estado comprable o no, o lo que es lo mismo, si el sistema la tendrá en cuenta para comprarla.

Desbloquea todos los contenidos con la Membresía Premium

Solo nos queda añadir la condición al filtro

Desbloquea todos los contenidos con la Membresía Premium

Ahora sí. Todas las señales del explorador son las que el sistema compraría de forma ordenada en caso de tener huecos.

El sistema, en este caso tenía 3 huecos para esa fecha, por lo que debería comprar BAMI, BBVA y RBIV. Si lanzamos el backtest nos deberían salir esas tres posiciones en Open Long para el día en el que estoy escribiendo este artículo.

De esta manera es cómo filtro las acciones para los sistemas IA semanal y WA, entre otros.

Si lo haces de una manera diferente o te resultó interesante esta forma, escríbeme un comentario que siempre los leo.

Te lanzo la siguiente pregunta:

¿Sabrías añadir la condición de venta de primera generación al explorador?

La newsletter de MKTSignals

Si quieres estar al tanto de todas nuestras novedades, suscríbete a nuestra newsletter. ¡Es gratis!

¡Puntúa este artículo!

Total votos: 7. Promedio: 5

También te puede interesar:

¿Quieres acceder a todo el contenido Premium HOY?

+50 códigos de Amibroker

4 Comentarios

  1. Jose María

    Buenas tardes. Faltaría por definir correctamente la variable «buy» o «sell», no?

    // Si su valor es 0 significa que está en estado comprable. Si es 1 en estado no comprable
    InTrade = Flip (Buy, Sell);

    No veo en las lineas de código cómo definimos el estado comprable o no comprable, sino sólo cuando cruza la linea 810 por primera vez.
    No sé si se me escapa algo… Gracias y saludos!

    • Dani Contreras

      Hola Jose María,

      Sí, eso es cierto: faltarían definir las condiciones de buy y sell antes del Intrade.

      Básicamente es definir la condición Buy=Cross(InerciaAlcista,810) y la Sell=Cross(420,InerciaAlcista), con sus respectivos Exrem que es lo que hace que el sistema no compre una acción hasta que haya dado venta.

      Si necesitas algo, nos lo dices y te ayudamos 😉

  2. Javier Miralles Miralles

    Un artículo muy interesante. Enhorabuena!!

Enviar un comentario

Loading...