Parte 1
¿Qué son los indicadores?
Los indicadores pueden definirse como distintas representaciones de los datos de precios que remueven el ruido y ayudan al trader a tomar mejores decisiones. En este caso, cuando hablamos de datos nos referimos a los precios de apertura, cierre, al máximo y al mínimo y al volumen, en caso de que esté disponible. Un ejemplo de un indicator bastante común, es la media móvil, que constituye solo otra manera de ver los datos. Por lo tanto, siempre debemos estar seguros de entender cuáles datos tenemos disponibles y como podemos usarlos. Seguidamente, vamos a mostrar paso a paso como desarrollar un indicador personalizado para Metatrader 4, la plataforma de trading más empleada en el sector del mercado de divisas.
Metatrader 4 emplea su propio lenguaje de programación conocido como Metaquotes, por lo que el procedimiento descrito a continuación no es aplicable a otras plataformas similares.
Primera parte
- Abra el MetaEditor y haga click en File | New.
- Seleccione indicador en la venta en la ventana que aparece y posteriormente haga click en Next.
- En la parte de nombre logicamente se coloca el nombre que le queremos dar a nuestro indicador. Para este ejemplo agregamos: PRO3120-BI1.
- Seguidamente incluimos la información del Copyright y nuestro sitio web si es que deseamos hacerlo y hacemos click en Finish.
- Ahora aparece una plantilla en blanco en la que escribiremos nuestro indicador. El encabezado debería lucir de la siguiente forma:
//+————–+
//| PRO1030 – BI1.mq4|
//| Copyright © 2007, Patrick Nouvion|
//| www.patricknouvion.com |
//+—————+
Estas líneas están precedidas por // por lo tanto son comentarios y pueden ser removidos en caso de que así lo deseemos. Así mismo podemos actualizar la información a voluntad y si queremos añadir algún tipo de declaración de copyright/licencia una sugerencia es colocar ahí mismo también de la siguiente forma:
#property copyright «Copyright © 2007, Patrick Nouvion» #property link
www.patricknouvion.com
Los siguientes son códigos generados por el asistente del Metaeditor cuando creamos el nuevo indicador y pueden ser modificados de acuerdo a la necesidad del usuario. Los items precedidos por #property son controles para las opciones/propiedades estándar de los indicadores. A continuación se muestra una lista de las más comunes configuraciones de propiedades disponibles:
#property indicator_chart_window
#property indicator_separate_window
#property indicator_color1 to #property indicator_color8
#property indicator_level1 to #property indicator_level8
#property indicator_style1 to #property indicator_style8
#property indicator_levelcolor
#property indicator_levelstyle
#property indicator_levelwidth
#property indicator_maximum
#property indicator_minimum
#property indicator_buffers
#property indicator_chart_window or #property indicator_separate_window : Este código es bastante simple,lo que
significa es ¿Si queremos que nuestro indicador sea desplegado en la misma ventana del gráfico de precios o en una
ventana separada?
Para nuestro ejemplo, emplearemos la misma ventana, por lo cual al inicio nuestro código debería lucir de la siguiente
forma:
//+------------------------------------------------------------------+
//| PRO1030 - BI1.mq4 |
//| Copyright © 2011, RCC | //| www.tecnicasdetrading.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, RCC"
#property link "www.tecnicasdetrading.com"
#property indicator_chart_window
El color, nivel, propiedades de estilo son usadas para definir el «estilo» del indicador y/o los niveles. Sin embargo, si establecemos estos como propiedades, el usuario no será capaz de de modificar ninguna de estas configuraciones lo que por lo general no es una buena idea. Por ejemplo, supongamos que escribimos lo siguiente:
#property indicator_color1 Red
En este caso nuestro indicador será únicamente de color rojo y no podremos cambiarlo a otro color a pesar de que la plataforma nos permita seleccionar una amplia variedad de colores. Lo mismo puede decirse del grosor, estilo, niveles, etc. Por lo tanto, solo en raras ocasiones vamos a emplear el #property, si bien ya sabemos para que sirve y porque en la mayoría de los casos no lo vamos a emplear. Un punto a tomar en cuenta es que estamos limitados a 8, un tema sobre el que volveremos más adelante.
#property indicator_maximum y #property indicator_minimum son utilizados cuando deseamos crear un indicador en una ventana separada y queremos controlar la escala de esa ventana. Por ejemplo, en el caso de un oscilador probablemente queramos fijar el rango de 0 a 100 lo cual añadimos las siguientes líneas:
#property indicator_maximum 100.0
#property indicator_minimum 0.0
Aquí si se fijan bien escribimos 100.0 y no 100. En realidad no existe ninguna diferencia y pueden utilizarse ambas notaciones de acuerdo al gusto del usuario, sin embargo es una buena práctica escribir valores dobles como dobles precisamente porque estos pueden ser reconocidos con facilidad . Comunmente los usuarios definen y declaran variables como variables de tipo entero pero las utilizan como variables dobles. Escribir un valor en su forma correcta nos ayuda a detectar este tipo de errores con rapidez.
Finalmente el #property indicator_buffers, el cual sirve para indicar la cantidad de «líneas» que nuestro indicador va a mostrar, si bien estamos limitados a 8 líneas. Internamente podemos emplear tantos «buffers» como queramos pero solo podemos desplegar 8 de ellos. ¿Y qué es un buffer? Bueno por el momento veamoslo como una variable.
Siguiendo con el ejemplo de nuestro indicador escribimos la siguiente línea:
#property indicator_buffers 1
Sin embargo, consideremos otro ejemplo para ilustrar mejor el uso de este control. Supongamos que deseamos crear un indicador con el MACD tradicional con 2 medias móviles y 1 histograma para lo cual vamos a escribir:
#property indicator_buffers 3
Si no establezco el valor de los buffers en 3, no existe forma en que pueda desplegar 3 items en mi indicador. En este punto, el código de nuestro indicador se ve de la siguiente forma:
//+——————————————————————+
//| PRO1030 – BI1.mq4 |
//| Copyright © 2011, RCC |
//| www.tecnicasdetrading.com |
//+——————————————————————+
#property copyright «Copyright © 2011, RCC»
#property link «www.tecnicasdetrading.com»
#property indicator_chart_window
#property indicator_buffers 1
El siguiente paso es definir los buffers. Para hacer esto escribimos lo siguiente:
double OutPut[];
Al igual que con una variable, debemos definir el tipo, en este caso doble. Seguidamente seleccionamos un nombre, que en esta oportunidad es Output. El [] sirve para definirlo como un arreglo o formación. Un arreglo es una «lista» que puede ser de valores para una variable, es decir podemos hablar de una variable multidimensional. Un ejemplo básico es cuando una persona trata de que sus hijos obtengan mejores notas en la escuela dandoles premios. En este caso el padre puede decir, si sacas un A, te daré $10, si sacas un B te daré $5, si sacas un C te daré $3, etc… Esto podríamos representarlo con la siguiente tabla:
A | B | C | D | E |
$10 | $5 | $3 | $0.25 | $0 |
De esta manera, empleando la tabla anterior podriamos escribir lo siguiente:
OutPut[A] = 10.0;
OutPut[B] = 5.0;
OutPut[C] = 3.0;
OutPut[D] = 0.25;
OutPut[E] = 0.0;
Ahora, pueden preguntarse ¿Para que necesitamos un arreglo? La respuesta es que para cada barra en nuestro gráfico necesitamos una salida o output para el valor de nuestro indicador por lo que nuestra tabla sería de la siguiente forma:
Bar0 | Bar1 | Bar2 | Bar3 | Bar4 |
Indicatorvalue0 | Indicatorvalue1 | Indicatorvalue2 | Indicatorvalue3 | Indicatorvalue4 |
Posteriormente entraremos en más detalles.
Entradas
En este lenguaje es bastante sencillo crear entradas para el usuario final. Simplemente se necesita añadir extern antes de nuestra declaración de variables. Como el indicador que estamos programando es una media móvil, se necesita que el usuario final conozca el número de periodos. Como la variable periodos es entera vamos a escribir lo siguiente:
In this language it is very easy to create inputs for the end user. You simply need to add extern before you variable declaration. Let’s decide now to write a basic moving average indicator ( not using the built-in iMA function ) so we need from the end user to know the number of periods. Periods are integer so I will write:
extern int Periods = 10;
Solo para confirmar podríamos escribir:
extern bool IsItTrue = true;
extern double Value = 0.0;
extern string UserName = “RCC”;
El lenguaje de Metatrader también tiene tipos específicos de variables tales como el color por lo que podemos añadir la siguiente línea:
extern color VarColor = Red;
Asegurense de usar solo las entradas que son necesarias y si tienen demasiadas es una buena idea separarlas mediante variables «tontas». Seguidamente se incluye la sección de entrada de un Expert Advisor que puede servirnos como ejemplo:
extern bool CLOSE_ALL_ORDERS = false;
//extern bool AUTO_RENEW = false;
extern string INITIAL_ORDERS = «Initial Orders»;
extern double EURUSD_LONG = 0.0; extern double GBPUSD_LONG = 0.0; extern double USDCHF_LONG = 0.0; extern double USDJPY_LONG = 0.0;
extern string PENDING_ORDERS = «Pending Orders»;
extern double EURUSD_LOTS_TO_TRADE = 0.0; extern double __EURUSD_BUY_RATE = 0.0; extern double __EURUSD_SELL_RATE = 0.0; extern double GBPUSD_LOTS_TO_TRADE = 0.0;
extern double __GBPUSD_BUY_RATE = 0.0; extern double __GBPUSD_SELL_RATE = 0.0; extern double USDCHF_LOTS_TO_TRADE = 0.0; extern double __USDCHF_BUY_RATE = 0.0;
extern double __USDCHF_SELL_RATE = 0.0; extern double USDJPY_LOTS_TO_TRADE = 0.0;extern double __USDJPY_BUY_RATE = 0.0; extern double __USDJPY_SELL_RATE = 0.0;
extern string OPTIONS = «Options»;
extern double PROFIT_TARGET = 0; extern double TRAIL_START = 0; extern double TRAIL = 0; extern bool EMAIL_ALERTS = false;
Aquí podemos ver las cadenas de variables que ayudan a separar todas las entradas distintas y que no serán usadas en ninguna otra parte más del código. En cualquier caso, hasta ahora nuestro código se ve de la siguiente manera:
//+——————————————————————+
//| PRO1030 – BI1.mq4 |
//| Copyright © 2007, RCC |
//| www.tecnicasdetrading.com |
//+——————————————————————+
#property copyright «Copyright © 2010, RCC»
#property link «www.tecnicasdetrading.com»
#property indicator_chart_window
#property indicator_buffers 1
double OutPut[];
extern int Periods = 10;
Por ahora damos por finalizada la primera parte del artículo para crear un indicador técnico personalizado en Metatrader 4, el cual será debidamente finalizado en el transcurso de los siguientes días.
Pueden encontrar un ejemplo del desarrollo de un indicador personalizado que traza una media móvil exponencial en el gráfico de precios en el siguiente tutorial: ¿Cómo crear un Indicador personalizado en MT4? – Ejemplo con la EMA
hola que tal
yo quisiera saber mas sobre este temas, ya que estoy interesado en crear un indicador apartir del MACD que me indique cuando ocurra una divergencias enviandome una alerta