English Русский 中文 Deutsch 日本語 Português
preview
Aprendiendo a diseñar un sistema de trading con la desviación estándar

Aprendiendo a diseñar un sistema de trading con la desviación estándar

MetaTrader 5Trading | 7 septiembre 2022, 17:02
633 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Introducción

Bienvenidos a un nuevo artículo de la serie dedicada a la creación de sistemas comerciales basados en indicadores técnicos populares. Esta vez estudiaremos una nueva herramienta técnica, y veremos cómo se puede usar en el trading y cómo puede resultarnos de utilidad. Para entenderlo mejor, veremos algunas estrategias simples. La herramienta de la que hablaremos es el indicador de desviación estándar. Para estudiar el indicador con mayor detalle, dividiremos nuevamente el trabajo en varias subsecciones:

  1. Definición de la desviación estándar
  2. Estrategia de la desviación estándar
  3. Esquema de desarrollo de la estrategia de desviación estándar
  4. Sistema comercial de la desviación estándar
  5. Conclusión

En la sección "Definición de la desviación estándar", aprenderemos con detalle qué significa dicha desviación, qué hace y cómo se puede calcular manualmente. La información detallada sobre el cálculo nos ayudará a comprender mejor la esencia del indicador y luego nos permitirá usarlo de manera más eficiente. Para una mejor comprensión, analizaremos un ejemplo de cálculo. Luego pasaremos al siguiente tema, en el que aprenderemos a utilizar la desviación estándar usando el ejemplo de estrategias simples basadas en el concepto básico del indicador. Además, desarrollaremos esquemas paso a paso para cada estrategia analizada, que servirán como una base excelente para crear un sistema comercial que generará automáticamente señales de desviación estándar en MetaTrader 5. Y finalmente, veremos la parte más interesante de este artículo: la creación de un sistema comercial basado en las estrategias de indicadores que hemos analizado. Los sistemas resultantes generarán señales de forma automática.

En este artículo, utilizaremos MetaTrader 5 y el MetaEditor incorporado para escribir el código MQL5. Si no sabe cómo instalar MetaTrader 5 o usar el MetaEditor, lea la sección "Escribiendo el código MQL5 en el MetaEditor" de uno de mis artículos anteriores.

Le recomiendo que trate de emular todo lo que lea y estudie. En primer lugar, esto le servirá para comprender el concepto al completo, así como para beneficiarse de los materiales del artículo y, en segundo lugar, lo ayudará a encontrar nuevas ideas. Una vez más, resultará esencial que ponga a prueba cuidadosamente cualquier nuevo conocimiento antes de aplicarlo a su cuenta real, para asegurarse así 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.

¡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.

Comencemos a estudiar un nuevo indicador en nuestro arsenal.


Definición de la desviación estándar

En la primera sección, nos familiarizaremos con la idea misma del indicador de desviación estándar, descubriremos qué mide y cómo podemos calcularlo manualmente. Asimismo, analizaremos el cálculo del indicador con la ayuda de un ejemplo concreto, para una mejor comprensión.

La desviación estándar es un término de la estadística. Mide la varianza alrededor de la media. Pero, ¿qué es la varianza? En términos simples, esta es la diferencia entre cualquier valor real y el promedio. Cuanto mayor sea la varianza, mayor será la desviación estándar. Cuanto menor sea la varianza, menor será la desviación estándar. El indicador de desviación estándar mide la volatilidad del precio.

Ahora veamos cómo se puede calcular el indicador. Para ello, seguiremos estos pasos:

1. Calculamos el valor promedio para el periodo deseado.

2. Calculamos la desviación restando cada precio de cierre del promedio.

3. Elevamos al cuadrado cada desviación calculada.

4. Sumamos las desviaciones al cuadrado y dividimos por el número de valores.

5. Calculamos la desviación estándar como la raíz cuadrada del resultado del cuarto paso.

Veamos el cálculo de todos estos pasos usando un ejemplo. Supongamos que tenemos los siguientes datos para un instrumento:

# Precio de cierre
1 1.05535
2 1.05829
3 1.0518
4 1.04411
5 1.04827
6 1.04261
7 1.04221
8 1.02656
9 1.01810
10 1.01587
11 1.01831

Paso uno: calculamos una media móvil de 10 periodos, suponiendo que todas las MA hasta la décima sean la misma media móvil. Entonces, obtenemos el siguiente resultado del cálculo.

Paso 1

Paso dos: calculamos la desviación. Obtenemos estos resultados.

Paso 2

Paso tres: calculamos las desviaciones al cuadrado.

Paso 3

Paso cuatro: calculamos el valor promedio de la desviación al cuadrado durante 10 periodos.

Paso 4

Paso cinco: calculamos la desviación estándar = raíz cuadrada del resultado del cuarto paso.

Paso 5

Repitiendo todos estos pasos, podemos calcular el indicador de desviación estándar manualmente. Afortunadamente, no necesitamos calcular el indicador manualmente, pues existe uno listo para usar que viene de serie con la plataforma MetaTrader 5. Todo lo que deberemos hacer es elegirlo de la lista con otros indicadores disponibles. Aquí vemos dónde encontrarlo:

En la plataforma comercial MetaTrader 5, seleccionamos el menú "Insertar" --> Indicadores --> Tendencia --> Standard Deviation.

 Inicio del indicador Std Dev

Después de ello, se abrirá una ventana con los parámetros del indicador.

 Parámetros de Std Dev

1 - periodo de cálculo del indicador.

2 - desplazamiento horizontal de la línea del indicador, que podemos configurar si queremos

3 - tipo de media móvil

4 - tipo de precio usado en los cálculos

5 - color de la línea del indicador

6 - estilo de línea del indicador

7 - grosor de la línea del indicador.

Después de configurar los parámetros, el indicador aparecerá en el gráfico como mostramos a continuación.

 Indicador Std Dev en el gráfico

En la figura anterior vemos que el indicador ha sido iniciado en el gráfico y que se muestra en una ventana adicional como una línea dibujada según los valores de la desviación estándar.


Estrategia de la desviación estándar

Después de familiarizarnos con el concepto del indicador y cómo se calcula, vamos a ver cómo se puede usar la desviación estándar. Para ello, analizaremos ejemplos de tres estrategias sencillas. La primera estrategia simple es "Volatilidad de la desviación estándar", para medir la volatilidad del mercado. La segunda estrategia es "Desviación estándar y media móvil". Como su nombre indica, combinaremos dos indicadores y obtendremos señales de compra y venta. La tercera estrategia es "Desviación estándar, volatilidad, media móvil". Primero se valora la volatilidad, y luego se genera una señal de compra o venta.

  • Estrategia uno: Desviación estándar y volatilidad

En esta estrategia, medimos la volatilidad. Para ello, compararemos la desviación estándar actual (Std) y el promedio de las cinco desviaciones anteriores (AVG). Si la desviación estándar actual es mayor que el promedio de los cinco periodos, será una señal de alta volatilidad. Si la desviación estándar actual es menor que el promedio de los cinco periodos, será una señal de baja volatilidad.

Std actual > Std AVG --> alta volatilidad

Std actual < Std AVG --> baja volatilidad

  • Estrategia dos: Desviación estándar y media móvil

Esta estrategia puede generar señales de compra y venta basadas en condiciones determinadas. Si la desviación estándar actual es mayor que el valor anterior y el precio Ask es mayor que la media móvil, será una señal de compra. Si la desviación estándar actual es mayor que el valor anterior y el precio Bid es menor que la media móvil, será una señal de compra.

Std actual > Std anterior y Ask > MA --> Señal de compra

Std actual > Std anterior y Bid < MA --> Señal de venta

  • Estrategia tres: Desviación estándar, volatilidad y media móvil

Esta estrategia generará señales de compra y venta basadas en otras condiciones. Si la desviación estándar actual es mayor que el promedio de los valores anteriores y el precio Ask es mayor que la media móvil, será una señal de compra. Si la desviación estándar actual es mayor que el promedio de los valores anteriores y el precio Bid está por debajo de la media móvil, esto será una señal de compra.

Std actual > Std Avg y Ask > MA --> Señal de compra

Std actual > Std Avg y Bid < MA --> Señal de venta

Estas estrategias son ejemplos simples de cómo usar el indicador de desviación estándar para medir la volatilidad y generar señales de compra y venta basadas en distintas condiciones. También lo hemos usado junto con otros indicadores técnicos para observar la situación del mercado desde varios ángulos a la vez.


Esquema de desarrollo de la estrategia de desviación estándar

A continuación, desarrollaremos esquemas paso a paso para cada una de las estrategias analizadas; esto nos ayudará a desarrollar sistemas comerciales basados en ellas. Este paso es muy importante, ya que ayuda a organizar las ideas de forma que resulte más fácil convertirlas en un sistema comercial. Bien, echemos un vistazo al esquema, o las instrucciones de lo que debe hacer exactamente el programa resultante.

  • Estrategia uno: Desviación estándar y volatilidad

Según esta estrategia, el sistema comercial deberá verificar y comparar constantemente dos valores. Estos son los valores de la desviación estándar actual y el promedio de las cinco desviaciones anteriores. Deberemos determinar cuál de los valores es más alto. Si el actual es mayor que el promedio de cinco periodos, se mostrará un comentario sobre la alta volatilidad y los siguientes valores en el gráfico:

  • High Volatility (alta volatilidad)
  • La desviación estándar actual
  • La desviación estándar promedio de cinco periodos.

Si la Std Dev actual está por debajo del promedio de cinco periodos, se mostrará un comentario sobre la baja volatilidad y los siguientes valores en el gráfico:

  • Low Volatility (baja volatilidad).
  • La desviación estándar actual
  • La desviación estándar promedio de cinco periodos.
La siguiente figura muestra un plan paso a paso de una estrategia simple de desviación estándar y volatilidad.

Esquema de la estrategia: Desviación estándar y volatilidad

  • Estrategia dos: Desviación estándar y media móvil

Según esta estrategia, el sistema comercial deberá verificar y comparar constantemente cuatro valores. Hablamos de los valores de la desviación estándar actual y anterior, el precio Ask y la media móvil. Usando estos valores como base, se deberá determinar si se han formado las condiciones apropiadas para la señal.

Si la desviación estándar actual es mayor que el valor anterior y el precio Ask es mayor que la media móvil, el programa deberá mostrar un comentario en el gráfico con los siguientes valores:

  • La señal de compra
  • La desviación estándar actual
  • El valor anterior de la desviación estándar
  • El valor Ask
  • El valor de la media móvil

Si la desviación estándar actual es mayor que el valor anterior y el precio Bid es menor que la media móvil, el programa deberá mostrar un comentario en el gráfico con los siguientes valores:

  • La señal de venta
  • La desviación estándar actual
  • El valor anterior de la desviación estándar
  • El valor del precio Bid
  • El valor de la media móvil
La siguiente figura muestra un plan paso a paso para una estrategia simple de desviación estándar y media móvil.

 Esquema de la estrategia Simple Std Dev - Std _ MA

  • Estrategia tres: Desviación estándar, volatilidad y media móvil

Según esta estrategia, el sistema comercial deberá verificar y comparar constantemente cuatro valores y, en base a la comparación de estos valores, generar una señal determinada. Estos valores son: la desviación estándar actual, el promedio de desviaciones estándar, el precio Ask y la media móvil.

Si la desviación estándar actual es mayor que el promedio de las desviaciones estándar y el precio Ask es mayor que la media móvil, el programa deberá generar una señal y mostrar un comentario en el gráfico con los siguientes valores:

  • La señal de compra
  • La desviación estándar actual
  • El promedio de desviaciones estándar
  • El valor Ask
  • El valor de la media móvil

Si la desviación estándar actual es mayor que el promedio de las desviaciones estándar y el precio Bid es menor que la media móvil, el programa deberá generar otra señal y, además, mostrar un comentario con los siguientes valores en el gráfico:

  • La señal de venta
  • La desviación estándar actual
  • El promedio de desviaciones estándar
  • El valor del precio Bid
  • El valor de la media móvil
La siguiente figura muestra un plan paso a paso para desarrollar dicha estrategia.

Esquema de la estrategia Simple Std Dev - Std Dev _ AVG _ MA

A continuación, desarrollaremos esquemas paso a paso para cada una de las estrategias analizadas; esto nos ayudará a desarrollar sistemas comerciales basados en ellas. 


Sistema comercial de la desviación estándar

Vamos a ver cómo escribir sistemas comerciales en MQL5 basados en los valores de este indicador, cómo usarlos en MetaTrader 5. Primero, escribiremos un programa simple que muestre un comentario con el valor de la desviación estándar en el gráfico del instrumento deseado. Esto servirá como base para todos los demás sistemas.  

  • Asimismo, crearemos un array usando una función double que representará los valores de coma flotante. El tipo double es uno de los tipos de datos fraccionarios.
double StdDevArray[];
  • Clasificaremos el array de precios creado partiendo de los datos actuales, para ello, usaremos la función ArraySetAsSeries: esta retornará true en caso de éxito o false en caso de fallo (bool). Parámetros de la función ArraySetAsSeries:
    • Array[]
    • Bandera
ArraySetAsSeries(StdDevArray,true);
  • Ahora, creamos una variable de tipo entero StdDevDef para determinar la desviación estándar usando la función iStdDev, que retorna el descriptor del indicador Standard Deviation. Los parámetros de esta función serán:
    • symbol — nombre del símbolo; si especificamos "_Symbol", el indicador se calculará según el símbolo del gráfico actual.
    • period — marco temporal para el cálculo; el valor "_Period" señalará que el indicador se calculará en el marco temporal actual.
    • ma_period — el periodo de la media móvil, usaremos un valor por defecto de 20.
    • ma_shift — si es necesario, podemos configurar el desplazamiento horizontal; lo establecemos en 0.
    • ma_method — tipo de suavizado de la media móvil; usaremos el simple (MODE_SMA).
    • applied_price — determina el tipo de precio utilizado para el cálculo; usaremos el precio de cierre (PRICE_CLOSE).
int StdDevDef = iStdDev(_Symbol,_Period,20,0,MODE_SMA,PRICE_CLOSE);
  • Copiaremos los datos de precio en el array StdDev, usando la función CopyBuffer. Esta retorna la cantidad de datos copiados, o -1 en caso de error. Los parámetros de esta función serán:
    • indicador_handle — manejador del indicador StdDevDef.
    • buffer_num — número del búfer de indicador, lo estableceremos en 0.
    • start_pos — indica la posición del comienzo del cálculo; especificaremos 0.
    • count — cantidad de datos para copiar; indicaremos 3.
    • buffer[] — define el array de precios para copiar; nosotros tenemos StdDevArray.
CopyBuffer(StdDevDef,0,0,3,StdDevArray);
  • Obtenemos el valor de StdDev usando la función de tipo double NormalizeDouble. Para ello, crearemos la variable de tipo double StdDevVal. Parámetros de la función Normalizedouble:
    • value — número normalizado; aquí indicamos StdDevArray[0]
    • digits — número de dígitos decimales; establecemos 6.
double StdDevVal = NormalizeDouble(StdDevArray[0],6);
  • Añadimos la muestra de un comentario al gráfico usando la función Comment. No tiene un valor de retorno, simplemente muestra un comentario en el gráfico del instrumento.
Comment("StdDev Value is",StdDevVal);

 Compilamos el código; no debería haber errores ni advertencias. Después de eso, el asesor compilado debería aparecer en la ventana del Navegador:

Std Dev en el Navegador 1

Lo arrastramos desde el Navegador hasta el gráfico para iniciarlo. Se abrirá una ventana como esta:

Ventana del programa Simple Std Dev

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

 Programa Simple Std Dev en el gráfico

Como podemos ver, ha aparecido una indicación en la esquina superior derecha del gráfico señalando que el asesor está funcionando en el gráfico.

A continuación, le mostramos ejemplos de comentarios generados al probar esta estrategia.

Comentarios de Simple Std Dev

Podemos ver otro ejemplo en la siguiente figura. En el gráfico se inicia un experto de este sistema comercial para la generación automática de señales y, al mismo tiempo, se añade el indicador estándar Standard Deviation. Podemos comprobar que ambos valores StdDev son iguales.

 Valores iguales de Simple Std Dev

 

  • Estrategia uno: Desviación estándar y volatilidad

Ahora vamos a escribir el código para la primera estrategia analizada que muestra la volatilidad del indicador. El código completo de esta estrategia tendrá el aspecto que sigue

//+------------------------------------------------------------------+
//|                                  Simple Std Dev - Volatility.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()
  {
   double StdDevArray[];

   ArraySetAsSeries(StdDevArray,true);

   int StdDevDef = iStdDev(_Symbol,_Period,20,0,MODE_SMA,PRICE_CLOSE);

   CopyBuffer(StdDevDef,0,0,6,StdDevArray);

   double StdDevVal = NormalizeDouble(StdDevArray[0],6);
   double StdDevVal1 = NormalizeDouble(StdDevArray[1],6);
   double StdDevVal2 = NormalizeDouble(StdDevArray[2],6);
   double StdDevVal3 = NormalizeDouble(StdDevArray[3],6);
   double StdDevVal4 = NormalizeDouble(StdDevArray[4],6);
   double StdDevVal5 = NormalizeDouble(StdDevArray[5],6);
   double StdDevAVGVal = ((StdDevVal1+StdDevVal2+StdDevVal3+StdDevVal4+StdDevVal5)/5);

   if(StdDevVal>StdDevAVGVal)
     {
      Comment("High volatility","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Std Dev Avg value is ",StdDevAVGVal);
     }

   if(StdDevVal<StdDevAVGVal)
     {
      Comment("Low volatility","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Std Dev Avg value is ",StdDevAVGVal);
     }

  }
//+------------------------------------------------------------------+

En este código, hemos añadido nuevas partes a las funciones existentes.

Aquí determinaremos no solo el valor Std Dev actual, sino también los cinco valores anteriores usando para ello la misma función de desviación estándar. Sin embargo, el parámetro en NormalizeDouble será diferente.

double StdDevVal1 = NormalizeDouble(StdDevArray[1],6);
double StdDevVal2 = NormalizeDouble(StdDevArray[2],6);
double StdDevVal3 = NormalizeDouble(StdDevArray[3],6);
double StdDevVal4 = NormalizeDouble(StdDevArray[4],6);
double StdDevVal5 = NormalizeDouble(StdDevArray[5],6);

A continuación, deberemos calcular el promedio de los cinco anteriores.

double StdDevAVGVal = ((StdDevVal1+StdDevVal2+StdDevVal3+StdDevVal4+StdDevVal5)/5);

Condiciones de la estrategia.

Si hay alta volatilidad

   if(StdDevVal>StdDevAVGVal)
     {
      Comment("High volatility","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Std Dev Avg value is ",StdDevAVGVal);
     }

Si hay baja volatilidad

   if(StdDevVal<StdDevAVGVal)
     {
      Comment("Low volatility","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Std Dev Avg value is ",StdDevAVGVal);
     }

Después compilaremos el código del asesor, y este aparecerá en la ventana del Navegador, en el terminal de MetaTrader 5:

 Std Dev en el Navegador 2

Clicamos dos veces en el archivo o lo arrastramos y soltamos en el gráfico. Después de eso, la ventana del asesor aparecerá nuevamente:

 Ventana de la estrategia Simple Std Dev - Volatility

Pulsamos OK y el programa (asesor) se iniciará en el gráfico como se muestra en la figura siguiente:

Estrategia Simple Std Dev - Volatility en el gráfico

De nuevo, podemos ver que el asesor se ha iniciado en el gráfico: el icono correspondiente ha aparecido en la esquina superior derecha del gráfico.

Estos son los ejemplos de señales generadas que obtenemos al probar el sistema comercial:

Ejemplo de señal de alta volatilidad

 Simple Std Dev - Volatility - volatilidad alta

En la captura de pantalla se ve cómo se muestra un comentario de tres líneas en la esquina superior izquierda del gráfico:

  • La señal de volatilidad alta
  • La desviación estándar actual
  • El promedio de cinco valores anteriores de desviación estándar

Ejemplo de señal de volatilidad baja

Simple Std Dev - Volatility - volatilidad baja

El comentario de tres líneas se muestra nuevamente en la esquina superior izquierda del gráfico. Esta vez los valores serán:

  • La indicación de volatilidad baja
  • La desviación estándar actual
  • El promedio de cinco valores anteriores de desviación estándar
Básicamente, esta estrategia mide la volatilidad según la desviación estándar y la muestra en un gráfico.
  • Estrategia dos: Desviación estándar y media móvil

A continuación, le mostramos el código de una estrategia que genera señales de compra y venta basadas en la desviación estándar y los valores de la media móvil:

//+------------------------------------------------------------------+
//|                                    Simple Std Dev - Std & MA.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()
  {
   double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
   double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);

   double StdDevArray[];
   double PArray[];

   ArraySetAsSeries(StdDevArray,true);
   ArraySetAsSeries(PArray,true);

   int StdDevDef = iStdDev(_Symbol,_Period,20,0,MODE_SMA,PRICE_CLOSE);
   int MADef = iMA(_Symbol,_Period,10,0,MODE_SMA,PRICE_CLOSE);

   CopyBuffer(StdDevDef,0,0,3,StdDevArray);
   CopyBuffer(MADef,0,0,10,PArray);

   double StdDevVal = NormalizeDouble(StdDevArray[0],6);
   double StdDevVal1 = NormalizeDouble(StdDevArray[1],6);

   double MAValue = NormalizeDouble(PArray[0],6);


   if(StdDevVal>StdDevVal1&&Ask>MAValue)
     {
      Comment("Buy signal","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Previous Std Dev value is ",StdDevVal1,"\n",
              "Ask value is ",Ask,"\n",
              "MA value is ",MAValue);
     }

   if(StdDevVal>StdDevVal1&&Bid<MAValue)
     {
      Comment("Sell signal","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Previous Std Dev value is ",StdDevVal1,"\n",
              "Bid value is ",Bid,"\n",
              "MA value is ",MAValue);
     }

  }

//+------------------------------------------------------------------+

Cuáles son las diferencias en este código:

Hemos determinado los valores Ask y Bid, creando variables double para ellos; asimismo, hemos usado la función NormalizeDouble para retornar un valor double y también hemos usado SymbolInfoDouble como un número normalizado para devolver la propiedad correspondiente de un símbolo en particular. Los parámetros de SymbolInfoDouble son:

  • symbol — nombre del símbolo; nosotros tenemos "_Symbol", es decir, calculamos el indicador según el símbolo del gráfico actual.
  • prop_id — definimos la propiedad. En nuestro caso, será SYMBOL_ASK.
double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);

Creamos otro array de precios.

double PArray[];

Clasificamos el array a partir de los datos actuales.

ArraySetAsSeries(PArray,true);

Determinamos la media móvil usando la función iMA. Para hacer esto, creamos la variable entera MADef.

int MADef = iMA(_Symbol,_Period,10,0,MODE_SMA,PRICE_CLOSE);

Copiamos los datos de precio en el array creado.

CopyBuffer(MADef,0,0,10,PArray);

Determinamos el valor anterior de Std Dev.

double StdDevVal1 = NormalizeDouble(StdDevArray[1],6);

Determinamos el valor de la media móvil.

double MAValue = NormalizeDouble(PArray[0],6);

Condiciones de la estrategia.

Si hay una señal de compra:

   if(StdDevVal>StdDevVal1&&Ask>MAValue)
     {
      Comment("Buy signal","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Previous Std Dev value is ",StdDevVal1,"\n",
              "Ask value is ",Ask,"\n",
              "MA value is ",MAValue);
     }

Si hay una señal de venta:

   if(StdDevVal>StdDevVal1&&Bid<MAValue)
     {
      Comment("Sell signal","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Previous Std Dev value is ",StdDevVal1,"\n",
              "Bid value is ",Bid,"\n",
              "MA value is ",MAValue);
     }

Después compilamos el código del asesor, y este aparecerá en la ventana del Navegador, en el terminal de MetaTrader 5:

 Std Dev en el Navegador 3

Clicamos dos veces sobre el archivo o lo arrastramos y lo soltamos para iniciar el asesor. Se abrirá la ventana de inicio del experto:

Ventana del programa Simple Std Dev MA

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

Programa Simple Std Dev en el gráfico

A continuación, le mostramos ejemplos de señales generadas por esta estrategia durante las pruebas.

Señal de compra:

 Simple Std Dev - Std _ MA - señal de compra

Además de la señal de compra en sí, en la esquina superior izquierda, en los comentarios del gráfico, se muestran valores adicionales:

  • La señal de compra
  • La desviación estándar actual
  • El valor anterior de la desviación estándar
  • El valor Ask
  • El valor MA

Si hay una señal de venta:

 Simple Std Dev - Std _ MA - señal de venta

En la esquina superior izquierda del gráfico se muestra un comentario que consta de cinco líneas:

  • La señal de venta
  • La desviación estándar actual
  • El valor anterior de la desviación estándar
  • El valor del precio Bid
  • El valor MA

Este era el código de una estrategia que mide la volatilidad según la desviación estándar, y que también comprueba la posición de los precios Ask y Bid en relación con la media móvil y genera la señal correspondiente: compra o venta.

  • Estrategia tres: Desviación estándar, volatilidad y media móvil

El código completo del sistema comercial que opera según esta estrategia se ve así:

//+------------------------------------------------------------------+
//|                  Simple Std Dev - Std Dev & AVG Std Dev & MA.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()
  {
   double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
   double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
   
   double StdDevArray[];
   double PArray[];

   ArraySetAsSeries(StdDevArray,true);
   ArraySetAsSeries(PArray,true);

   int StdDevDef = iStdDev(_Symbol,_Period,20,0,MODE_SMA,PRICE_CLOSE);
   int MADef = iMA(_Symbol,_Period,10,0,MODE_SMA,PRICE_CLOSE);

   CopyBuffer(StdDevDef,0,0,6,StdDevArray);
   CopyBuffer(MADef,0,0,10,PArray);

   double StdDevVal = NormalizeDouble(StdDevArray[0],6);
   double StdDevVal1 = NormalizeDouble(StdDevArray[1],6);
   double StdDevVal2 = NormalizeDouble(StdDevArray[2],6);
   double StdDevVal3 = NormalizeDouble(StdDevArray[3],6);
   double StdDevVal4 = NormalizeDouble(StdDevArray[4],6);
   double StdDevVal5 = NormalizeDouble(StdDevArray[5],6);
   double StdDevAVGVal = ((StdDevVal1+StdDevVal2+StdDevVal3+StdDevVal4+StdDevVal5)/5);
   double MAValue = NormalizeDouble(PArray[0],6);

   if(StdDevVal>StdDevAVGVal&&Ask>MAValue)
     {
      Comment("Buy signal","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Std Dev Avg value is ",StdDevAVGVal,"\n",
              "Ask value is ",Ask,"\n",
              "MA value is ",MAValue);
     }

   if(StdDevVal>StdDevAVGVal&&Bid<MAValue)
     {
      Comment("Sell signal","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Std Dev Avg value is ",StdDevAVGVal,"\n",
              "Bid value is ",Bid,"\n",
              "MA value is ",MAValue);
     }

  }
  
//+------------------------------------------------------------------+

Qué ha cambiado en el código con respecto al anterior:

Condiciones de la estrategia.

Señal de compra:

   if(StdDevVal>StdDevAVGVal&&Ask>MAValue)
     {
      Comment("Buy signal","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Std Dev Avg value is ",StdDevAVGVal,"\n",
              "Ask value is ",Ask,"\n",
              "MA value is ",MAValue);
     }

Señal de venta:

   if(StdDevVal>StdDevAVGVal&&Bid<MAValue)
     {
      Comment("Sell signal","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Std Dev Avg value is ",StdDevAVGVal,"\n",
              "Bid value is ",Bid,"\n",
              "MA value is ",MAValue);
     }

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

 Std Dev en el Navegador 4

Clicamos dos veces en el archivo o lo arrastramos y soltamos en el gráfico. A continuación, aparecerá la ventana del asesor (en la ventana siempre permitimos el comercio automático para el asesor):

Ventana del programa Simple Std Dev - Std Dev _ AVG _ MA

Pulsamos OK y el programa (asesor) se iniciará en el gráfico como se muestra en la figura siguiente:

 Programa Simple Std Dev - Std Dev _ AVG _ MA en el gráfico

Como podemos ver, ha aparecido una indicación en la esquina superior derecha del gráfico señalando que el asesor está funcionando en el gráfico.

Veamos ejemplos de señales generadas por la estrategia durante la prueba:

Señal de compra:

Simple Std Dev - Std Dev _ AVG _ MA - señal de compra

En la captura de pantalla anterior, en la esquina superior izquierda del gráfico, se muestra un comentario que consta de cinco líneas:

  • La señal de compra
  • La desviación estándar actual
  • El promedio de desviaciones estándar
  • El valor Ask
  • El valor MA

Señal de venta:

 Simple Std Dev - Std Dev _ AVG _ MA - señal de venta

Y de nuevo un comentario en el gráfico, esta vez con la señal de venta y los valores de indicador:

  • La señal de venta
  • La desviación estándar actual
  • El promedio de desviaciones estándar
  • El valor del precio Bid
  • El valor MA

Eso es todo, ya hemos creado sistemas automáticos basados en cada una de las estrategias analizadas. Todos ellos generan señales según las instrucciones mostradas en los esquemas anteriores.


Conclusión

Hemos dedicado este artículo al indicador de desviación estándar. Asimismo, hemos aprendido qué mide, para qué sirve y cómo se calcula, y también hemos visto un ejemplo de cálculo con datos reales. Usando el ejemplo de varias estrategias simples, hemos visto cómo podemos usar la desviación estándar en el comercio. Así, hemos analizado una estrategia que mide la volatilidad según el valor de la desviación estándar. También hemos visto que, en combinación con indicadores adicionales (MA) y otros valores, el indicador se puede usar para generar señales de compra y venta. Después, hemos desarrollado esquemas paso a paso para cada una de las estrategias analizadas, que luego se usan para desarrollar sistemas comerciales basados en ellas. Finalmente, hemos creado sistemas comerciales en MQL5 basados en las estrategias consideradas. Dichos sistemas deben usarse en la plataforma MetaTrader 5 para la generación automática de señales. Los sistemas nos ayudarán a ahorrar tiempo, obtener señales más precisas y evitar los errores derivados de las emociones y la subjetividad: esta es la ventaja de la programación.

Asimismo, resulta de gran utilidad útil combinar este indicador con otras herramientas técnicas para obtener más información y ver el panorama general. Esta es una de las características del análisis técnico en el desarrollo de sistemas comerciales que nos permite obtener mucha más información.

Una vez más, como en artículos anteriores, insistimos en que es muy importante probar a fondo todo el material antes de aplicarlo a una cuenta real. Al fin y al cabo, lo que funciona para otros no tiene por qué funcionar para usted. Esperamos que este artículo lo ayude a mejorar un poco su comercio y le ofrezca nuevas ideas. ¡Le deseo un comercio rentable!

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.

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

Aprendizaje automático y data science (Parte 06): Descenso de gradiente Aprendizaje automático y data science (Parte 06): Descenso de gradiente
El descenso de gradiente juega un papel importante en el entrenamiento de redes neuronales y diversos algoritmos de aprendizaje automático: es un algoritmo rápido e inteligente. Sin embargo, a pesar de su impresionante funcionamiento, muchos científicos de datos todavía lo malinterpretan. Veamos sobre qué tratará este artículo.
Aprendiendo a diseñar un sistema de trading con Williams PR Aprendiendo a diseñar un sistema de trading con Williams PR
Aquí tenemos un nuevo artículo de nuestra serie dedicada a la creación de sistemas comerciales basados en indicadores técnicos populares. En dicha serie, escribimos sistemas en el lenguaje MQL5 para su uso en MetaTrader 5. En este artículo, analizaremos el indicador de rango porcentual de Williams (Williams' %R).
DoEasy. Elementos de control (Parte 9): Reorganizando los métodos de los objetos WinForms, los controles "RadioButton" y "Button" DoEasy. Elementos de control (Parte 9): Reorganizando los métodos de los objetos WinForms, los controles "RadioButton" y "Button"
En este artículo, ordenaremos los nombres de las clases de objeto WinForms y crearemos los objetos WinForms Button y RadioButton.
Aprendiendo a diseñar un sistema de trading con Ichimoku Aprendiendo a diseñar un sistema de trading con Ichimoku
Este artículo continúa la serie sobre la construcción de sistemas comerciales basados en los indicadores más populares. Esta vez hablaremos del indicador Iсhimoku y crearemos un sistema comercial basado en sus indicadores.