English Русский 中文 Deutsch 日本語 Português
El sistema experto 'Comentador'. Aplicación práctica de indicadores embebidos en programas MQL4

El sistema experto 'Comentador'. Aplicación práctica de indicadores embebidos en programas MQL4

MetaTrader 4Trading | 4 febrero 2016, 08:05
1 090 0
Andrey Opeyda
Andrey Opeyda


Un trader experimentado nunca abrirá una posición si no hay ningún indicador técnico que confirme su decisión. Por ejemplo, el trader lleva a cabo su análisis técnico y concluye que puede abrir una posición larga en una divisa determinada, digamos EURUSD. Un trader experimentado comprueba los resultados obtenidos con un indicador determinado antes de entrar al mercado con el precio actual (véase la Figura 1), por ejemplo, puede utilizar el Oscilador Estocástico, y espera hasta que este proporcione una señal de confirmación. El indicador y sus señales se describen aquí: https://www.metatrader5.com/en/terminal/help/indicators/oscillators/so. En el caso que nos ocupa tomaremos la señal descrita a continuación.

"...Comprar cuando la línea %K se eleve por encima de la línea %D y vender cuando la línea %K caiga por debajo de la línea %D."


Figura 1. Precios de EURUSD

%K es la línea principal, %D (discontinua) es la línea de señal. MQL4 permite embeber funciones en los cálculos y en los indicadores. La lista completa de estas funciones se proporciona al final de este artículo, y también está disponible en la documentación de MQL4. Entre ellas se encuentra el Oscilador Estocástico. Utilizamos la siguiente función para calcular los valores de la línea principal y la línea de señal:

double iStochastic( string symbol, int timeframe, int %Kperiod, 
                    int %Dperiod, int slowing, int method, 
                    int price_field, int mode, int shift)

En la documentación MQL4 encontrará más detalles.

Este es el cálculo de la línea principal del indicador Oscilador Estocástico en MQL4:

iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN, i)

Los parámetros 3,5,5 son los valores del periodo de las medias del indicador, MODE_SMA es el método que calcula la media móvil, i – el número de vela para la cual se calcula el valor, el parámetro MODE_MAIN indica que hay que calcular la línea principal (%K). De igual modo se muestra abajo el cálculo de la línea de señal:

iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL, i)

Cuando se utilizan las funciones embebidas del cálculo del indicador hay que especificar el marco temporal del gráfico y el símbolo. En nuestro caso, tenemos en cuenta el símbolo y el marco temporal actual del gráfico, parámetros NULL y 0. Recuerde que los cálculos se pueden llevar a cabo en cualquier símbolo y en cualquier periodo. Observe que en el gráfico del Oscilador Estocástico el valor de la línea principal es igual a 54.4444 y el valor de la línea de señal es 46.1238, es decir:

iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN, i) > 
iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL, i)

Ahora es sencillo automatizar los cálculos del indicador. Conviene que el indicador no consuma demasiado espacio en el gráfico del precio. La solución óptima consiste en eliminar el indicador del gráfico y mostrar solamente la señal calculada arriba. El método más popular para mostrar la señales es poner caracteres Wingdings en el gráfico. Mas adelante explicaremos cómo hacerlo, ahora vamos a centrarnos en otra característica de MQL4. El operador llamado Comment().

void Comment( ...)

Sirve para mostrar comentarios en el gráfico del precio.

// Estocástico
 
      double valSTOCH=0; 
      string commentSTOCH = "Estocástico:         ";
      string commentSTOCHAdd = "   Sin datos ";
      if(iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0)
>iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,0))
        commentSTOCHAdd =  "    Se puede comprar";
               
      if(iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0)
<iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,0))
        commentSTOCHAdd =  "    Se puede vender";   
        
      commentSTOCH =  commentSTOCH + commentSTOCHAdd;

El código fuente de arriba convierte la señal en texto para mostrarla en el gráfico.

Comment(commentSTOCH + "\n");

La función Comment permite que el usuario pueda utilizar el carácter de retorno de carro para visualizar los comentarios línea por línea. Con el código de arriba, el trader puede eliminar el gráfico del Oscilador Estocástico. Tiene un sistema de alarma que muestra el desarrollo del mercado actual en forma de texto.

Figura 2. Se puede comprar

Consideremos ahora, por ejemplo, el Commodity Channel Index (CCI).

"...mide la desviación del precio del activo de su precio estadístico medio. Los valores altos del índice señalan que el precio es inusualmente alto en comparación con el promedio, y los valores bajos indican que el precio es demasiado bajo. A pesar de su nombre el Commodity Channel Index (Índice de Canal de Mercaderías) se puede aplicar a cualquier instrumento financiero, no solo a mercaderías."

Al automatizar los cálculos de la señal CCI, obtenemos un comentario adicional como "El precio es demasiado alto". El trader puede incluso informarse mejor utilizando el indicador técnico Acelerador/Desacelerador, que, como su nombre indica, mide la aceleración y la desaceleración de la tendencia actual. "... Si se da cuenta de que el Acelerador/Desacelerador es una advertencia anticipada, esto le proporcionará una ventaja evidente."

Este es el código que muestra las señales de algunos indicadores:

//   Demarker
      double valDem=iDeMarker(NULL, 0, 13, 0);
      string commentDem = "DeMarker:    ";
      string commentDemAdd = "   Sin datos";
     
      if (valDem < 0.30)
         commentDemAdd =  "   Se espera que los precios suban";
      
      if (valDem > 0.70)
         commentDemAdd =   "   Se espera que los precios bajen";
      commentDem = commentDem + commentDemAdd;
 
// ATR
      double valATR=iATR(NULL, 0, 12, 0);
      string commentATR = "ATR:           ";
      commentATR=commentATR + "   La tendencia probablemente cambiará " + valATR;
            
// CCI
      double valCCI=iCCI(NULL,0,12,PRICE_MEDIAN,0);
      string commentCCI = "CCI:            ";
      string commentCCIAdd = "   Sin datos ";
      if (valCCI > 100)
        commentCCIAdd =  "   Overbought " + 
                         "(es posible una tendencia bajista correctora) ";
 
      if (valCCI < -100)
        commentCCIAdd =  "   Oversold " + 
                         "(es posible una tendencia alcista correctora) ";
        
      commentCCI =  commentCCI + commentCCIAdd + valCCI;
 
// MFI
      double valMFI=iMFI(NULL,0,14,0);
      string commentMFI = "MFI:            ";
      string commentMFIAdd = "   Sin datos ";
      if (valMFI > 80)
        commentMFIAdd =  "    un posible techo del mercado ";
 
      if (valMFI < 20)
        commentMFIAdd =  "    un posible suelo del mercado ";
        
        commentMFI =  commentMFI + commentMFIAdd + valMFI;

Los cálculos también se pueden hacer con arrays. Las funciones terminadas en OnArray pueden utilizarse con este objetivo, por ejemplo, la función iMAOnArray que calcula la media móvil del array de datos. Es interesante señalar que a veces algunos indicadores pueden dar señales erróneas. Aunque para un trader, el hecho de que no exista ninguna señal es, en sí mismo, otra señal. El trading no se reduce a tomar decisiones sobre cuál es la dirección adecuada para abrir una posición; también hay que tener en cuenta la hora. El sistema de trading "Comentador" calcula las señales solo en el marco temporal actual, aunque el trader puede añadir al programa sus cálculos adicionales en periodos más grandes o más pequeños. El lenguaje de programación MQL4 no mejora por sí solo el análisis del trader, pero sí contribuye a relajar su mente y a mejorar la funcionalidad de sus estrategias.

A continuación se listan los indicadores técnicos disponibles en MQL4:

iAC 
iAD 
iAlligator 
iADX 
iATR 
iAO 
iBearsPower 
iBands 
iBandsOnArray 
iBullsPower 
iCCI 
iCCIOnArray 
iCustom 
iDeMarker 
iEnvelopes 
iEnvelopesOnArray 
iForce 
iFractals 
iGator 
iIchimoku 
iBWMFI 
iMomentum 
iMomentumOnArray 
iMFI 
iMA 
iMAOnArray 
iOsMA 
iMACD 
iOBV 
iSAR 
iRSI 
iRSIOnArray 
iRVI 
iStdDev 
iStdDevOnArray 
iStochastic 
iWPR

Traducción del ruso hecha por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/ru/articles/1406

Archivos adjuntos |
Commentator.mq4 (7.03 KB)
Gráficos sin agujeros Gráficos sin agujeros
Este artículo explica cómo implementar gráficos sin barras vacías.
Almacenamiento y visualización de la información Almacenamiento y visualización de la información
Este artículo expone algunos métodos eficientes de almacenamiento y visualización de la información. Vamos a proponer algunas alternativas tanto para el archivo de log estándar del terminal como para la función Comment().
Las matemáticas de los algoritmos genéticos Las matemáticas de los algoritmos genéticos
Los algoritmos genéticos evolutivos se aplican en tareas de optimización. Por ejemplo en el aprendizaje neuronet, esto es, para seleccionar los valores de peso que permiten obtener el mínimo error. El algoritmo genético se basa en el método de búsqueda aleatoria.
Gestionar las órdenes es sencillo Gestionar las órdenes es sencillo
Este artículo explica cómo controlar las posiciones abiertas y las órdenes pendientes de varias maneras diferentes. El objetivo es simplificar la escritura de los asesores expertos.