DT Oscillator para AmiBroker

Sinceramente, no me canso de repetirlo. Qué gran programa es Amibroker!!! Nunca me cansaré de agradecer a Alquimista, Bertini y otros foristas que me lo hayan descubierto. Su tosco aspecto y sus detalles poco convencionales esconden un excelente y muy flexible lenguaje de programación y unas posibilidades poco comunes en un programa de estas características.

En el presente artículo os comento como he traducido a Amibroker el conocido DT Oscillator de Miner (de hecho, es el primer indicador que escribo para este programa, aunque he compilado unos cuantos ya) y, de paso, os enseño cómo es la estructura del código utilizado en este programa para crear indicadores y sistemas.

Bien, antes de comenzar os recomiendo que os descargueís el código AFL y lo cargueís en Amibroker. Para ello simplemente teneis que ir al Foro, descargaros el fichero AFL y copiarlo en la carpeta ..\Formulas\Custom que teneis debajo de donde hayais instalado AmiBroker. A continuación, abrid AmiBroker, id a Workspace -> Pestaña Charts, y alli os deberia aparecer en la sección Custom.

Veamos el codigo de forma detallada:

> Lo primero es declarar los parámetros:

PeriodoRSI= Param("PeriodoRSI", 13, 1, 250, 1);
PeriodoStoch=Param("PeriodoStoch", 8, 1, 250, 1);
TipoMedia=Param("TipoMedia", 1, 1, 2, 1);
PeriodoSK=Param("PeriodoSK", 5, 1, 250, 1);
PeriodoSD=Param("PeriodoSD", 3, 1, 250, 1);
BandaSuperior=Param("BandaSuperior", 70, 50, 100, 1);
BandaInferior=Param("BandaInferior", 30, 0, 50, 1);

Si no declarasemos así los parámetros, después no nos aparecerían cuando insertemos el indicador y no podríamos modificar nada. La estructura para declarar un parámetro, como podeís deducir después de ver lo anterior, es:

Nombre_Parámetro=Param("Etiqueta", Valor por defecto, Valor minimo admitido, Valor maximo admitido,Cambio minimo (esto es para cuando optimicemos));

Fijaos que todas las lineas terminan con punto y coma; esto es fundamental, si no las poneis al comprobar el código (dentro de Analysis-> Formula Editor, seleccionar Tools->Verify Syntax) seguramente os dé error.

> Ahora pasamos a hacer cálculos; primero debemos calcular un Estocástico sobre un RSI. Esto se hace con la siguiente línea:

StoRSI= 100*(( RSI( PeriodoRSI) - LLV( RSI( PeriodoRSI ) , PeriodoStoch ) ) / ( ( HHV( RSI( PeriodoRSI) , PeriodoStoch ) ) - LLV(RSI( PeriodoRSI ), PeriodoStoch ) ) );

Fijaos que ni he tenido que declarar la variable StoRSI ni insertar el RSI. Sencillamente las funciones y las variables (excepto los parámetros) se escriben tal cual, AmiBroker ya se encarga de reconocerlos. La función RSI no necesita comentario y las funciones HHV y LLV son las clasicas Mayor máximo (Highest High Value) y menor mínimo(Lowest Low Value).

> Perfecto, ya solo nos queda aplicar una media móvil a StoRSI y al resultado aplicarle otra media. Esto con otros programas sería algo más complicado pero con AmiBroker es realmente sencillo:

if(TipoMedia==1)
{
SK=MA(StoRSI,PeriodoSK);
SD=MA(SK,PeriodoSD);
}

if(TipoMedia==2)
{
SK=EMA(StoRSI,PeriodoSK);
SD=EMA(SK,PeriodoSD);
}

Observen que al declarar los parámetros he introducido uno llamado TipoMedia por si queremos tener la versión simple (asignando 1 a ese valor), que construimos con la función MA, o exponencial (pondriamos ese valor igual a 2), que construimos con la función EMA. De esta forma construimos la estructura condicional que acabamos de ver. Aqui cabe resaltar cuatro cosas:

>> La expresión a evaluar en la condición siempre va entre paréntesis después del If
>> El final de un if nunca lleva punto y coma
>> Las instrucciones a ejecutar en caso de que sea cierta la condición deben ir siempre entre llaves { }
>> Verán que hay un doble igual (==). Dicho doble igual indica que queremos saber si la variable TipoMedia ha tomado valor 1 ó 2. Si pusieramos un igual simple (=) asignariamos un valor esa variable, cosa que en este caso no queremos hacer.

Ya tenemos los indicadores. Ahora a pintarlos ;-) Para ello utilizamos la siguiente parte del código:

Plot(SK,"DTOscSK",ParamColor( "ColorSK", colorBlue ),styleLine);
Plot(SD,"DTOscSD",ParamColor( "ColorSD", colorBlack ),styleDashed);
Plot(0,"ZeroLine",ParamColor( "ColorZero", colorBlack ),styleLine);
Plot(BandaSuperior,"BandaSuperior",ParamColor( "ColorUpper", colorRed ),styleLine);
Plot(BandaInferior,"BandaInferior",ParamColor( "ColorLower", colorGreen ),styleLine);

Como pueden observar, con la función Plot representamos las dos líneas del DT Oscillator, la línea cero para referencia y dos bandas configurables. Los argumentos de ls función Plot son los siguientes:

Plot (Valor a dibujar, "Etiqueta", Color, Estilo)

Aquí entran en juego dos funciones. Por un lado, ParamColor("Etiqueta", Color), que permite asignar los siguientes colores: red, blue, green, turquoise, gold, violet, bright green, dark yellow. Mediante esta función convertimos el color en un parámetro más lo que resulta muy cómodo. Por otro lado, Style+Estilo permite asignar el estilo de la línea añadiendo una de las siguientes palabras a Style: Line, Histogram, Thick, Dots, Dashed, Candle, NoLine, Bar, SwingDots, etc.

En fin, como pueden ver, las posibilidades del lenguaje implementado en AmiBroker son bastante amplias. En breve espero tener terminados dos artículos, uno sobre lanzamiento manual de órdenes desde AmiBroker a la TWS y otro sobre la total automatización de un sistema. Espero tenerlo antes de Julio, permanezcan atentos.

Un saludo
X-Trader


Artículos Relacionados


Bill Williams y el Caos IV

Bill Williams y el Caos IV

En nuestra cuarta entrega de la serie dedicada a los métodos de trading de Bill Williams analizamos la tercera dimensión: la Aceleración / Deceleración (fuerza de fase).

El Uso de Osciladores en las Estrategias de Trading I

El Uso de Osciladores en las Estrategias de Trading I

Luis Auñón y Juan José Martínez de Autrading nos remiten su primera colaboración en lo que pensamos será el inicio de una fructífera serie de colaboraciones e intercambio de artículos. Desde...

ACOEFI: Educación Financiera Para Todos

ACOEFI: Educación Financiera Para Todos

Os presentamos un nuevo proyecto que pretende difundir el conocimiento y la educación en finanzas a la vez que trata de convencer a los brokers de que esto es beneficioso para ellos: ACOEFI.

Bill Williams y el Caos II

Bill Williams y el Caos II

Continuamos con la serie sobre Bill Williams. En esta ocasión revisamos el concepto de Fractal, un patrón geométrico compuesto por cinco velas.

Estudio del Indicador Vortex

Estudio del Indicador Vortex

En este artículo cedido por la revista Traders', Óscar Cuevas de Visual Chart analiza el indicador Vortex, un indicador que trata de mejorar el Movimiento Direccional de Wilder.

Pivot Points II: Modificaciones de DeMark y Ross

Pivot Points II: Modificaciones de DeMark y Ross

Davide Bozzato revisa las principales variantes de los pívot points: DeMark y Ross. Asimismo, os damos sus fórmulas para el programa Metastock.