Gap - ¿una estrategia rentable o 50/50?

2 enero 2019, 13:03
Vladimir Karputov
1
1 040

Introducción

En el presente artículo vamos a ocuparnos de comprobar los gaps en el marco temporal D1 en los mercados de valores. ¿Con qué frecuencia continúa el mercado moviéndose en la dirección de un gap? ¿Puede virar el mercado después de un gap? Vamos a tratar de contestar a estas preguntas. Para visualizar los resultados se usarán los gráficos personalizados CGraphic. La selección de los símbolos se realiza con la ayuda de la función DLL GetOpenFileName de sistema.


¿Qué mercado elegir?

Conviene destacar de inmediato que el gap nos interesa exclusivamente en el marco D1.

Es obvio que el mayor número de gaps no se da en los símbolos Fórex, si no en el mercado de valores. Aunque sea por el hecho de que los valores se comercian desde la mañana hasta la noche, y no las 24 horas. Para nosotros en concreto, en la búsqueda del gap nos interesan las acciones: estas disponen de una historia muy profunda. En lo que respecta a los futuros, no nos vienen muy bien, ya que tienen una vida útil de 3 o 6 meses, y esto resulta insuficiente al investigar la historia del marco temporal D1.

A la hora de investigar cuántas barras hay del símbolo y el marco temporal D1 actuales en el servidor, se puede usar el script "TestLoadHistory.mq5" del apartado del manual "Organización de acceso a los datos". Ejemplo de comprobación de barras D1 en el símbolo "ABBV":

Symbol ABBV

Fig. 1. Símbolo "ABBV"

Orden de acción:

  1. Primero debemos guardar el script del manual. Para ello, en el editor de código MetaEditor 5 se crea un nuevo script (manual: "Crear script"); es mejor darle al script directamente el nombre "TestLoadHistory.mq5". Ahora debemos copiar el texto del script del manual y pegarlo en el script "TestLoadHistory.mq5" (en este caso, además, el texto del manual deberá sustituir por completo al texto en el script).
  2. Luego compilamos el script resultante (después de la compilación, el script será visible en el terminal, en la ventana "Navegador").
  3. A continuación, iniciamos el script en el terminal MetaTrader 5. Ya que hemos realizado la comprobación para el símbolo "ABBV", esto significa que hay que preparar el gráfico: abrimos el gráfico del símbolo "ABBV" y cambiamos el marco temporal a D1. Tomamos el script desde la ventana "Navegador" y lo trasladamos al gráfico abierto del símbolo "ABBV". En los parámetros del script establecemos el nombre del símbolo "ABBV", elegimos el marco temporal D1 y ponemos la fecha 1970:

Running the script

Fig. 2. Iniciando el script "TestLoadHistory.mq5"

Resultados del funcionamiento del script:

TestLoadHistory (ABBV,D1)       Start loadABBV,Dailyfrom1970.03.16 00:00:00
TestLoadHistory (ABBV,D1)       Loaded OK 
TestLoadHistory (ABBV,D1)       First date 2015.09.18 00:00:00 - 758 bars

la historia comienza a partir del 2015 y contiene 758 barras de D1. Es una tamaño suficiente para el análisis.

Trabajando con un grupo de símbolos

Para analizar y calcular algunos criterios, necesitaremos posibilitar la comparación de los símbolos de un mismo grupo. Normalmente, los símbolos en el terminal MetaTrader 5 ya están distribuidos en grupos (clicando con el botón derecho en la ventana "Observación de mercado" y el punto "Símbolos" o la combinación de teclas "Ctrl" + "U"):

Symbols NASDAQ group (SnP100)

Fig. 3. Símbolos del grupo NASDAQ(SnP100)

En la figura se destaca el grupo "NASDAQ(SnP100)": en este grupo entra el símbolo "ABBV". El método más cómodo para trabajar con un grupo de símbolos es posibilitar el inicio del script en un símbolo de este grupo. De esta forma, para iterar cada grupo será necesario abrir manualmente desde cada grupo el gráfico de un símbolo y después iniciar en el gráfico el script auxiliar "Symbols on symbol tree.mq5", este script recopila todos los símbolos del grupo (nombres de los símbolos) en un archivo aparte.

El script "Symbols on symbol tree.mq5" funciona según el mismo algoritmo: obtenemos la ruta en el árbol de símbolos "SYMBOL_PATH"; a partir de la ruta obtenida seleccionamos el grupo final de símbolos (para este ejemplo, se tratará del grupo "NASDAQ(SnP100)"; elegimos todos los símbolos de este grupo y guardamos el símbolos seleccionado en un archivo. El nombre del archivo es una ruta en el árbol de símbolos en el que todos los símbolos "/" y "\" han sido sustituidos por "_" (la sustitución se realiza automáticamente con el script, y el nombre del archivo también se obtiene de forma automática). Después de sustituir los símbolos para el grupo de símbolos NASDAQ(SnP100)", obtendremos este nombre de archivo: "Stock Markets_USA_NYSE_NASDAQ(SnP100)_.txt".

¿Para qué necesitamos ubicar cada grupo en un archivo aparte? De esta forma, podremos simplemente leer los nombres de los símbolos desde los archivos de los grupos sin tener que iterar todos los símbolos e investigar la dirección del gap. El script de servicio "Symbols on symbol tree.mq5" nos ahorra la rutina de tener que seleccionar manualmente los símbolos de un grupo de símbolos concreto.


Script "Symbols on symbol tree.mq5"

Vamos a ver con mayor detenimiento el funcionamiento del script.

ATENCIÓN: ¡solo el texto "Everything is fine. There are no errors" en la pestaña "Expertos" garantiza que el script ha funcionado sin errores y que el archivo obtenido con los símbolos se puede utilizar para trabajar con el asesor!

Para abreviar el código de las operaciones con archivos se incluye la clase CFileTxt, mientras que el trabajo con el archivo de texto lo realiza m_file_txt, un objeto de la clase CFileTxt. El script hace su trabajo en siete pasos:

//+------------------------------------------------------------------+
//|                                       Symbols on symbol tree.mq5 |
//|                              Copyright © 2018, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
//---
#include <Files\FileTxt.mqh>
CFileTxt       m_file_txt;       // file txt object
//---
string   m_file_name="";         // File name
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- STEP 1
   string current_path="";
   if(!SymbolInfoString(Symbol(),SYMBOL_PATH,current_path))
     {
      Print("ERROR: SYMBOL_PATH");
      return;
     }
//--- STEP 2
   string sep_="\\";                 // A separator as a character 
   ushort u_sep_;                    // The code of the separator character 
   string result_[];                 // An array to get strings 
//--- Get the separator code 
   u_sep_=StringGetCharacter(sep_,0);
//--- Split the string to substrings 
   int k_=StringSplit(current_path,u_sep_,result_);
//--- STEP 3
//--- Now output all obtained strings 
   if(k_>0)
     {
      current_path="";
      for(int i=0;i<k_-1;i++)
         current_path=current_path+result_[i]+sep_;
     }
//--- STEP 4
   string symbols_array[];
   int symbols_total=SymbolsTotal(false);
   for(int i=0;i<symbols_total;i++)
     {
      string symbol_name=SymbolName(i,false);
      string symbol_path="";
      if(!SymbolInfoString(symbol_name,SYMBOL_PATH,symbol_path))
         continue;
      if(StringFind(symbol_path,current_path,0)==-1)
         continue;

      int size=ArraySize(symbols_array);
      ArrayResize(symbols_array,size+1,10);
      symbols_array[size]=symbol_name;
     }
//--- STEP 5
   int size=ArraySize(symbols_array);
   if(size==0)
     {
      PrintFormat("ERROR: On path \"%s\" %d symbols",current_path,size);
      return;
     }
   PrintFormat("On path \"%s\" %d symbols",current_path,size);
//--- STEP 6
   m_file_name=current_path;
   StringReplace(m_file_name,"\\","_");
   StringReplace(m_file_name,"/","_");
   if(m_file_txt.Open("5220\\"+m_file_name+".txt",FILE_WRITE|FILE_COMMON)==INVALID_HANDLE)
     {
      PrintFormat("ERROR: \"%s\" file in the Data Folder Common folder is not created",m_file_name);
      return;
     }
//--- STEP 7
   for(int i=0;i<size;i++)
      m_file_txt.WriteString(symbols_array[i]+"\r\n");
   m_file_txt.Close();
   Print("Everything is fine. There are no errors");
//---
  }
//+------------------------------------------------------------------+

Algoritmo de funcionamiento del script:

  • STEP 1: para el símbolo actual se define SYMBOL_PATH, la ruta en el árbol de símbolos;
  • STEP 2: la ruta obtenida es dividida en subcadenas con el separador "\";
  • STEP 3: montamos de nuevo la ruta actual, pero ya sin la última subcadena, puesto que la última subcadena es el nombre del símbolo;
  • STEP 4: ciclo por todos los símbolos disponibles; si para un símbolo la ruta en el árbol de símbolos coincide con la ruta actual, seleccionamos el nombre del símbolo y lo añadimos a la matriz de símbolos detectados;
  • STEP 5: comprobamos el tamaño de la matriz de símbolos detectados;
  • STEP 6: formamos el nombre del archivo (eliminamos del nombre los símbolos "/" y "\", creamos el archivo;
  • STEP 7: escribimos en el archivo nuestra matriz de símbolos detectados y cerramos el archivo.

Preste atención a STEP 6: el archivo se crea en la carpeta "5220", en el catálogo de archivos generales (se usa la bandera FILE_COMMON).

Asimsimo, es necesario asegurarse de que el script funcione sin errores: en la pestaña "Expertos" deberá aparecer el rótulo "Everything is fine. There are no errors. Create file:". Y la línea siguiente se mostrará el nombre del archivo: podemos copiar este nombre y pegarlo en el script "Getting gap statistics ...". Más abajo tenemos un ejemplo de creación correcta de un archivo:

On path "Stock Markets\USA\NYSE/NASDAQ(SnP100)\" 100 symbols
Everything is fine. There are no errors. Create file:
Stock Markets_USA_NYSE_NASDAQ(SnP100)_

Como resultado, obtenemos un archivo (en este ejemplo Stock Markets_USA_NYSE_NASDAQ(SnP100)_), en el que, en que cada nueva línea, hay un solo símbolo. Las cinco primeras líneas de este archivo:

AAPL
ABBV
ABT
ACN
AGN

Recopilando datos

La obtención de datos históricos de OHLC según los símbolos y el cálculo estadístico son tareas del script "Getting gap statistics.mq5". De acuerdo con cada símbolo se rellena la estructura SGapStatistics:

   struct SGapStatistics
     {
      string            name;                // symbol name
      int               d1_total;            // total number of D1 bars
      int               gap_total;           // total number of gaps
      int               gap_confirmed;       // gap was confirmed
     };

name — nombre del símbolo
d1_total — número de barras D1 del símbolo
gap_total — número de gaps detectados
gap_confirmed — número de gaps confirmados (por ejemplo, el día ha comenzado con gap hacia arriba o hacia abajo, y el día ha terminado con una barra alcista)

Para obtener los precios OHLC de cada símbolo, la mejor función es "CopyRates". Se usará la tercera forma: de acuerdo con las fechas inicial y final del intervalo de tiempo requerido. Como hora inicial se toma la hora actual calculada del servidor comercial TimeTradeServer más un día; y como fecha final, el 1 de enero de 1970.

Solo queda resolver la cuestión del procesamiento del error (como resultado de la solicitud se retorna "-1") o cómo determinar que, como resultado de la solicitud, no se han retornado todos los datos (por ejemplo, no todos los datos han sido descargados aún del servidor). Podemos tomar el camino sencillo (solicitud — pausa N — segundos — nueva solicitud) o el camino correcto. El camino correcto se basa en el procesamiento del script "TestLoadHistory.mq5" del apartado del manual de usuario "Organización de acceso a los datos".

Los resultados de la ejecución de la solicitud del script se muestran más abajo:

   switch(res) 
     { 
      case -1 : Print("Símbolo desconocido",InpLoadedSymbol);                        break; 
      case -2 : Print("Se han solicitado más barras de las que se pueden representar en el gráfico"); break; 
      case -3 : Print("La ejecución ha sido interrumpida por el usuario");                    break; 
      case -4 : Print("El indicador no debe cargar sus propios datos");          break; 
      case -5 : Print("La carga no ha tenido éxito");                              break; 
      case  0 : Print("Todos los datos han sido cargados");                                      break; 
      case  1 : Print("Ya hay datos suficientes en la serie temporal");               break; 
      case  2 : Print("La serie temporal se ha construido a partir de los datos disponibles en el terminal");         break; 
      default : Print("El resultado de la ejeución es indeterminado"); 
     }

es decir, un resultado de ejecución menor a cero supone un error. Entonces el esquema de funcionamiento será el siguiente: abrimos el archivo con los símbolos y realizamos una solicitud sobre cada símbolo. Sumamos los resultados negativos. Pero si hay aunque sea un resultado negativo, mostraremos un mensaje sobre la presencia de problemas durante las solicitudes. En tal caso, el usuario deberá iniciar el script de nuevo (lo más probable es que la historia ya se haya cargado para este momento). Si no hay errores, obtenemos los datos de OHLC y calculamos el número de gaps.


Script "Getting gap statistics.mq5"

Este script muestra las estadísticas de los gaps en la pestaña "Expertos" del terminal. Aquí y en lo sucesivo, tendremos la formulación "Confirmación del gap". Un gap confirmado significa que la barra diaria se ha cerrado en la dirección del gap, y un gap no confirmado, que la barra se ha cerrado en la dirección opuesta al gap:


Gaps

Fig. 4. Gaps confirmados y no confirmados

Tiene un parámetro de entrada "File name", que es precisamente el nombre del archivo formado por el script auxiliar "Symbols on symbol tree.mq5" (si usted aún recuerda, este archivo se crea en la carpeta general en el directorio 5220). El nombre del archivo se introduce sin indicar el directorio y la extensión, por ejemplo:

Getting gap statistics Inputs

Fig. 5. Parámetro de entrada del script "Getting gap statistics"

De esta forma, para obtener la estadísticas será necesario ejecutar varios pasos:

  1. Decidimos para qué grupo de símbolos de van a calcular los gaps
  2. Seleccionamos en el grupo elegido cualquier símbolo y abrimos el gráfico del símbolo seleccionado
  3. Colocamos en el gráfico abierto el script "Symbols on symbol tree.mq5", como resultado, se creará un archivo con todos los símbolos del grupo elegido. Es necesario comprobar que no haya errores durante el funcionamiento del script: en la pestaña "Expertos" deberá aparecer el rótulo "Everything is fine. There are no errors".
  4. Debemos colocar en el gráfico el script "Getting gap statistics.mq5"

Como resultado, en la pestaña "Expertos" encontraremos las siguientes estadísticas sobre el número de gaps. Aspecto para los cinco primeros símbolos:

      [name] [d1_total] [gap_total] [gap_confirmed]
[ 0] "AAPL"        7238        3948            1640
[ 1] "ABBV"         759         744             364
[ 2] "ABT"          762         734             374
[ 3] "ACN"          759         746             388
[ 4] "AGN"          761         754             385

Ahora con CGraphic

Mostrar toda la información en la pestaña "Expertos" no resulta muy informativo, por eso el siguiente script "Getting gap statistics CGraphic.mq5", para la muestra de gráficos, usará gráficos personalizados CGraphic. El script tiene los siguientes parámtros de entrada:

  • "File name" — nombre del archivo con los símbolos (este archivo debe ser creado anteriormente con la ayuda del script "Symbols on symbol tree.mq5")
  • "Log CheckLoadHistory" — mostrar/no mostrar los resultados de la carga de la historia de los símbolos en la pestaña "Expertos"
  • "Log Statistics" — mostrar/no mostrar las estadísticas de los gaps en la pestaña "Expertos

El resultado del funcionamiento es un gráfico con el número (en tanto por ciento) de gaps confirmados:

Getting gap statistics CGraphic

Fig. 6. Resultado del funcionamiento del script "Getting gap statistics CGraphic.mq5"

En la figura se marcan con números:

  • "1" — nombre de la línea de los gaps confirmados
  • "2" — escala porcentual
  • "3" — nombre del archivo del que se han tomado los símbolos

En el gráfico podemos ver que los valores de los gaps oscilan cerca de la marca del 50%, más menos un 6% (un 6% es el máximo), aunque hay tres valores atípicos menores al 42%. Estos tres valores atípicos con confirmación de gaps inferiores al 42% indican que los tres símbolos tienen una probabilidad del 58% de que la barra diaria vaya en contra de la tendencia.

Ahora podemos comprobar cualquier grupo de símbolos Stock Markets\RussiaMICEX20. Resultado del funcionamiento del script "Getting gap statistics CGraphic.mq5" para el grupo Stock Markets\RussiaMICEX20:

Stock Markets_Russia_MICEX20_

Fig. 7. Estadísticas de los gaps para el grupo Stock Markets\RussiaMICEX20

Aquí vemos dos valores atípicos. Pero en la versión actual no es posible conectar el dibujo y el símbolo. Esto significa que deberemos mejorar un poco el script.


Script "Getting gap statistics CGraphic 2.mq5

Cambios: en la versión 2.0, en la pestaña "Expertos" se mostrarán en tanto por ciento las estadísticas de los gaps confirmados. Gracias a ello, si tenemos activado el ajuste "Log Statistics" para el grupo Stock Markets\RussiaMICEX20, podremos encontrar con facilidad los dos símbolos anómalos:

          [name] [d1_total] [gap_total] [gap_confirmed] [confirmed_per]
***
[14] "NVTK.MM"          757         737             347           47.08
[15] "PIKK.MM"          886         822             282           34.31
[16] "ROSN.MM"          763         746             360           48.26
[17] "RSTI.MM"          775         753             357           47.41
[18] "RTKM.MM"          753         723             324           44.81
[19] "SBER.MM"          762         754             400           53.05
[20] "SBER_p.MM"        762         748             366           48.93
[21] "SNGS.MM"          762         733             360           49.11
[22] "TATN.MM"          765         754             370           49.07
[23] "SNGS_p.MM"        751         708             305           43.08
[24] "URKA.MM"          765         706             269           38.10
[25] "VTBR.MM"          763         743             351           47.24
[26] "RASP.MM"          778         756             354           46.83

Para los símbolos "PIKK.MM" 34% y para "URKA.MM", un 38% de gaps confirmados significa que en estos símbolos, con una probabilidad del 66% y el 62% respectivamente, la barra diaria se cerrará contra el gap.


Limitación en el número de símbolos (instrumentos) en el archivo

Al analizar diferentes grupos de símbolos hemos encontrado grupos en los que se contienen más de mil símbolos. Resulta que trabajar con un conjunto tan grande es muy incómodo: el proceso de adición de semejante cantidad de símbolos a la ventana "Observación de mercado" dura mucho tiempo, y el gráfico resultante se hace ilegible, hay demasiados datos, y están ubicados demasiado cerca unos respecto a otros.

Por eso, hemos decido modernizar el script "Symbols on symbol tree.mq5", y escribir la versión "Symbols on symbol tree 2.mq5". En la versión 2, el número máximo de símbolos en el archivo no puede ser superior a 200, y al nombre del archivo se añade el número de parte. Por ejemplo, en el grupo de símbolos "Stock Markets\USA\NYSE/NASDAQ(SnP100)\" se encuentran 100 símbolos, esto significa que solo habrá una parte, y el nombre del archivo tendrá el aspecto siguiente: "Stock Markets_USA_NYSE_NASDAQ(SnP100)_part_0.txt".


Seleccionando archivos con la ventana de diálogo de sistema "Abrir archivo"

Tras trabajar varios días con los scripts de este artículo, hemos llegado a la conclusión de que introducir el nombre de un archivo en los parámetros de entrada del script "Getting gap statistics CGraphic 2.mq5" es muy incómodo. Hemos tenido que realizar varias manipulaciones: abrir la carpeta general de todos los terminales, copiar el nombre del archivo y después pegar el nombre copiado del archivo en el script.

Por eso la elección del archivo se ha realizado con la ayuda de la función DLL GetOpenFileName de sistema. Para ello, incluimos el archivo "GetOpenFileNameW.mqh". La función "OpenFileName" de este archivo retorna la ruta completa del archivo *.txt elegido, por ejemplo, puede tratarse de una ruta así de larga: "C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\Common\Files\5220\Stock Markets_USA_NYSE_NASDAQ(SnP100)_part_0.txt". Solo queda copiar de esta ruta el nombre del archivo.

El script "Getting gap statistics CGraphic 3.mq5" usa la función DLL GetOpenFileName:

Allow DLL

Fig. 8. Solicitud de permiso de DLL al iniciar el script "Getting gap statistics CGraphic 3.mq5"

, y así se elige el archivo con la ayuda de la ventana de diálogo de sistema "Abrir archivo":

File select

Fig. 9. Elegir archivo


Estadísticas sobre otros valores

Ahora podemos reunir las estadísticas de los gaps para otros grupos de símbolos.


Grupo Stock Markets\USA\NYSE\NASDAQ(ETFs)

Los símbolos del grupo se han dividido en siete archivos:

Stock Markets_USA_NYSE_NASDAQ(ETFs)_part_0

Fig. 10. Grupo Stock Markets\USA\NYSE\NASDAQ(ETFs), parte 0


Stock Markets_USA_NYSE_NASDAQ(ETFs)_part_1

Fig. 11. Grupo Stock Markets\USA\NYSE\NASDAQ(ETFs), parte 1


Stock Markets_USA_NYSE_NASDAQ(ETFs)_part_2

Fig. 12. Grupo Stock Markets\USA\NYSE\NASDAQ(ETFs), parte 2


Stock Markets_USA_NYSE_NASDAQ(ETFs)_part_3

Fig. 13. Grupo Stock Markets\USA\NYSE\NASDAQ(ETFs), parte 3


Stock Markets_USA_NYSE_NASDAQ(ETFs)_part_4

Fig. 14. Grupo Stock Markets\USA\NYSE\NASDAQ(ETFs), parte 4


Stock Markets_USA_NYSE_NASDAQ(ETFs)_part_5

Fig. 15. Grupo Stock Markets\USA\NYSE\NASDAQ(ETFs), parte 5


Stock Markets_USA_NYSE_NASDAQ(ETFs)_part_6

Fig. 16. Grupo Stock Markets\USA\NYSE\NASDAQ(ETFs), parte 6


Grupo "Stock Markets\United Kngdom\LSE Int. (ADR/GDR)\"

Stock Markets_United Kngdom_LSE Int. (ADR_GDR)_

Fig. 17. Grupo "Stock Markets\United Kngdom\LSE Int. (ADR/GDR)\"


Grupo "Stock Markets\United Kngdom\LSE (FTSE350)\"

En este grupo hay 350 símbolos, de acuerdo con este símbolo, están divididos en dos partes.

Stock Markets_United Kngdom_LSE (FTSE350)_part_0

Fig. 18. Grupo "Stock Markets\United Kngdom\LSE (FTSE350)\", parte 0


Stock Markets_United Kngdom_LSE (FTSE350)_part_1

Fig. 19. Grupo "Stock Markets\United Kngdom\LSE (FTSE350)\", parte 1


Grupo "Stock Markets\Germany\XETRA (IBIS)\Dax100\"

Stock Markets_Germany_XETRA (IBIS)_Dax100_part_0

Fig. 20. Grupo "Stock Markets\Germany\XETRA (IBIS)\Dax100\"


Grupo "Stock Markets\France\Eurnext (CAC40)\"

Stock Markets_France_Eurnext (CAC40)_part_0

Fig. 21. Grupo "Stock Markets\France\Eurnext (CAC40)\"

Conclusión

Al realizar la investigación de varios mercados de valores, hemos notado que después del gap, la probabilidad de continuación del movimiento y la probabilidad de viraje en muchos casos es cercana al 50%, es decir, tratar de captar un gap tiene unas posibilidades de 50/50. Pero en esta caso, además, hay valores del mercado que tienen una probabilidad bastante superior al 65% (tanto de continuación, como de viraje). Es precisamente en estos valores en los que podemos apoyarnos a la hora de comerciar con gaps.

Hemos adjuntado al artículo un directorio con los scripts descritos en el artículo:

Nombre del scriptDescripción
 Symbols on symbol tree.mq5 Script auxiliar. Define un grupo en el árbol de símbolos y guarda todos los símbolos de este grupo en un archivo en la carpeta general, en el directorio 5220
 Symbols on symbol tree 2.mq5  Script auxiliar. Define un grupo en el árbol de símbolos y guarda todos los símbolos de este grupo en un archivo en la carpeta general, en el directorio 5220. Divide un grupo de símbolos en archivos de 200 símbolos.
 Getting gap statistics.mq5 El script carga los símbolos de un archivo creado por el script auxiliar y muestra en la pestaña "Expertos" las estadísticas de los gaps
 Getting gap statistics CGraphic.mq5 El script carga los símbolos de un archivo creado por el script auxiliar y muestra las estadísticas de los gaps en forma de gráfico, se usan los gráficos personalizados CGraphic
  Getting gap statistics CGraphic 2.mq5 El script carga los símbolos de un archivo creado por el script auxiliar y muestra las estadísticas de los gaps en forma de gráfico, se usan los gráficos personalizados CGraphic. Las estadísticas en la pestaña "Expertos" también se muestran en tanto por ciento.
  Getting gap statistics CGraphic 3.mq5 El script carga los símbolos de un archivo creado por el script auxiliar y muestra las estadísticas de los gaps en forma de gráfico, se usan los gráficos personalizados CGraphic. Las estadísticas en la pestaña "Expertos" también se muestran en tanto por ciento. Para elegir el archivo con los símbolos se usa la ventana de diálogo de sistema "Abrir archivo" 
  GetOpenFileNameW.mqh Archivo de inclusión que permite trabajar con la ventana de diálogo de sistema "Abrir archivo"  


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

Archivos adjuntos |
MQL5.zip (20.34 KB)
Raul Gomez Sanchez
Raul Gomez Sanchez | 2 ene. 2019 en 19:25

Muy buen artículo Vladimir. Yo me dedico a operar gaps, mas de forma automatizada que manual con mi propio EA, y tengo que decir:

Estoy deacuerdo contigo en que  "después de la aparición del gap, la probabilidad de continuación del movimiento y la probabilidad de viraje en muchos casos es cercana al 50%" es decir  una vez que aparece el gap, imagina a las 08:00 en un índice europeo, la probabilidad de que  entre o salga del gap es la misma.

Ahora bien la finalidad del gap es siempre la misima, que cubra su hueco en las primeras horas de mercado, de hecho la probabildiad de que un gap del Dax30, cubra en menos de 1 dia (1 sesion bursatil), en los últimos 3 años, es cercana al 80%. Eso no quiere decir que haya un gap y que cubra al momento. Lo normal, es que ante la aparicion de un gap, el precio siga la tendencia del gap (ejm: ante un gap bajista, lo normal es que el precio caiga poco o mucho, en un % respecto al propio gap), y una vez el precio ha caido, este vire de dirección y acabe tapando su gap. 

Por tanto, para que la cobertura funcione y de beneficio a largo plazo, hay que decidir muy bien los puntos de entrada al gap (esto es lo que hace que el riesgo se pueda reducir drásticamente, y no soportemos oerdidas indecibles, te lo digo por experiencia), ya sea por debajo del precio de apertura, o una vez haya tapado un poco el hueco (importantisimo este valor, ya que un gap puede empezar a cubrir, inclusive llegar a un % de cobertura del 80% y luego virar).

Respecto a los porcentajes, en la propia operativa real, un porcentaje >50% es una ventaja, pero hay que decir que existen estartegias 3:1, donde las pérdidas son muy reducidas y las ganancias amplias, cosas que a los gap les suele venir muy bien.

Lo que yo veo es que el gap, en cierta manera, y según quien lo interprete y como lo plante permite jugar con la estadistica a nuestro favor, pero para ello hay que elegir muy bien los puntos de entrada y de salida de todo gap, asi como el hecho de que un gap muy grande, ni debe ni puede operarse igual que un gap muy pequeño.

Te adjunto un BT de esa operativa, un Dow 30 (modelo de cobertura de gap) y un Eurobund con la otra estategia (gap bajista= precio cae; gap alcista, el precio sube)

Optimización automática de EAs en MetaTrader 5 Optimización automática de EAs en MetaTrader 5

En este artículo se describe el mecanismo de auto-optimización de un experto que funcione en MetaTrader 5.

Métodos de control remoto de EAs Métodos de control remoto de EAs

La principal ventaja de los robots comerciales es su funcionamiento ininterrumpido las 24 horas del día en un servidor VPS remoto. Pero a veces es necesario intervenir en su funcionamiento manualmente, y ahora no disponemos de acceso directo al servidor. ¿Podemos gestionar de forma remota el funcionamiento del asesor? En este artículo se presenta una de las variantes de control de robots a través de comandos externos.

Patrones de viraje: Poniendo a prueba el patrón "Pico/valle doble" Patrones de viraje: Poniendo a prueba el patrón "Pico/valle doble"

En la práctica del comercio, los tráders buscan con frecuencia los puntos de viraje de tendencia, puesto que precisamente en el momento en el que surge una tendencia, el precio tiene el mayor potencial de movimiento. Precisamente por ello, en la práctica del análisis técnico se analizan diferentes patrones de viraje. Uno de los más famosos y más utilizados en el patrón del pico/valle doble. En este artículo ofrecemos una variante de detección automática del patrón, y también ponemos a prueba su rentabilidad con datos históricos.

Reversión: disminuyendo la reducción máxima y simulando otros mercados Reversión: disminuyendo la reducción máxima y simulando otros mercados

En este artículo continuaremos analizando el tema de la reversión. Intentaremos disminuir la reducción máxima del balance hasta un nivel aceptable con los instrumentos analizados anteriormente. También vamos a comprobar si se reduce el beneficio obtenido. Asimismo, comprobaremos cómo funciona la reversión en otros mercados, tales como los mercados de valores, materias primas, índices y ETF, agrario. ¡Atención, el artículo contiene muchas imágenes!