¡Visita la nueva web!

martes, 10 de noviembre de 2009

Sistemas de trading. Episodio I: Diseño



Un sistema de trading es un conjunto de reglas claras que explicitan cuándo entrar en el mercado, con qué tamaño de posición, con qué stop de seguridad, en qué mercado y cuándo y cómo cerrar la posición.

Por ejemplo, un sistema de trading sencillo podría ser el siguiente:

Compraremos 300 acciones del Banco Santander cuando la media móvil de 30 periodos cruce a la de 50 periodos de abajo a arriba. Pondremos un stop loss justo por debajo de la media móvil de 50 periodos. Si el precio se mueve a favor, una vez alcanzado un avance del 10% se deshará la mitad de la posición y se continuará con el resto hasta que la media móvil rápida cruce a la lenta de arriba a abajo.

Últimamente, la sección "I+D+I" de Novatos Trading club se ha estado centrando en el desarrollo de sistemas de trading a través del backtesting.

El backtesting ("probar hacia a atrás") consiste en, dado un sistema de trading, probarlo en datos históricos y calcular qué beneficios o pérdidas se habrían alcanzado en un determinado periodo del pasado.

Hoy vamos a explicar cómo podemos utilizar el backtesting y ProRealTime para preparar un sistema de trading y depurarlo hasta conseguir un sistema ganador que podamos aplicar en el presente.

ProRealTime es un software de gráficos sencillo de utilizar y, a la vez, muy potente. Es el que empleamos habitualmente en Novatos Trading club para presentar nuestras operaciones. Este programa, que es completamente gratis para gráficos que no sean intradía en tiempo real, tiene un módulo llamado ProBacktest que facilita mucho la labor del backtesting.

Para conseguir un sistema que pueda dar pingües beneficios en el futuro, el primer paso es que los pudiera haber dado en el pasado. Esto no es garantía de nada, pero es un inmejorable punto de partida.

Empezaremos por inventarnos un sistema de trading. Lo mejor es que sea sencillito de todo. Una o dos reglas muy básicas, y luego, añadir detalles para refinar su comportamiento en los momentos en los que peor funcione.

Lo primero es decidir en qué marco vamos a operar. Podemos decantarnos por sólo posiciones largas en valores españoles operando con gráficos diarios. Podemos pensar en posiciones largas o cortas en futuros sobre materias primas en mercados americanos intradía. Podemos pensar en sólo posiciones cortas en CFD's sobre índices mundiales en plazos de semanas, etc.

Hay que definir qué mercado, qué marco temporal y qué tipo de posiciones abriremos.

Para nuestro ejemplo vamos a centrarnos sólo en posiciones largas, en valores de la bolsa española que formen parte del IBEX35 (Santander, Telefónica, Repsol, Técnicas reunidas, etc.). Nos moveremos con gráficos diarios.

Lo segundo que hay que establecer es cuál va a ser nuestra referencia para entrar y cuál para salir del mercado.

Nuestra idea es la de comprar primero para vender después a un precio mayor. Intentaremos cazar tendencias alcistas de varios días por lo que nos fijaremos en el precio y en algún indicador seguidor de tendencias para poder aguantar sobre ellas. Además, para las entradas atenderemos a las señales de algún oscilador.

Concretando, pondremos una media móvil simple para seguir las tendencias del precio y utilizaremos al RSI para capturar buenos puntos de entrada.

Cogeremos como valor de partida a Telefónica para nuestras pruebas. Tiene la ventaja de ser el valor más líquido del mercado español.

Así pues, nuestro sistema de trading de ejemplo queda como sigue:

Abriremos nuestra posición de 2000€ en Telefónica cuando el precio esté por encima de su media móvil simple de 50 periodos. Además el RSI de 5 periodos deberá estar en zona de sobreventa (menor de 30%).

No cerraremos la posición hasta que el precio cruce de arriba a abajo su media móvil de 50 periodos.

Por seguridad, mantendremos un stop loss que iremos actualizando cada pocos días por debajo de la media móvil de 50 periodos. Este stop nunca debería dispararse, puesto que la condición de salida está justo por encima.

La idea es programar esto en ProRealTime. Cuando lo tengamos, él nos dirá cuándo entrar y cuándo salir atendiendo a nuestras condiciones.

Se supone que cuando el ordenador nos recuerde que tenemos que entrar o salir del mercado, nosotros daremos a nuestro broker la orden correspondiente. Esto no quita que un día nos olvidemos de atender a la bolsa y haya un colapso en los precios. Nos alegraremos de tener una orden de stop de seguridad en el mercado que nos sacará de la posición sin nuestra intervención.

Para implementar nuestro sistema en ProRealTime, lo primero es crear un gráfico de Telefónica con su media móvil de 50 periodos y añadir un indicador RSI de 5 periodos. Esto nos facilitará mucho la programación y el seguimiento del backtesting.

Añadiremos un nuevo ProBacktest, que nombraremos como queramos.


Programaremos con el asistente o tecleando el código si lo conocemos (es muy sencillito y se aprende muy fácilmente).

Una vez definido el sistema tenemos que establecer las condiciones de la prueba. Pinchando en "Gestión del capital", fijamos el capital de partida en 2000€ y le ponemos un precio fijo de comisiones de 10€ por compra o venta.


También hay que especificar entre qué fechas queremos hacer el ensayo.

Para empezar, decidimos probar nuestro sistema sobre los últimos diez años de Telefónica. Esto es, desde el 1 de enero de 1999 hasta la fecha actual.

Ejecutamos el test ("Validar programa") y comprobamos nuestros resultados. Con este sistema, desde enero del 99, habríamos ganado 3664€.

El programa presenta un informe detallado de cómo nos habría ido, resaltando datos claves como cuál habría sido nuestra máxima pérdida o cuál es el porcentaje de operaciones ganadoras.

Encima de nuestro gráfico de Telefónica, añade una curva de liquidez y un histograma de posiciones que nos permiten saber de un vistazo cómo se habría comportado nuestro sistema.

Además, sobre el gráfico de precios, nos pinta flechas verdes o cruces rojas, indicando cuando abriríamos o cerraríamos nuestras posiciones.


Con esto ya hemos dado el primer paso para crear un sistema de trading. Hemos realizado un diseño preliminar y lo hemos probado en unas condiciones determinadas.

Es estupendo que el sistema arroje resultados positivos, pero no queremos sobrevivir simplemente, queremos ganar lo máximo posible.

Ha llegado la hora de depurar el sistema. Ha llegado la hora de la optimización. Pero esto... lo veremos en el próximo episodio.


Si discrepas, si no entiendes algo, si estás de acuerdo, si tienes una idea, si te enfrentas a un problema ¡añade tu comentario!

16 comentarios:

  1. Una duda, creo que pone "si el precio cruza al alza la mm50 entonces vender" ¿no debería ser a la baja(cross under)?

    ResponderEliminar
  2. Me refiero al código del ProBackTest. Aunque he probado cambiando over por under y me sale menos beneficio. Por cierto el ProReaTime solo me deja ver los datos de ohl desde 2008 ¿como puedo ver más histórico? gracias

    ResponderEliminar
  3. Hola, Jaral.

    Gracias por tus preguntas. Se nota que te fijas en los detalles.

    "Crosses over" significa que cruza de arriba a abajo (la media), por lo tanto es correcto. "Crosses under" quiere decir que "viene desde abajo".

    Respecto a cuánto histórico puedes ver, te recomiendo este truco: Pon el gráfico en "Anual", así PRT cargará todos sus datos disponibles sobre el valor. Luego pásalo a la escala que te interese (por ejemplo, diario) y verás que tienes disponible todo el rango visto con elanual (en el caso de OHL desde 1997).

    ¡Un saludo!

    ResponderEliminar
  4. Ok, había entendido over y under al revés! jaja. Gracias y hasta pronto!

    ResponderEliminar
  5. hola, alguien podría explicarme como puedo hacer en el ProReal que cuando la cotización de la empresa sea "MAYOR QUE" la media de la cotización de la misma, entonces se ejecute una acción?
    Se hacerlo con un precio, simplemente pinchando encima del precio en la gráfica de valores, pero con la media en sí, no se hacerlo...

    mi correo es xarlyrodriguez@yahoo.es

    ResponderEliminar
  6. Hola, Anónimo.

    Prueba a añadir la media que quieres en ese gráfico de precios.

    Debería aparecerte en un desplegable, la opción de utilizar la media en lugar del precio.

    Si no consigues resolverlo, lo vemos juntos. En ese caso, escríbeme a través de la página de Contacto (menú principal, bajo la cabecera del blog).

    ResponderEliminar
  7. Ok , ya encontré la manera de hacerlo.
    Es MM, me equivoco?
    De todas maneras, me aparece una media de 50 períodos que no se asemeja, en prácticamente nada, a los movimientos de esa gráfica; es decir, se aleja mucho de los movimientos diarios de la misma.
    A ver si puedes ayudarme, te dejo una imagen
    http://img651.imageshack.us/i/novatos1.jpg/

    ResponderEliminar
  8. Por cierto no se a que te refieres con menu principal, bajo la cabecera del blog, lo siento de verdad.
    Gracias de antebrazo, compañero.

    ResponderEliminar
  9. La verdad es que no entiendo por qué te aparece una media de 50 periodos. Por defecto, debería aparecer de 20.

    Lo único, que hayas copiado al pie de la letra el código de la imagen del ejemplo (que usa una media de 50 periodos)...

    En cualquier caso, eso puedes cambiarlo.

    Primero configura el gráfico como quieres y luego utiliza el asistente para crear el ProBacktest.

    Por otra parte, te recomiendo que le eches un ojo al código que se genera, porque está chupado de entender y de programar. Yo, pesonalmente, acabo antes tecleando que utilizando el asistente.

    ¡Un saludo!

    ResponderEliminar
  10. No entiendo muy bien por qué, pero cuando tengo que añadir una condición, tengo problemas, porque en la gráfica de precio, añadí una Media Movil de 20 períodos, pero a la hora de añadir la condición y pulsar el gráfico, esa Media Movil NO aparece entre los parámetros de condición.
    Están, Precio 1, Boll Sup 1, Boll Inf 1, Boll Media 1, Apertura, Máximo, Mínimo... etc, pero en ningún momento aparece MM1 (Media Movil 1).
    Llevo muchos días intentando averiguar por qué ocurre esto, pero que va, me siento obligado a pedir ayuda.
    Podrías darme las funciones de forma manual, para tener una idea de cómo hacerlo? Porque esto de que no aparezca la MM1, me está empezando a cansar un pelín jajja.
    Muchas gracias un saludo.

    ResponderEliminar
  11. Incluso me valdría una imagen, subida a cualquier página como Imageshack.us, que mostrara la "Creación Programando" de Probacktest.

    ResponderEliminar
  12. A ver, defínime tu lista de condiciones y yo te paso el código.

    ResponderEliminar
  13. exactamente lo que muestras en el ejemplo.
    Telefónica, 2000 euros.
    Cuando el precio esté por encima de su media móvil de 50 periodos.
    Stop loss variable, para perder un máximo de un 10%, por ejemplo, pero variable, en cuanto a que si el precio cambia para bien, el stop loss cambia también.

    ResponderEliminar
  14. El código del programa del ejemplo es directamente el que aparece en la penúltima imagen de este artículo. Cópialo tal cuál en vez de usar el asistente.

    El sistema funcionará así, aunque tú no tengas en tu gráfico pintada una media de 50 periodos, ni el RSI de 5, ni nada de lo que maneja el ProBackTest.

    No obstante, te recomiendo que en tu gráfico pongas esos elementos así configurados para comprobar cuándo entra y sale el programa.

    Para que sea en Telefónica, ponte en su gráfico.

    Para mover 2000€, vete al botón de "Gestión capital" (señalado en esa imagen) y escribes 2000 en "Capital inicial".

    Para lo del stop, vete al botón "Stops" y ve a "Trailing stop". Actívalo con una "pérdida de beneficio máximo" del 10%.

    A ver si con estas indicaciones te funciona.

    La verdad es que me extrañan los problemas que encuentras. Seguro que es cualquier tontería, pero a veces pasan siglos hasta que uno se da cuenta.

    ¡Saludos!

    ResponderEliminar
  15. deduzco que lo de Trailling Stop es porque es un stop variable, y el Stop Loss a secas es un stop loss único

    ResponderEliminar
  16. Por cierto, si cambio CROSSES OVER, por CROSSES UNDER, el % de operaciones positivas es mucho menor, sobre un 30%, pero el beneficio NETO es claramente superior.
    suerte?

    ResponderEliminar