Tutorial de Amibroker en Español – Parte 1: Todo sobre Trading Algorítmico

Inteligencia-artificial-trading

Ganar en el mercado no es fácil y muchos creen que aplicando un doble suelo o análisis chartista básico se puede ganar al mercado.

Algunos podrán hacerlo utilizando únicamente esas técnicas, pero no son la mayoría, ya que el mayor problema de utilizar esas aproximaciones al mercado es la relación entre señal y ruido que existe.

Te pongo un ejemplo, tú en la siguiente imagen que ves ?, te leo en mi Twitter.

Doble Suelo en Apple - 2019 - 2020

En términos prácticos parece un doble suelo aunque:

  • Está un poco cojo no ?
  • Parece que ha hecho una falsa ruptura ?
  • Dónde está el volumen ?

En definitiva, al entrar la subjetividad en juego haremos entradas que no deberíamos ya que parecía una buena entrada o nos perderemos buenas entradas. Es decir, incluiremos el factor humano en la ecuación del trading.

Importancia de cuantificar las estrategias de trading

Vamos a coger el mismo ejemplo del doble suelo y vamos a intentar quitar la subjetividad.

1. Identificación del patrón de doble suelo

Vamos a traducir la definición clásica la cual incluye subjetividad (trading discrecional) por parámetros totalmente objetivos (trading sistemático)

Chartismo clásicoEstrategia cuantificada
1. Dos mínimos en la misma zonaLa derivada de la EMA de periodo 3 vale cero en dos niveles separados menos de 0.5 ATR, sin que el precio haya perdido el primer punto – 0.5 ATR
2. Un máximo entre esos dos mínimosLa condición anterior ya incluye la existencia de un máximo
3. Volumen decreciente en las bajadas del precioEl volumen entre mínimos ha de situarse al menos una desviación estándar por debajo de la media simple de 20 periodos aplicada sobre el volumen.
4. Volumen creciente en la rupturaEl volumen de la sesión en la que supera a cierre el máximo entre mínimos ha de se superior a dos desviaciones estándar sobre la media de 20 periodos aplicada sobre el volumen
5. Compra tras superar el máximo entre mínimoA cierre de vela se compra si el precio está por encima del máximo cierre.

2. Problema de cuantificar una estrategia

Una vez hemos pasado de tener algo arbitrario a tener algo conciso hay que probar que realmente tiene un edge, es decir que realmente gana en el largo plazo. Es decir, vamos a aplicar el método científico al trading.

Suponiendo que lo aplicamos sobre una cesta de acciones del S&P500 (universo de acciones) tendríamos que probarlo para cada una de las acciones durante el histórico existente para tener una muestra lo suficientemente grande para que fuese estadisticamente significativa.

Si pretendemos hacer esto a mano, nos puede llevar meses sino años. Por suerte existen programas como Amibroker que nos permiten realizarlo en minutos o incluso segundos.

Amibroker como herramienta de Backtesting

Amibroker es una herramienta de análisis técnico profesional que incluye módulos gráficos y que nos va a permitir con unas pocas líneas de código (utiliza el lenguaje AFL muy parecido a C) programar las ideas como la del doble suelo y testearla sobre uno o varios activos en cuestión de segundos.

No te preocupes si no has programado nunca en mi canal de YouTube tengo muchos vídeos explicando paso a paso varios códigos por lo que puedes aprender allí. Además has de verlo como un puzzle con varias piezas, empiezas con los bordes (lógica del sistema) y vas poco a poco añadiendo más piezas (parámetros) hasta llegar a una solución.

Ejemplo de estudio del RSI utilizando Amibroker

Una vez hemos visto que los conceptos clásicos no son suficientes para asegurar la objetividad en el trading y que testear a mano las cientos de entradas de un sistema no es factible, vamos a ver, con código y video incluidos como aplicar el método cientifico a una idea.

Idea de sistema de trading

Comprar cuando el RSI de 14 periodos entra en sobreventa, es decir cae por debajo del nivel de 30.

Universo de acciones

En este caso, vamos a definir nuestro universo de acciones sobre el S&P500 incluyendo acciones descatalogadas para evitar el sesgo de supervivencia.

Testeo de la idea – Función explorar

Vamos a ver los retornos en 1,5,20,100 días desde que el RSI (14) entra en la zona de sobreventa (30) de todas las acciones del S&P500. El periodo de observación es el mismo, 2015 – 2018. 

Un total de 7086 cruces a la baja del RSI se han observado durante el periodo de muestra.

Se observa que los retornos siguen una distribución normal, sin embargo, no se aprecia a simple vista si están centrados en 0 o tienen una media positiva.

Código de Exploración en Amibroker

Buy = 0; 

Accion_valida = (datetime() < GetFnData("DelistingDate") OR IsEmpty(GetFnData("DelistingDate"))) AND  C>1 AND  MA(Volume,15)*MA(Close,15) >10000000;

Periodo = Param("Periodo RSI",14,1,100,1);

RSI_x = RSI(Periodo);

Filter = Accion_valida AND RSI_x < Param("RSI corte",2,0.01,99.99,1); 

Text = "RSI " + NumToStr(Periodo,1.0);

AddColumn(RSI_x,Text,1.2);
AddColumn(Ref(ROC(Close,2),2),"Cambio en 2 días",1.2);

Para ello, he calculado los retornos medios y la desviación estándar para todas las muestras y, tal como se muestra en los gráficos el retorno medio aumenta cuanto mayor es el tiempo transcurrido desde que el RSI cruza a la baja el nivel de 30.

Vista previa(abre en una nueva pestaña)

Sistema con el RSI en Amibroker

Realizando un backtest con las mismas hipótesis y vendiendo la posición 5 días después de abrirla, se obtiene, como era previsible un resultado equivalente al obtenido en la exploración.

Por lo que parece que exista cierto “Edge” en el RSI en sobreventa,; sin embargo, al sacarlo del periodo de observación (in-sample) y trasladarlo al presente (out-of-sample) vemos que el “sistema” hubiera perdido.

Por lo que tendríamos que concluir que el RSI de 14 periodos por si sólo no es suficiente para formar un sistema, pero puede ser la base para uno.

In SampleOut of Sample

Código del Sistema


Accion_valida = datetime() < GetFnData("DelistingDate") OR IsEmpty(GetFnData("DelistingDate"));
Accion_deslistada = datetime() >= GetFnData("DelistingDate");

MaximasPosiciones = 2000; 

SetOption("MaxOpenPositions",MaximasPosiciones);

SetPositionSize(500,spsValue);

Per_RSI = Param("Periodo RSI",14,2,30,1);	
	
RSI_x = RSI(Per_RSI);

// Limite inferior 

RSI_inf = Param("RSI_inf", 30,1,50,1);


Holding_Period = Param("Holding_Period", 20,1,1000,1);

// Cond. Entrada

Entrada = Cross(RSI_inf,RSI_x) AND Accion_valida ;


Buy = Entrada ;


// Cond. Entrada

Salida = BarsSince(Buy) == Holding_Period OR Accion_deslistada;


Sell = Salida;

// Condiciones para incluir/excluir acciones descatalogadas
Buy = ExRem(Buy,Sell);
Sell = ExRem(Sell,Buy);


//StopLoss = 15; //Optimize("StopLoss",10,5,30,5);
//SetOption("ActivateStopsImmediately",False);
//ApplyStop(stopTypeLoss ,stopModePercent,StopLoss,2);




BuyPrice = Open;
SellPrice = Open;


SetTradeDelays(1,1,0,0);


Plot(Buy,"compra",colorGreen,2);
Plot(Sell,"vemta",colorRed,2);

Tutorial en Video – Cómo hacer un backtest en Amibroker ?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *