English Русский 中文 Deutsch 日本語 Português 한국어 Français Italiano Türkçe
preview
Aprendiendo a diseñar un sistema de trading con Volumes

Aprendiendo a diseñar un sistema de trading con Volumes

MetaTrader 5Trading | 26 agosto 2022, 08:06
969 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Introducción

Bienvenidos a un nuevo artículo de la serie sobre la creación de sistemas comerciales basados en indicadores técnicos populares. Hoy hablaremos de otro importante indicador técnico que nos ofrece una perspectiva diferente del mercado: el indicador Volumes. Una vez más, el trabajo sobre el indicador se dividirá en varios temas:

  1. Definición del indicador Volumes
  2. Estrategia del indicador Volumes
  3. Esquema de la estrategia del indicador Volumes
  4. Sistema comercial del indicador Volumes
  5. Conclusión

Lo primero que debemos aprender es qué es el volumen y qué mide. Asimismo, veremos cómo se puede usar en el comercio y cómo puede ser útil. Para entenderlo mejor, veremos algunas estrategias simples basadas en el volumen. A continuación, desarrollaremos esquemas paso a paso para cada una de las estrategias analizadas, lo cual nos ayudará a desarrollar sistemas comerciales basados en ellas. Este es un paso muy importante en el desarrollo de cualquier sistema comercial. A continuación, veremos la parte más interesante: la sección "Sistema comercial del indicador Volumes", en la que convertiremos las estrategias en sistemas comerciales en MQL5 que generarán señales automáticamente y, por tanto, harán que el trading resulte más fácil y eficiente.

En este artículo, al igual que en los anteriores, utilizaremos el lenguaje MQL5 (MetaQuotes Language) integrado en el terminal comercial MetaTrader 5. Si no sabe cómo descargar o usar el MetaEditor, le recomiendo leer la sección "Escribiendo el código MQL5 en el MetaEditor" de uno de mis artículos anteriores. Una vez más, a la hora de aprender, resultará muy útil que aplique por su cuenta todo lo visto, ya que esto le ayudará a comprender mejor el material. La práctica es un factor muy importante en cualquier proceso de aprendizaje.

¡Atención! Toda la información del presente artículo se ofrece «tal cual», únicamente con fines ilustrativos, y no supone ningún tipo de recomendación. El artículo no garantiza ningún resultado en absoluto. Todo lo que ponga en práctica usando este artículo como base, lo hará bajo su propia cuenta y riesgo; el autor no garantiza resultado alguno.

Vamos a comenzar a explorar otra herramienta comercial.


Definición del indicador Volumes

En el mercado de divisas, el indicador de volúmenes Volumes muestra la cantidad de cambios en el precio durante un determinado periodo de tiempo, es decir, los volúmenes realmente negociados en número de contratos, unidades, dinero, etcétera. El indicador de volumen ofrece información sobre la oferta y la demanda y la liquidez del mercado. Entonces, si hay un volumen alto en el mercado, esto indicará un volumen de demanda alto en caso de crecimiento, o un volumen de oferta alto, en caso de disminución. El indicador de volumen es útil porque puede confirmar una tendencia de forma adicional. En artículos anteriores, hemos hablado muchas veces de las tendencias. Por ejemplo, podrá leer una descripción detallada de la tendencia en el artículo del enlace.

El volumen acompaña a la tendencia. Esta es una herramienta muy útil que podemos usar para saber si el movimiento actual será fuerte o débil. Durante una tendencia alcista, el volumen aumenta cuando la tendencia se mueve al alza y disminuye al corregirse esta. Durante una tendencia bajista, el volumen aumenta con el movimiento descendiente, lo que sería una señal importante. Sin embargo, a veces estos movimientos bajistas se producen sin mucho volumen, ya que los precios pueden caer sin volumen. En otras palabras, no hay necesariamente un volumen alto al darse un movimiento descendente en una tendencia bajista. En el caso de una corrección alcista durante una tendencia bajista, el volumen disminuye.

El volumen puede mostrar una debilidad en la tendencia actual si se forma una divergencia. La divergencia indica que el volumen se mueve en la dirección opuesta al precio, sin confirmar dicha dirección del precio.

Así, como hemos mencionado en la descripción, el indicador se calcula de la forma que sigue.

En el mercado Fórex:

Volumen = número de cambios de precio en un periodo de tiempo.

En el mercado de valores:

Volumen = volumen comercial * precio

Por ejemplo, el volumen de una acción concreta es de 1 000 acciones a 10 dólares. El indicador de volumen será entonces como sigue:

Volumen = 1000 * $10 = $10,000

La diferencia de cálculo se debe a que, al contrario que sucede con el mercado de valores, el mercado de divisas está descentralizado.

Pero afortunadamente no tenemos que calcular los volúmenes cada vez de forma manual, ya que estos se encuentran en MetaTrader 5. Lo único que tenemos que hacer es seleccionar el indicador entre los disponibles:

Menú Insertar --> Indicadores --> Volumen --> Volumes

Iniciando el indicador Volumes

Tras seleccionar un indicador en el menú del paso cuatro de la imagen anterior, veremos una ventana con los parámetros del indicador:

Parámetros del indicador Volumes

1. El color de la barra cuando el volumen aumenta.

2. El color de la barra cuando el volumen cae.

3. El tipo de volumen usado en el cálculo (de ticks o real).

4. El grosor de la barra. 

Una vez configurados los parámetros necesarios, el indicador se ejecutará en el gráfico:

Indicador Volumes en el gráfico

El verde indica que la barra actual es mayor que la anterior, y el rojo que la barra actual es menor que la anterior.


Estrategia del indicador Volumes

En esta parte, analizaremos estrategias de volumen simples para ver cómo se pueden usar el indicador. Por supuesto, todas estas estrategias necesitan ser optimizadas, lo cual está bien, ya que su principal objetivo es explicar cómo se puede usar el indicador de volumen y cómo desarrollar un sistema comercial basado en él. Así que asegúrese de poner a prueba cada estrategia antes de usarla en una cuenta real, y no dude en optimizarla si fuera necesario.

  • Estrategia uno: Volume - movimiento

Con la ayuda de esta estrategia, compararemos el valor actual de los volúmenes con el valor anterior y determinaremos una señal adecuada. Si el volumen actual es mayor que el anterior, esto indicará un aumento de volumen. Si el volumen actual es menor que el anterior, esto indicará que el volumen ha disminuido.

En palabras más simples:

Volumen actual > Volumen anterior --> Los volúmenes aumentan

Volumen actual < Volumen anterior --> Los volúmenes caen

  • Estrategia dos: Volume - fuerza

Con ayuda de esta estrategia, compararemos el valor actual de los volúmenes con el valor medio de los cinco volúmenes anteriores y determinaremos la fuerza del indicador de volumen. Si el valor actual está por encima de la media, será señal de un volumen fuerte. Si está por debajo de la media, esto indicará un volumen débil.

De este modo,

Volumen actual > Media --> Volumen fuerte

Volumen actual < Media --> Volumen débil

  • Estrategia tres: Precio y Volume - tendencia alcista

Según esta estrategia, durante una tendencia alcista comparamos los máximos actuales y los anteriores, los volúmenes actuales y los anteriores, y determinamos si existe o no una señal de compra. Si el máximo actual es mayor que el anterior y también el volumen actual es mayor que el anterior, esto indicará una señal de compra. Pero si el máximo actual es mayor que el anterior y el volumen actual es menor que el anterior, no tendremos señal.

Máximo actual > máximo anterior y volumen actual > volumen anterior --> señal de compra durante la tendencia alcista

  • Estrategia cuatro: Precio y Volume - tendencia bajista

Esta estrategia es la opuesta a la anterior: durante una tendencia bajista, comparamos los mínimos actuales y los anteriores, el volumen actual y el anterior, y determinaremos si existe o no una señal para abrir una operación en corto. Si el mínimo actual es menor que el mínimo anterior y el volumen actual es mayor que el volumen anterior, esto indicará una señal de venta, pero si el mínimo actual es menor que el mínimo anterior y el volumen actual es menor que el volumen anterior, no habrá señal.

Mínimo actual < mínimo anterior && volumen actual > volumen anterior --> señal de venta durante la tendencia bajista

  • Estrategia cinco: MA y Volumes

En esta estrategia, comparamos las medias móviles (MA) de dos periodos diferentes -corto y largo-, así como el volumen actual y el anterior, y determinamos si existe una señal de compra o de venta. Si la MA más corta está por debajo de la más larga y luego la más corta cruza la más larga desde abajo hacia arriba, y el volumen actual es mayor que el anterior, esto nos indicará una señal de compra. Si la MA más corta está por encima de la larga y luego la corta cruza la larga desde arriba hacia abajo, y el volumen actual es mayor que el anterior, esto nos indicará una señal de venta.

MA corta < MA larga, y luego MA corta > MA larga && Volumen actual > Volumen anterior --> Señal de compra

MA corta > MA larga, y luego MA corta < MA larga && Volumen actual > Volumen anterior --> Señal de venta


Esquema de la estrategia del indicador Volumes

En esta sección, desarrollaremos un plan para escribir el código de las estrategias analizadas. Este plan/esquema nos permitirá organizar paso a paso el desarrollo de un sistema comercial. Este es un paso muy importante, imprescindible para sistematizar las ideas, pues permite determinar paso a paso lo que debemos hacer.

En primer lugar, crearemos un sencillo sistema comercial que generará el valor actual del indicador Volumes y lo mostrará en el gráfico como un comentario. Para ello, el sistema deberá comprobar el valor del indicador en cada tick y retornarlo en forma de comentario. Este esquema paso a paso le ayudará a desarrollar un sistema comercial para esta estrategia:

Esquema de la estrategia Simple Volume


  • Estrategia uno: Volume - movimiento

Basándonos en esta estrategia, desarrollaremos un sencillo sistema comercial que generará señales e informará sobre los movimientos de volumen (si está aumentando o disminuyendo) comparando los dos valores del indicador: el volumen actual y el anterior. Por lo tanto, el sistema deberá comprobar estos dos valores en cada tick. Entonces, si el volumen actual es mayor que el anterior, en el gráfico debería aparecer un mensaje indicando que el volumen está aumentando. Y si el valor actual es menor que el anterior, debería informar de que el volumen está disminuyendo. Este esquema paso a paso le ayudará a desarrollar un sistema comercial para esta estrategia:

Esquema de la estrategia Volume - movimiento


  • Estrategia dos: Volume - fuerza

Basándonos en esta estrategia, desarrollaremos un sencillo sistema comercial que generará señales e informará sobre la fuerza del volumen comparando el valor actual de los volúmenes y el valor medio de los cinco volúmenes anteriores. Así, el sistema deberá comprobar todos estos valores y luego calcular la media de los cinco volúmenes anteriores en cada tick. A continuación, se genera la señal correspondiente: si el volumen actual es mayor que la media, se generará una señal de volumen fuerte. Asimismo, el volumen actual, los cinco valores de volumen anteriores y su media también se mostrarán como líneas adicionales en el comentario del gráfico. Si el valor actual es inferior al valor medio, se mostrará un comentario de volumen débil. Asimismo, el volumen actual, los cinco valores de volumen anteriores y su media también se mostrarán como líneas adicionales en el comentario del gráfico. Este esquema paso a paso le ayudará a desarrollar un sistema comercial para esta estrategia:

Esquema de la estrategia Volume - fuerza


  • Estrategia tres: Precio y Volume - tendencia alcista

Basándose en esta estrategia, desarrollaremos un sistema comercial sencillo que funcionará durante la tendencia alcista y bajista. Comprobará el valor actual y el anterior del indicador, así como los máximos actuales y anteriores en cada tick y generará una señal de compra basada en la comparación de dichos valores. De esta forma, la estrategia generará una señal de compra y también mostrará con un comentario en el gráfico los valores del máximo actual, el máximo anterior, el volumen actual y el volumen anterior, si el máximo actual es mayor que el anterior y el volumen actual es mayor que el anterior. Si la condición no coincide, el sistema comercial no generará una señal de compra, sino que simplemente mostrará un comentario en el gráfico con una serie de valores. Este esquema paso a paso le ayudará a desarrollar un sistema comercial para esta estrategia:

Esquema de la estrategia Price y Vol - Uptrend

  • Estrategia cuatro: Precio y Volume - tendencia bajista

Esta estrategia es la opuesta a la anterior. Crearemos un sencillo sistema comercial que funcione durante una tendencia bajista. Este comprobará en cada tick el valor actual y el anterior del indicador, así como los mínimos actuales y anteriores, y generará una señal para abrir una operación en corto basada en la comparación de los valores. Así, la estrategia generará una señal de transacción corta y también mostrará con un comentario en el gráfico los valores del mínimo actual, el mínimo anterior, el volumen actual y el volumen anterior si el mínimo actual es menor que el anterior y el volumen actual es mayor que el anterior. Si la condición no coincide, el asesor no generará una señal de compra, sino que simplemente mostrará un comentario en el gráfico con un conjunto de valores. Este esquema paso a paso le ayudará a desarrollar un sistema comercial para esta estrategia:

Esquema de la estrategia Price y Vol - Downtrend


  • Estrategia cinco: MA y Volumes

Para esta estrategia, crearemos un sistema comercial que puede comprobar dos indicadores: Volumes y la Media Móvil MA. Comprobará ambos en cada tick y determinará si se genera una señal de compra o de venta comparando dos medias móviles, una corta y otra larga: si la corta cruza la larga desde abajo hacia arriba y al mismo tiempo el volumen actual es mayor que el anterior, el sistema debería generar una señal de compra. El segundo escenario es que la MA más corta está por encima de la larga y entonces la corta cruza la larga desde arriba hacia abajo, siendo el volumen actual mayor que el anterior: esto sería una señal de compra. El sistema debería entonces generar una señal de venta. Este esquema paso a paso le ayudará a desarrollar un sistema comercial para esta estrategia:

Esquema de la estrategia MA_Vol


Sistema comercial del indicador Volumes

Hemos llegado a la parte más interesante de este artículo: la conversión de todas las estrategias anteriores en un sistema comercial para generar señales de forma automática y precisa. Vamos a desarrollar un sistema comercial para cada una de las estrategias analizadas. Pero antes, desarrollaremos un sistema comercial para generar el valor actual del volumen, que será la base de cada estrategia.

  • Bien, para ello, crearemos un array de precios usando la función double:
double VolArray[];
  • Clasificamos el array en orden inverso empezando por los datos actuales usando la función ArraySetAsSeries; esta retorna true o false:
ArraySetAsSeries(VolArray,true);
  • Definimos los volúmenes usando la función iVolumes; para ello hemos creado una variable llamada VolDef. La función iVolumes retorna el manejador del indicador Volumes y sus parámetros (símbolo, periodo, volumen aplicado). Los parámetros de la función son _Symbol (símbolo actual) y period (marco temporal actual).
int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);
  • Rellenamos el array usando la función CopyBuffer con los datos del indicador MFI.
CopyBuffer(VolDef,0,0,3,VolArray);
  • Luego calculamos el valor de los volúmenes usando la función NormalizeDouble; para ello hemos creado una variable VolValue. La función NormalizeDouble retorna un valor de tipo double.
int VolValue=NormalizeDouble(VolArray[0],5);
  • Visualización del valor del indicador Volumes en el gráfico usando la función Comment.
Comment("Volumes Value is: ",VolValue);

A continuación, le mostramos el código completo para crear dicha estrategia:

//+------------------------------------------------------------------+
//|                                               Simple Volumes.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
//Create an array for Volume
   double VolArray[];

//sorting the array from the current data
   ArraySetAsSeries(VolArray,true);

//defining Volume
   int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

//filling the array
   CopyBuffer(VolDef,0,0,3,VolArray);

//calculating current vol value
   int VolValue=NormalizeDouble(VolArray[0],5);

//creating a comment with current vol value
   Comment("Volumes Value is: ",VolValue);
  }
//+------------------------------------------------------------------+

Después de realizar la compilación, el asesor experto aparecerá en la ventana del Navegador en MetaTrader 5:

 Volumes en el Navegador 1

Clique dos veces en el archivo o arrástrelo y suéltelo en el gráfico, y aparecerá la siguiente ventana:

Ventana del sistema Simple Volume

El programa aparecerá entonces en el gráfico:

 Sistema Simple Volume en el gráfico

Ejemplos de señales generadas a partir de esta estrategia.

Señales de Simple Volume

  • Estrategia uno: Volume - movimiento

Para crear un sistema comercial que muestre en un gráfico un comentario con el movimiento del indicador de volumen basado en la comparación del valor del volumen actual y el anterior, escribiremos el código de la forma que sigue

//+------------------------------------------------------------------+
//|                                               Vol - Movement.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
//Create an array for Volume
   double VolArray[];

//sorting the array from the current data
   ArraySetAsSeries(VolArray,true);

//defining Volume
   int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

//filling the array
   CopyBuffer(VolDef,0,0,3,VolArray);

//calculating current vol value
   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue=NormalizeDouble(VolArray[1],5);

//Conditions of vol movements
//Volume increasing
   if(VolCurrentValue>VolPrevValue)
     {
      Comment("Volumes increased","\n","Volumes current value is: ",VolCurrentValue,
              "\n","Volumes previous value is: ",VolPrevValue);
     }

//Volume decreasing
   if(VolCurrentValue<VolPrevValue)
     {
      Comment("Volumes decreased","\n","Volumes current value is: ",VolCurrentValue,
              "\n","Volumes previous value is: ",VolPrevValue);
     }
  }
//+------------------------------------------------------------------+

Qué hemos añadido a este código:

Calculamos los valores MFI actual y anterior

   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue=NormalizeDouble(VolArray[1],5);

Condiciones de la estrategia.

El indicador Volumes está aumentando:

   if(VolCurrentValue>VolPrevValue)
     {
      Comment("Volumes increased","\n","Volumes current value is: ",VolCurrentValue,
              "\n","Volumes previous value is: ",VolPrevValue);
     }

El indicador Volumes está disminuyendo:

   if(VolCurrentValue<VolPrevValue)
     {
      Comment("Volumes decreased","\n","Volumes current value is: ",VolCurrentValue,
              "\n","Volumes previous value is: ",VolPrevValue);
     }

Después de realizar la compilación, el asesor experto aparecerá en la ventana del Navegador en MetaTrader 5:

Indicador Volumes en el Navegador 2

Clique dos veces en el archivo o arrástrelo y suéltelo en el gráfico, y aparecerá la siguiente ventana:

Ventana del sistema Volume - movimiento

Permitimos el comercio automático "Allow Algo Trading", pulsamos OK y el programa se iniciará en el gráfico:

 Sistema Volume - movimiento - en el gráfico

A continuación, mostramos un ejemplo de las señales generadas por esta estrategia, así como la representación de los datos: el valor actual y el anterior.

Aumento de los volúmenes:

Ventana de datos actual:

 Volume - movimiento - señal de crecimiento - valor actual

Datos anteriores en la ventana:

 Volume - movimiento - señal de crecimiento - valor anterior

Reducción de los volúmenes:

Ventana de datos actual:

Volume - movimiento - señal de caída - valor actual

Datos anteriores en la ventana:

 Volume - movimiento - señal de caída - valor anterior

  • Estrategia dos: Volume - fuerza

A continuación, mostramos el código completo del sistema comercial de esta estrategia para generar de forma automática las señales de fuerza del indicador Volumes, basado en la comparación del valor actual del indicador Volumes con el anterior:

//+------------------------------------------------------------------+
//|                                               Vol - Strength.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
//Create an array for Volume
   double VolArray[];

//sorting the array from the current data
   ArraySetAsSeries(VolArray,true);

//defining Volume
   int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

//filling the array
   CopyBuffer(VolDef,0,0,11,VolArray);

//calculating current vol && 5 previous volume values
   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue1=NormalizeDouble(VolArray[1],5);
   double VolPrevValue2=NormalizeDouble(VolArray[2],5);
   double VolPrevValue3=NormalizeDouble(VolArray[3],5);
   double VolPrevValue4=NormalizeDouble(VolArray[4],5);
   double VolPrevValue5=NormalizeDouble(VolArray[5],5);


//calculating AVG of 5 previous volume values
   double VolAVGVal=((VolPrevValue1+VolPrevValue2+VolPrevValue3+VolPrevValue4+VolPrevValue5)/5);

//conditions of Volume strength based on comparing current to AVG
//strong volume
   if(VolCurrentValue>VolAVGVal)
     {
      Comment("Strong volume","\n","Current volume is : ",VolCurrentValue,"\n",
              "Volume prev 1 is : ",VolPrevValue1,"\n",
              "Volume prev 2 is : ",VolPrevValue2,"\n",
              "Volume prev 3 is : ",VolPrevValue3,"\n",
              "Volume prev 4 is : ",VolPrevValue4,"\n",
              "Volume prev 5 is : ",VolPrevValue5,"\n",
              "AVG volume is : ",VolAVGVal);
     }

//weak volume
   if(VolCurrentValue<VolAVGVal)
     {
      Comment("Weak volume","\n","Current volume is : ",VolCurrentValue,"\n",
              "Volume prev 1 is : ",VolPrevValue1,"\n",
              "Volume prev 2 is : ",VolPrevValue2,"\n",
              "Volume prev 3 is : ",VolPrevValue3,"\n",
              "Volume prev 4 is : ",VolPrevValue4,"\n",
              "Volume prev 5 is : ",VolPrevValue5,"\n",
              "AVG volume is : ",VolAVGVal);
     }
  }
//+------------------------------------------------------------------+

Qué hemos añadido a este código:

El cálculo del valor actual del indicador Volumes y los cinco valores anteriores:

   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue1=NormalizeDouble(VolArray[1],5);
   double VolPrevValue2=NormalizeDouble(VolArray[2],5);
   double VolPrevValue3=NormalizeDouble(VolArray[3],5);
   double VolPrevValue4=NormalizeDouble(VolArray[4],5);
   double VolPrevValue5=NormalizeDouble(VolArray[5],5);

 El cálculo de la media de los cinco volúmenes anteriores:

double VolAVGVal=((VolPrevValue1+VolPrevValue2+VolPrevValue3+VolPrevValue4+VolPrevValue5)/5);

Condiciones de la estrategia.

Volumen fuerte:

   if(VolCurrentValue>VolAVGVal)
     {
      Comment("Strong volume","\n","Current volume is : ",VolCurrentValue,"\n",
              "Volume prev 1 is : ",VolPrevValue1,"\n",
              "Volume prev 2 is : ",VolPrevValue2,"\n",
              "Volume prev 3 is : ",VolPrevValue3,"\n",
              "Volume prev 4 is : ",VolPrevValue4,"\n",
              "Volume prev 5 is : ",VolPrevValue5,"\n",
              "AVG volume is : ",VolAVGVal);
     }

Volumen débil:

   if(VolCurrentValue<VolAVGVal)
     {
      Comment("Weak volume","\n","Current volume is : ",VolCurrentValue,"\n",
              "Volume prev 1 is : ",VolPrevValue1,"\n",
              "Volume prev 2 is : ",VolPrevValue2,"\n",
              "Volume prev 3 is : ",VolPrevValue3,"\n",
              "Volume prev 4 is : ",VolPrevValue4,"\n",
              "Volume prev 5 is : ",VolPrevValue5,"\n",
              "AVG volume is : ",VolAVGVal);
     }

Después de realizar la compilación, el asesor experto aparecerá en la ventana del Navegador en MetaTrader 5:

 Indicador Volumes en el Navegador 3

Arrastramos y soltamos el programa desde el Navegador al gráfico y se abrirá la ventana de configuración:

 Ventana del sistema Volume - fuerza

Después de clicar en Aceptar, se adjuntará al gráfico:

Sistema Volume - fuerza - en el gráfico

A continuación, mostramos un ejemplo de las señales generadas según la fuerza del volumen:

Volumen fuerte:

Sistema Volume - fuerza - señal fuerte

Volumen débil:

Sistema Volume - fuerza - señal débil

  • Estrategia tres: Precio y Volume - tendencia alcista

A continuación, le mostramos el código completo para crear dicha estrategia:

//+------------------------------------------------------------------+
//|                                          Price&Vol - Uptrend.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
//Create arrays for price & Volume
   MqlRates PriceArray[];
   double VolArray[];

//filling price array with data
   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);

//sorting arrays from the current data
   ArraySetAsSeries(VolArray,true);

//defining Volume
   int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

//filling the array
   CopyBuffer(VolDef,0,0,3,VolArray);

//calculating the current and previous values of highs and volume
   double CurrentHighValue=NormalizeDouble(PriceArray[2].high,5);
   double PrevHighValue=NormalizeDouble(PriceArray[1].high,5);
   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue=NormalizeDouble(VolArray[1],5);

//Conditions of buy signal
//Buy signal
   if(CurrentHighValue>PrevHighValue&&VolCurrentValue>VolPrevValue)
     {
      Comment("Buy Signal during uptrend",
              "\n","Current high is: ",CurrentHighValue,"\n","Previous high is: ",PrevHighValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }

//no signal
   if(CurrentHighValue>PrevHighValue&&VolCurrentValue<VolPrevValue)
     {
      Comment("Current high is: ",CurrentHighValue,"\n","Previous high is: ",PrevHighValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }
  }
//+------------------------------------------------------------------+

Qué hemos añadido a este código:

Ahora, creamos los arrays de volúmenes y precios usando las funciones adecuadas: double para el array de volúmenes, como hicimos antes, y MqlRates para el array de precios que almacena el precio, el volumen y el spread.

   MqlRates PriceArray[];
   double VolArray[];

Luego, rellenamos el array de precios utilizando la función CopyRates después de crear una variable entera para los datos:

   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);

Calculamos los máximos actuales y anteriores:

   double CurrentHighValue=NormalizeDouble(PriceArray[2].high,5);
   double PrevHighValue=NormalizeDouble(PriceArray[1].high,5);
   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue=NormalizeDouble(VolArray[1],5);

Condiciones de la estrategia de acuerdo con los máximos y los volúmenes:

Señal de compra:

   if(CurrentHighValue>PrevHighValue&&VolCurrentValue>VolPrevValue)
     {
      Comment("Buy Signal during uptrend",
              "\n","Current high is: ",CurrentHighValue,"\n","Previous high is: ",PrevHighValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }

Sin señal

   if(CurrentHighValue>PrevHighValue&&VolCurrentValue<VolPrevValue)
     {
      Comment("Current high is: ",CurrentHighValue,"\n","Previous high is: ",PrevHighValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }

Después de realizar la compilación, el asesor experto aparecerá en la ventana del Navegador en MetaTrader 5:

Indicador Volumes en el Navegador 4

Para ejecutar este asesor y que genere automáticamente señales según la estrategia, clicaremos dos veces en el archivo y se abrirá la siguiente ventana:

Ventana del sistema Price and Vol - Uptrend

Clique en Aceptar y el asesor se ejecutará en el gráfico:

Sistema Price and Vol - Uptrend en el gráfico

A continuación, mostramos un ejemplo de señales generadas a partir de la estrategia Price and Vol - Uptrend, con la ventana de datos:

Señal de compra:

Datos actuales:

Price_Vol - Uptrend compra - valores actuales

Datos anteriores:

Price_Vol - Uptrend compra - valores anteriores

Sin señal

Datos actuales:

Price_Vol - Uptrend - sin señal y valores iniciales

Datos anteriores:

Price_Vol - Uptrend - sin señal y valores anteriores

  • Estrategia cuatro: Precio y Volume - tendencia bajista

A continuación, mostramos el código completo para crear un sistema basado en la cuarta estrategia que hemos analizado anteriormente:

//+------------------------------------------------------------------+
//|                                        Price&Vol - Downtrend.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
//Create arrays for price & Volume
   MqlRates PriceArray[];
   double VolArray[];

//filling price array with data
   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);

//sorting arrays from the current data
   ArraySetAsSeries(VolArray,true);

//defining Volume
   int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

//filling the array
   CopyBuffer(VolDef,0,0,3,VolArray);

//calculating current and previous of lows and volume
   double CurrentLowValue=NormalizeDouble(PriceArray[2].low,5);
   double PrevLowValue=NormalizeDouble(PriceArray[1].low,5);
   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue=NormalizeDouble(VolArray[1],5);

//Conditions of short signal
//short signal
   if(CurrentLowValue<PrevLowValue&&VolCurrentValue>VolPrevValue)
     {
      Comment("Short Signal during downtrend",
              "\n","Current low is: ",CurrentLowValue,"\n","Previous low is: ",PrevLowValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }

//no signal
   if(CurrentLowValue<PrevLowValue&&VolCurrentValue<VolPrevValue)
     {
      Comment("Current low is: ",CurrentLowValue,"\n","Previous low is: ",PrevLowValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }
  }
//+------------------------------------------------------------------+

Qué hemos cambiado en el código:

Las condiciones para generar las señales basadas en la estrategia Price and Vol - downtrend:

Señal corta:

   if(CurrentLowValue<PrevLowValue&&VolCurrentValue>VolPrevValue)
     {
      Comment("Short Signal during downtrend",
              "\n","Current low is: ",CurrentLowValue,"\n","Previous low is: ",PrevLowValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }

 Sin señal

   if(CurrentLowValue<PrevLowValue&&VolCurrentValue<VolPrevValue)
     {
      Comment("Current low is: ",CurrentLowValue,"\n","Previous low is: ",PrevLowValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }

Después de realizar la compilación, el asesor experto aparecerá en la ventana del Navegador en MetaTrader 5:

Indicador Volumes en el Navegador 5

Iniciamos el programa clicando dos veces o arrastrando, y se abrirá una ventana como esta:

Ventana del sistema Price_Vol - Downtrend

Clique en Aceptar y el asesor se ejecutará en el gráfico:

Sistema Price y Vol - Downtrend en el gráfico

A continuación, mostramos un ejemplo de las señales generadas, con la correspondiente ventana para los datos, tanto actuales como anteriores.

Señal corta:

Datos actuales:

Price_Vol - Downtrend - señal de transacción en corto y valores actuales

Datos anteriores:

Price_Vol - Downtrend - señal de transacción en corto y valores anteriores

Sin señal

Datos actuales:

Price_Vol - Downtrend - sin señal y valores actuales

Datos anteriores:

Price_Vol - Downtrend - sin señal y valores anteriores

  • Estrategia cinco: MA y Volumes

Basándonos en esta estrategia, podemos crear un sistema comercial con el siguiente código:

//+------------------------------------------------------------------+
//|                                              MA&Vol Strategy.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
//Create arrays for MA & Volume
   double MAShortArray[],MALongArray[];
   double VolArray[];

//sorting arrays from the current data
   ArraySetAsSeries(MAShortArray,true);
   ArraySetAsSeries(MALongArray,true);
   ArraySetAsSeries(VolArray,true);

//defining MA & Volume
   int MAShortDef = iMA(_Symbol, _Period, 10, 0, MODE_SMA, PRICE_CLOSE);
   int MALongDef = iMA(_Symbol, _Period, 24, 0, MODE_SMA, PRICE_CLOSE);
   int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

//filling arrays
   CopyBuffer(MAShortDef,0,0,3,MAShortArray);
   CopyBuffer(MALongDef,0,0,3,MALongArray);
   CopyBuffer(VolDef,0,0,3,VolArray);

//calculating MA && current volume values
   double MAShortCurrentValue=NormalizeDouble(MAShortArray[0],6);
   double MAShortPrevValue=NormalizeDouble(MAShortArray[1],6);
   double MALongCurrentValue=NormalizeDouble(MALongArray[0],6);
   double MALongPrevValue=NormalizeDouble(MALongArray[1],6);
   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue=NormalizeDouble(VolArray[1],5);

//conditions of buy and short signals
//buy signal
   if(MAShortCurrentValue>MALongCurrentValue&&MAShortPrevValue<MALongPrevValue
      &&VolCurrentValue>VolPrevValue)
     {
      Comment("Buy signal");
     }

//short signal
   if(MAShortCurrentValue<MALongCurrentValue&&MAShortPrevValue>MALongPrevValue
      &&VolCurrentValue>VolPrevValue)
     {
      Comment("Short signal");
     }
  }
//+------------------------------------------------------------------+

Qué hemos cambiado en el código:

Creamos arrays para la media móvil corta, la media móvil larga y el volumen:

   double MAShortArray[],MALongArray[];
   double VolArray[];

Clasificamos estos arrays:

   ArraySetAsSeries(MAShortArray,true);
   ArraySetAsSeries(MALongArray,true);
   ArraySetAsSeries(VolArray,true);

Definimos las medias móviles (MA) cortas y largas usando la función iMA, que retorna el manejador del indicador MA, sus parámetros (símbolo, periodo, periodo medio, desplazamiento horizontal, tipo de suavizado, que es el tipo de MA, precio aplicado), y también definimos el volumen usando la función iVolumes, como hicimos antes:

   int MAShortDef = iMA(_Symbol, _Period, 10, 0, MODE_SMA, PRICE_CLOSE);
   int MALongDef = iMA(_Symbol, _Period, 24, 0, MODE_SMA, PRICE_CLOSE);
   int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

Rellenamos los arrays:

   CopyBuffer(MAShortDef,0,0,3,MAShortArray);
   CopyBuffer(MALongDef,0,0,3,MALongArray);
   CopyBuffer(VolDef,0,0,3,VolArray);

Calculamos los valores actuales de la MA corta, la MA larga y los volúmenes, y también los valores anteriores de la MA corta, la MA larga y los volúmenes:

   double MAShortCurrentValue=NormalizeDouble(MAShortArray[0],6);
   double MAShortPrevValue=NormalizeDouble(MAShortArray[1],6);
   double MALongCurrentValue=NormalizeDouble(MALongArray[0],6);
   double MALongPrevValue=NormalizeDouble(MALongArray[1],6);
   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue=NormalizeDouble(VolArray[1],5);

Las condiciones de las señales generadas para esta estrategia.

Señal de compra:

   if(MAShortCurrentValue>MALongCurrentValue&&MAShortPrevValue<MALongPrevValue
      &&VolCurrentValue>VolPrevValue)
     {
      Comment("Buy signal");
     }

Señal corta:

   if(MAShortCurrentValue<MALongCurrentValue&&MAShortPrevValue>MALongPrevValue
      &&VolCurrentValue>VolPrevValue)
     {
      Comment("Short signal");
     }

Después de realizar la compilación, el asesor experto aparecerá en la ventana del Navegador en MetaTrader 5:

Indicador Volumes en el Navegador 6

Arrastramos y soltamos el programa desde el Navegador al gráfico y se abrirá la ventana de configuración:

Sistema de la estrategia MA_Vol en el gráfico

Ejemplos de señales generadas a partir de esta estrategia.

Señal de compra:

MA_Vol señal de compra

Señal corta:

 MA_Vol señal de apertura de una transacción en corto

 


Conclusión

Espero haber tratado el tema de este útil indicador técnico con la suficiente profundidad y que usted haya aprendido a usar el indicador de volumen para su propio beneficio en el trading. Hoy hemos aprendido qué es el indicador Volumes, qué mide, cómo leer sus magnitudes y cómo utilizarlo; también hemos identificado la diferencia entre el volumen en los mercados de divisas y en el mercado de valores. También hemos explorado algunas estrategias simples basadas en el indicador Volumes:

  • Movimiento según Volumes: información sobre la evolución de los volúmenes, tanto si aumentan como si disminuyen.
  • Fuerza según Volumes: información sobre la fuerza del movimiento del volumen actual en comparación con el valor medio.
  • Precio y Volumes en una tendencia alcista: obtener una señal de compra durante una tendencia alcista basada en el movimiento del precio y el volumen que lo acompaña.
  • Precio y Volumes en una tendencia bajista: obtener una señal de venta durante una tendencia bajista basada en el movimiento del precio y el volumen que lo acompaña.
  • Estrategia de MA y Volumes: generar señales de compra y venta basadas en el cruce de una media móvil y el volumen correspondiente.

Cualquiera de las dos estrategias puede usarse tras ponerla a prueba y optimizarla cuidadosamente. Todas estas estrategias muestran la variedad de formas en que podemos usar las lecturas del indicador Volumes. Además, hemos desarrollado para todas estas estrategias esquemas que nos servirán como una base excelente para crear un sistema comercial que genere automáticamente señales en MetaTrader 5. Luego hemos pasado al tema más interesante, la escritura de sistemas comerciales en MQL5 que puedan generar señales de forma automática y precisa. Estos están pensados para su uso en la plataforma comercial MetaTrader 5.

Una vez más, resultará esencial que ponga a prueba cuidadosamente cualquier nuevo conocimiento antes de aplicarlo a su cuenta real: así se asegurará de que se adapte a su estilo y comprensión del comercio. Al fin y al cabo, lo que funciona para otros no tiene por qué funcionar para usted. También esperamos que el artículo le resulte útil en un sentido práctico y le ayude a encontrar nuevas ideas. También puede intentar combinar este indicador con otras herramientas técnicas, para otorgarle un mayor peso. Además, hemos visto un ejemplo de esto en el artículo: hemos combinado el volumen y una media móvil. Hay muchas combinaciones de este tipo. Si le ha gustado este artículo y lo ha encontrado útil, lea los artículos anteriores de la misma serie para aprender a desarrollar un sistema comercial basado en los indicadores técnicos más populares. Espero que le sean útiles.

Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/articles/11050

Metamodelos en el aprendizaje automático y el trading: Timing original de las órdenes comerciales Metamodelos en el aprendizaje automático y el trading: Timing original de las órdenes comerciales
Metamodelos en el aprendizaje automático: Creación automática de sistemas comerciales sin apenas intervención humana: el Modelo decide por sí mismo cómo y cuándo comerciar.
Experimentos con redes neuronales (Parte 1): Recordando la geometría Experimentos con redes neuronales (Parte 1): Recordando la geometría
Las redes neuronales lo son todo. En este artículo, usaremos la experimentación y enfoques no estándar para desarrollar un sistema comercial rentable y comprobaremos si las redes neuronales pueden ser de alguna ayuda para los comerciantes.
Características del Wizard MQL5 que debe conocer (Parte 1): Análisis de regresión Características del Wizard MQL5 que debe conocer (Parte 1): Análisis de regresión
De manera consciente o inconsciente, el tráder moderno está casi siempre en busca de nuevas ideas, probando constantemente nuevas estrategias, modificándolas y descartando las que han fracasado. Este proceso de investigación requiere mucho tiempo y se ve acompañado por muchos errores. En esta serie de artículos, intentaré demostrar que el Wizard MQL5 es un verdadero apoyo para el tráder. Gracias al Wizard, el tráder podrá ahorrar tiempo a la hora de poner en práctica sus ideas. Asimismo, podrá reducir la probabilidad de que surjan errores por duplicación de código. En lugar de perder el tiempo con el código, los tráders tendrán la posibilidad de poner en práctica su filosofía comercial.
DoEasy. Elementos de control (Parte 8): Objetos básicos WinForms por categorías, controles "GroupBox" y "CheckBox DoEasy. Elementos de control (Parte 8): Objetos básicos WinForms por categorías, controles "GroupBox" y "CheckBox
En este artículo, veremos la creación de los objetos WinForms "GroupBox" y "CheckBox", y crearemos los objetos básicos para las categorías de los objetos WinForms. Todos los objetos que hemos creado hasta ahora son estáticos, es decir, no tienen ninguna funcionalidad para interactuar con el ratón.