Aprender Trading

Aprende a programar MQL4 para Metatrader – crea tus robots y indicadores de Trading ►Parte 2◄

Muy buenas Compañer@s,

Que aprenderás hoy en el curso de programación MQL4

Hoy nos mojaremos un poco los pies y el agua nos llegará hasta los tobillos. Aprenderás a crear un indicador separado del gráfico (para que no “moleste” a la hora de ver las velas) de tipo histograma que son los más fáciles de interpretar (a mi parecer), aprenderás a usar variables de tipo decimal (a partir de ahora double) y entero (a partir de ahora int) y conoceremos a un buen amigo, la Media Móvil (odiado por unos, amado por otros, pero quién no ha comenzado con ellas). Además aplicaremos un poco de estilo al indicador.

 

Antes de empezar (te voy a soltar una chapa, pero es importante):

Aprender a desarrollar (en este caso MQL4) cuando este no es el fin último, sino que es solo un medio para llegar a otro objetivo que consideramos mayor, puede llegar a ser muy estresante y frustrante si no se va a la velocidad que uno querría ir, o ve lo que uno quiere ver para llegar a su fin particular, porque nuestra meta es llegar cuanto antes y más si el fin tiene algo que ver con nuestros bienes. Esto suele causar que se aprenda mal, pronto y al final del camino lo dejes porque no cumplió con tus expectativas. Por este motivo, para que llegues a tu fin de la mejor forma que puedo enseñarte, he pensado crear un método para el curso de una forma diferente, darle una vuelta, para que no solo aprendas cosas nuevas y llegues a tu fin con conocimientos sólidos, sino para que a la vez aumentes el control de tu estrés, mejores la percepción en los detalles y desarrolles sobre todo la paciencia. Todas estas cualidades son muy importantes no solo para la programación, sino también para el trade y sobre todo y más importante… para el día a día.

Por este motivo intentaré que cada post no solo sea didáctico, sino que tenga algún que otro reto mental que tendrás que pasar (o no, de ti depende hacerlo). Lo iré metiendo poco a poco, para que el cambio no sea demasiado drástico… o no :P, ya lo irás notando. Pero sobre todo intentaré que sea divertido… a ver qué tal sale 😉

Creando el indicador de Trading, al lio:

¿Ya sabes cómo crear un indicador verdad?, pues venga, ponle un nombre, no selecciones nada más, siguiente, siguiente y finalizar…
Como esta vez vamos a crear un indicador separado del precio tendríamos que haber seleccionado la propiedad que define de que tipo es, pero vamos a hacerlo por código.

Tendría que aparecerte una línea de código arriba tal que así:

#property indicator_chart_window

Pues fácil, la vamos a cambiar por esta otra

#property indicator_separate_window

 

(Si seleccionaste la casilla, esta línea ya la tienes que tener, así que no cambies nada)Ya sabes crear un indicador de este tipo por código, para la próxima seleccionaremos el check 😉

OK, nos vamos a hacer un esquema mental de que es lo que realmente vamos a implementar. Lo mejor de todo es hacerlo en un papel y si es con varios colores mejor que mejor. Estamos en la era digital, pero un trozo de papel y unos lápices de colores pueden ser la mejor forma de plasmar la idea que tienes en la cabeza.. Inténtalo y prueba, cómprate unos colores y un cuaderno, no hace falta saber dibujar bien, solo plasmar tus ideas.

Lo que vamos a desarrollar aquí será: mostrar un histograma de barras azules para los datos positivos y rojas para los datos negativos. 

¿Qué es lo que nos dará ese dato positivo o negativo?, la diferencia de dos EMAs, así de simple.Para mostrarte el resultado te voy a poner todo el código completo para que veas la estructura y que te empieces a acostumbrar a interpretar código que no conoces. Eso si, te comentaré en verde las partes que quiero que aprendas en este post.

Haz hincapié en lo que está en azul, lo comentaré en verde y así de paso sabrás la forma de comentar en el código. El código que esté en rojo déjalo como parte de lo que aprenderás en futuras sesiones. Si quieres saber algo más sobre alguna definición y no se explique del todo, no te quedes con las dudas, consultar en Internet será una de las tareas principales en el aprendizaje de la programación.

//+——————————————————————+
//|
20150622.mq4 |
//|
Marcelo González |
//|
https://www.jontrader.com/2015/06/aprende-programar-mql4-para-me |
//+——————————————————————+
#property copyright “Marcelo
González”
#property link
“https://www.jontrader.com/2015/06/aprende-programar-mql4-para-me”
#property version   “1.00”
#property strict
#property indicator_separate_window
//Pondremos tantos buffers como colecciones de valores
necesitemos pintar en los gráficos.
//En este caso solo dos, un buffer para el histograma alcista,
otro para el bajista.
#property indicator_buffers 2
//+——————————————————————+
//Declaramos dos colecciones, una para los datos positivos y
otra para los datos negativos.
//Una colección se declara con el nombre seguido de [] y
comienza con el tipo de dato.
//El tipo de dato de estas colecciones será double porque es
como se llamarán a los datos decimales.
double CrossUp[];
double CrossDown[];
//+——————————————————————+
//+——————————————————————+
//| Custom indicator initialization
function                         |
//+——————————————————————+
int OnInit()
  {
//— indicator buffers mapping
   //Los
estilos y asignaciones los definimos en la función OnInit.
   //Esta se llama una
única vez, al inicio del indicador.
   //Pon en esta parte
(OnInit) todas las propiedades que creas se tengan que inicializarse una sola
vez.
   //Definimos el estilo
del primer histograma, el alcista
   /*Será de la forma:
                0: Es el
identificador del estilo, en este caso aplicado al primer buffer, osea el 0.
                DRAW_HISTOGAM:
es el tipo de gráfico a pintar, este caso es un histograma.
                STYLE_DASH:
tipo de líneas, pero como es un histograma dará igual lo que pongas.
                4: será el
grosor de lo que se pinte, yo he puesto 4.
                clrRoyalBlue:
será el color que mostrará. Empieza por clr seguido del nombre del color.
   */
SetIndexStyle(0,
DRAW_HISTOGRAM, STYLE_DASH, 4, clrRoyalBlue);
//Ahora asignamos ese estilo a una colección, como es la alcista
será a CrossUp.
   SetIndexBuffer(0,
CrossUp);
   //Definimos
el estilo del segundo histograma, el bajista, cuyo identificador es el 1.
   SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_DASH, 4, clrRed);
//Y se lo asignamos a su colección.
   //Se le asigna diciendo
que (en este caso) el buffer “1” será con la colección “CrossDown”
   SetIndexBuffer(1, CrossDown);
//—
return(INIT_SUCCEEDED);
}
//+——————————————————————+
//| Custom indicator iteration
function                              |
//+——————————————————————+
int OnCalculate(const int
rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//—
   //Necesitamos
saber cuántas velas vamos a estudiar. Este valor nos lo dará rates_total que
son las
   //velas totales que hay
menos el prev_calculated, que son las velas que se calcularon anteriormente
   //Como el resultado va
a ser un número entero lo declaramos como int
   int limit = rates_total-prev_calculated;
   //Esto es
una manía mía porque no me interesa que muestre todas las velas, solo unas
pocas, así no
   //penaliza tanto el
rendimiento si tenemos muchos indicadores en el gráfico.
   //Lo único que decimos
con esto es que si hay más de x velas a analizar, que solo me calcule x
   if (limit>100) limit=100;
   //Los
bucles for los veremos más adelante, de momento cópialo tal cual.
   //Lo único a destacar
es que hemos definido una variable entera llamada “i” que irá tomando valores
   //desde el número
máximo de velas hasta la primera vela, la vela 0.
   for(int i=limit; i>0; i–)
{
      //Vamos a
declarar una variable de tipo double porque será un precio y le asignaremos el
valor
      //de una EMA.
     //Como deberes
tendrás que averiguar que son cada uno de los valores que se le están pasando a
“iMA”
      //Tendremos un post
dedicado exclusivamente a estas asignaciones de los diferentes indicadores,
      //pero para este
post me gustaría que buscaseis por vosotros mismos que representan.
      //Solo os daré dos
valores; el “5” es el periodo de la EMA y la “i” es la vela a la que se la
      //va a aplicar (como
estamos en un bucle for será el valor i, si no lo entiendes no te preocupes,
      //lo terminarás de
entender cuando veamos los condicionales y bucles).
      double ema_a = iMA(NULL, 0, 5, 0, MODE_SMMA, PRICE_CLOSE, i);
      //Exáctamente igual que en el caso
anterior, solo que esta tendrá otro periodo, en este caso el 25.
      double ema_b = iMA(NULL, 0, 25, 0, MODE_SMMA,
PRICE_CLOSE, i);
    //Solo
queda hacer la resta entre las dos ema (a y b). Y se la asignamos a otra
variable por supuesto
      double ema_c =
ema_a-ema_b;
      //Los
condicionales los veremos más adelante, aunque este es muy fácil, se pone la
condición
      //principal en
comparación con otra, en este caso si ema_c es mayor que 0.
      if (ema_c > 0)
      {
         //Si es positivo el valor se
asigna a la colección para alcistas con este (ema_c)
         //CrossUp[i] es
exactamente el lugar de la colección donde irá asignado el valor.
         //Es como si
hiciésemos esto: CrossUp[2]=3, CrossUp[3]=4, CrossUp[4]=5, etc.
         //Cuando
expliquemos los bucles lo entenderás mejor, de momento que entiendas que esa
“i”
         //es la vela, o
mejor dicho, la barra del histograma a la que se le va a pintar el valor.
         CrossUp[i] = ema_c;
      }
      else
      {
         //Si es negativo el valor se
asigna a la colección para bajistas con este (ema_c)
         CrossDown[i] = ema_c;
      }
}
//— return value of
prev_calculated for next call
return(rates_total);
  }
//+——————————————————————+

Ahora solo queda Compilar y visualizarlo en un gráfico (acuérdate del post anterior como se hacía).

Si todo te ha salido bien, tendrás que ver algo como esto.

curso_programacion_mql4
Te queda experimentar con el periodo de las EMAs, los tipos de EMA, etc para conseguir ajustarlo a tus necesidades. Para el próximo post tengo pensado hablar de los condicionales y los bucles, para que tengas más repertorio y adquieras soltura a la hora de aplicar lógica a todo lo que se te ocurra.Nos leemos en el próximo post.

“No es la especie más fuerte la que sobrevive, ni la más inteligente, sino la que responde mejor al cambio.

Charles Darwin.”

Marcelo González

Sobre el autor

Jontrader

Jontrader

Toda la mejor información y herramientas para tu Trading. Compartimos Indicadores, Sistemas, Robots, scripts y mucho más! Para que puedas evaluar, testear y comprobar si son útiles para mejorar tu Trading.
Blog de habla Hispana con más de 24.000 suscriptores, ¡Únete ya!

6 Comentarios

Click aquí para comentar

Trading TV (Youtube)

CANAL TELEGRAM

Únete a más de 46.000 personas que ya reciben contenidos exclusivos