Buenas tardes a todos!
Hoy quería hacer un articulillo sobre optimización de sistemas.
A la hora de especular, uno puede directamente tirarse a la piscina y operar discreccionalmente por noticias, impulsos, etc., que me temo que es algo bastante habitual, pero también creo yo desaconsejable. Basar las entradas en análisis técnico tradicional, con las típicas figuras chartistas, directrices, etc. es otro modo de entrar... pero lo normal es combinar lo anterior con el uso de indicadores. Combinando un poco todo lo anterior, tenemos una mayor cantidad de información, que en teoría debería llevarnos a una mejor operativa.
Así, cuando yo comencé a operar con futuros, que conincidió en una época en que disponía de bastante tiempo por estar en el paro, le dediqué bastantes horas a testear sistemas basados en medias, indicadores, etc. Y la verdad que a dia de hoy (unos 8 meses después), sigo teniendo muy en cuenta para mis operaciones los mejores de ellos.
Los sistemas de especulación son un mundo y se pueden escribir libros y libros sobre ellos. Se pueden complicar hasta la locura (con vistas a automatizar las operaciones) o simplemente buscar sistemas sencillos para tener en cuenta, a la hora de operar, como es mi caso.
Bueno, al trapo. Voy a describir brevemente cuál es el proceso que he seguido yo a la hora de hacerme mis sistemillas. Realmente es muy sencillo, y a mi me ha resultado muy útil. Espero que os guste.
El primer paso: conseguir un software gráfico en el que se pueda programar. Yo uso Metastock y consigo los
datos gratuitos de internet (aunque no en tiempo real). Creo que Visual Chart es bastante potente también, o ProRealTime es un programa del que suelen hablar bastante bien.
Así, vamos a hacer un
SISTEMA POR MEDIAS optimizado para el FUTURO DEL IBEX:
Primero seleccionamos el minutaje en que queremos operar. En este caso 10 minutos.
Abrimos el "enhanced system tester". Podemos iniciar el sistema desde cero o copiar uno existente. En este caso directamente le damos a "New System", le damos un nombre (peataña "generral" y rellenamos las opciones que va dando.
A continuación escribimos el código que activaría las órdenes de compra o venta.
En principio queremos un sistema típico de compra cuando una media rápida corta al alza a otra más lenta, y viceversa. Una forma de programarlo es lo siguiente:
Compra
"Mov(C,opt1,E) > Mov(C,opt2,E)
and
r e f(Mov(C,opt1,E),-1) <
r e f(Mov(C,opt2,E),-1)"
Venta
"Mov(C,opt1,E) <Mov(C,opt2,E)
and
r e f(Mov(C,opt1,E),-1)>
r e f(Mov(C,opt2,E),-1)"
Como en principio es un sistema básico, lo hacemos que opere simétricamente al alza y a la baja. Esto es, la misma condición que hace que cerremos un largo haría que abriéramos un corto o viceversa. Esto lo conseguimos poniendo el mismo código para compra en las pestañas "Buy Order" y "Buy to Cover Order", y para la venta el mismo código en "Sell Order" y en "Sell Short Order".
Para entender el código anterior, debo aclarar lo siguiente:
- Mov: es el código para una media
- C: quiere decir que la media se aplica a los precios de cierre del precio que seleccionamos
- E: hace la media exponencial
- Opt1 / Opt2: son dos variables que introducimos para poder optimizar el sistema, siendo el periodo usado para hacer la media.
Además, ponemos un stop fijo de 250 puntos tanto para largos y para cortos (pestaña "stops", y en la pestaña "optimizations", definimos las variables opt1 / opt2, y hacemos y definimos el rango de variación de cada una. En este caso yo he escogido tras varias pruebas que opt1 varíe entre 5 y 100 de 5 en 5, y que opt2 varíe de 10-100 con un paso de 10. En teoría al ser opt1 la variable asociada a la media rápida, lo lógico sería darle un rango pongamos entre 5-50, pero tras varias pruebas decidí darle a ambas medias similares rangos de variación, de modo que la media en teoría rápida podría resultar ser más lenta que la en teoría lenta.
Con los parámetros anteriores, en el cálculo de la optimización se tendrá que irealizar un total de 20x10=200 tests. Cuanto más grande hagamos el rango de variación, o cuanto más pequeño sea el paso, mas tests habrá que hacer, y si nos pasamos el tiempo de cálculo puede incrementarse considerablemente.
Así pulsamos "New Simulation", seleccionamos el futuro del ibex, y escogemos velas de 10 minutos, y una extensión de análisis de 10.000 periodos (esto es, el cálculo se hace para las últimas 10.000 velas de 10 minutos del gráfico, que serían aproximadamente los últimos 9 meses: de febrero de 2008 a finales de septiembre). Se elige el dinero con el que se empieza (yo pongo por ejemplo 100.000 € (aproximadamente el nominal de un futuro del ibex), un tamaño de posición de 10, lo cual simularía el apalancamiento de un futuro plus, con 10€ por cada punto), y unas comisiones de 10 € por cada entrada o salida.
El precio de la compra o de la venta sería en el precio de cierre de la vela siguiente a la que se produce el cruce de medias, lo cual seleccionamos en las opciones de precio de compra, lo cual podría simular nuestro tiempo de reacción en lanzar la orden.
En este caso la simulación del sistema tarda un par de minutos en completarse, y obtenemos los 10 mejores resultados (las 10 mejores combinaciones de los periodos de las dos medias):
De entre ellos escogemos el nº 2, por ser el que mayor rentabilidad da, con un número no muy grande de operaciones (129, o unas 14 al mes). Una primera pega que se ve es que tiene un bajo ratio de operaciones positivas frente a negativas (26/103), aunque en las que acierta gana de media 6,27 veces más de la media de las veces que pierde.
Observamos que la media rápida tiene de base 10 periodos y la lenta tiene 40.
Si ampliamos la información de este sistema podemos ver más ampliamente cómo funciona, y por consiguiente buscar cómo mejorarlo.
Para mí lo más interesante es en la pestaña "general" donde podemos ver el número de trades positivos y la ganancia media y máxima, o el número de trades malos y la pérdida media o máxima. Podemos ver el beneficio total en trades positivos y la pérdida total en los negativos, o el gasto en comisiones. O también el peor "drawdown" (o peor racha de pérdidas)
También es interesante ver la pestaña "equity", donde vemos un gráfico con la evolución del saldo de la cuenta que hubiéramos tenido (muy útil para detectar si el sistema ha tenido alguna distorsión extraña, por ejemplo por una barrida grande en el precio), o la pestaña "positions", donde podemos ver la distribución de la eficiencia de operaciones, digamos que se puede ver visualmente la cantidad de operaciones buenas y malas, y cuánto de buenas y malas han sido.
Bueno, y ahora debería venir la parte importante, o la parte de las conclusiones. Toda la parte de arriba que trata de cómo hacer el sistema quizás debería habermela saltado... pero bueno, ya está hecha.
En general aparentemente el sistema sería muy bueno, con un rendimiento anualizado casi el 30%. Obviamente en la realidad no es así, ya que es un sistema optimizado para el pasado, y eso no asegura que en el futuro funcionará tan bien. También muchas veces nos saltamos el sistema muchas veces, o entramos tarde o pronto, etc... pero es útil por ejemplo para decidir qué medias vamos a poner en el gráfico que utilizamos habitualmente.
Una vez que tenemos una primera versión preliminar del sistema es cuando deberíamos estudiar su funcionamiento un poquito más a fondo. Esto se puede hacer pulsando "plot chart", con lo que nos aparece el histórico sobre el que hemos realizado el estudio, y se puede ver poco a poco las entradas y salidas que ha ido haciendo el sistema.
En este punto y tras pasar bastante rato, uno puede pensar: bueno, quizás el sistema tiene una pega, y es que en periodos en los que el precio oscila arriba y abajo, el sistema da mogollón de señales falsas, lo que se traduce en un mayor gasto en comisiones.
Entonces se trata de pensar cómo podemos modificar la programación para evitar que pase esto. Una forma sencilla sería modificar el código inical por el siguiente:
Compra
"Mov(C,opt1,E) > Mov(C,opt2,E)
and
adx(14)> 20"
Venta
"Mov(C,opt1,E) < Mov(C,opt2,E)
and
adx(14)> 20"
En este este caso lo que tenemos es que el sistema se pone alcista cuando la media rápida está por encima de la lenta, y el indicador ADX es mayor que 20 (el ADX es una forma de medir la fuerza de la tendencia), lo cual en principio debería hacer reducir el número de operaciones realizadas, y comprar quizás un poco más tarde, pero con más posibilidades de pillar un movimiento grande. Si con lo anterior realizamos la simulación, obtenemos lo siguiente:
Como quizás deberíamos haber esperado, los resultados obtenidos son totalmente inesperados: en este nuevo sistema, resulta que la media en teoría rápida resulta ser más lenta. Esto operativamente se explica porque debido al caracter principalmente oscilante del mercado, muchas veces interesa vender cuando sube (la media más lenta se pone por debajo de la rápida, lo que es signo de sobrecompra), y comprar cuando baja. Sin embargo hemos conseguido lo que queríamos, que es mejorar el rendimiento del sistema, y pasamos de un 18% de beneficio en el periodo considerado a entornos de un 30%.
Sin embargo tiene otros problemas que habría que mejorar: se realizan muchas más operaciones (unas 40 al mes), con lo que pasamos a gastar unas 3 veces más en comisiones (en realidad esto es resultado de una deficiente programación del sistema, ya que cuando hay tendencia, lo único que hace es ir a la contra del mercado, e ir haciendo saltar el stop contínuamente).
Asimismo nótese que yo hubiera seleccionado el sistema nº4, porque aunque no sea el más rentable, sería visualmente más claro por ser las medias de periodos claramente diferenciados (cuando las medias tienen periodos muy similares, quedan pegadas una a la otra y los cortes se ven peor).
Bueno, todo esto no es más que un punto de partida. Lo anterior se puede aplicar para personalizar indicadores, o crearse indicadores propios que nos den nuestras propias señales. En cualquier caso yo utilizo los resultados que saco de aquí como una referencia más a la hora de operar. Para automatizar un sistema lo normal sería dedicarle muchas horas a ir perfeccionando el sistema, y ir limándolo y complicándolo.
Sin embargo otra opción es testear sistemas sencillos como el anterior, de modo que en nuestra operativa intradiaria podamos ver las señales de compra y venta en el gráfico que usamos habitualmente, con un cruce demedias, o un cruce de un indicador, etc. Si esto lo combinamos con la presencia de soportes y resistencias, líneas de tendencia, etc. podemos conseguir un arsenal mucho más completo para enfrentarnos a los peligros del mercado, que es al fin y al cabo de lo que se trata.
Yo personalmente los sistemas de medias no los sigo mucho, pero sí que he conseguido un par de sistemillas basados en indicadores que he personalizado y que me ayudan mucho cuando opero para confirmarme o no una entrada que haya hecho, o lo que es muchas veces más importante, para decirme que quizás debería salir de una operación en la que he entrado mal. Alguno de estos ya lo he puesto alguna vez en el foro en el que suelo escribir, y se trata de un oscilador que en gráficos de 5 minutos da señales de cortos o largos bastante bien (para hacerse una idea, en comparación con los anteriores, se pasaría a rentabilidades teóricas en el periodo considerado del 80%). De hecho bastante mejor que cualquiera de los indicadores que por defecto me incluía mi plataforma gráfica. Pero son lo suficientemente sencillos para poder incluirlos en la plataforma que uso.
Bueno, y hasta aquí hemos llegado. Qué locura de artículo. No pensé que fuera a ser tan largo. Espero que os haya gustado, y que por lo menos a alguno le sirva de ayuda. Buenas noches!!
PD: es seguro que hay mucha gente por ahí con un dominio mucho mayor de la programación de sistemas. Espero que no se sientan ofendidos por mis simplezas. Simplemente