English Русский 中文 Deutsch 日本語 Português
Trabajando con archivos. Un ejemplo de visualización de eventos importantes del mercado

Trabajando con archivos. Un ejemplo de visualización de eventos importantes del mercado

MetaTrader 4Ejemplos | 28 enero 2016, 12:07
1 828 0
Andrey Opeyda
Andrey Opeyda


Cualquier trader sabe que es bastante arriesgado abrir una posición basándose solamente en el Análisis Técnico (AT). Es más adecuado abrir una posición combinando el Análisis Técnico y el Análisis Fundamental. Los analistas técnicos suelen consultar un calendario de eventos para hacer un seguimiento de la volatilidad del mercado y no arriesgar innecesariamente sus posiciones. Nos interesa pues mostrar los eventos clave de la jornada de trading en el gráfico del precio. Por ejemplo:


15.05.2006;9:00; Producción industrial M.M ;Japón;Marzo;3.40%;1.00%;
15.05.2006;16:30; Encuesta de la Fed de Nueva York ;USA;Mayo;15.8;15;
15.05.2006;17:00; Flujo neto de capital ;USA;Marzo;86.9Bln;80.0Bln;
16.05.2006;12:30; IPCA Y.Y ;U.K.;Abril;1.80%;2.00%;
16.05.2006;13:00; ZEW de sentimiento económico;Alemania;Mayo;62.7;65;
16.05.2006;16:00; Informe de Wal-Mart Stores;USA;1qtr.;-0.61;-;
16.05.2006;16:30; PPI M.M ;USA;Abril;0.50%;0.70%;
16.05.2006;16:30; PPI ex. Hipotecas y Energía M.M;USA;Abril;0.10%;0.20%;
16.05.2006;16:30; Viviendas nuevas ;USA;Abril;1.960Mln;1.960Mln;
16.05.2006;16:30; Permisos de construcción ;USA;Abril;2.094Mln;2.050Mln;
16.05.2006;17:15; Producción industrial M.M;USA;Abril;0.60%;0.40%;
16.05.2006;17:15; Utilización de la capacidad ;USA;Abril;81.30%;81.50%;
17.05.2006;8:30; Producción industrial (rev.) M.M ;Japón;Marzo;0.20%;0.20%;
17.05.2006;12:30; Desempleo M.M ;U.K.;Abril;+12,600;+5,000;
17.05.2006;12:30; Minutas del Banco de Inglaterra 4.05 ;U.K.;-;-;-;
17.05.2006;13:00; Producción Industrial M.M; Eurozona;Marzo;0.00%;-0.20%;
17.05.2006;13:00; Producción Industrial Y.Y ;Eurozona;Marzo;3.20%;2.80%;
17.05.2006;13:00; IPCA (rev.) Y.Y ;Eurozona;Abril;2.40%;2.40%;
17.05.2006;16:30; IPC M.M;USA;Abril;0.40%;0.50%;
17.05.2006;16:30; IPC ex. Hipotecas y Energía M.M ;USA;Abril;0.30%;0.20%;
18.05.2006;12:30; Ventas al por menor M.M ;U.K.;Abril;0.70%;0.20%;
18.05.2006;12:30; Ventas al por menor Y.Y;U.K.;Abril;2.60%;2.60%;
18.05.2006;16:30; Peticiones iniciales del subsidio de desempleo ;USA;8-14.05;324,000;320,000;
18.05.2006;17:30; Habla Bernanke, el presidente de la Fed ;USA;-;-;-;
18.05.2006;8:00; Indicadores económicos adelantados M.M ;USA;Abril;-0.10%;0.10%;
18.05.2006;20:00; Encuesta de la Fed de Philadelphia ;USA;Mayo;13.2;12;
19.05.2006;1:30; Habla Alan Greenspan;USA;-;-;-;
19.05.2006;3:50; Producto Interior Bruto (PIB) Q.Q ;Japón;1qrt.;1.30%;0.20%;
19.05.2006;8:00; Reunión del Banco de Japón ;Japón;-;-;-;
19.05.2006;13:00; Balance de cuentas ;Eurozona;Marzo;-4.5Bln;-3.0Bln;


Para leer los datos primero hay que abrir el archivo. En MQL4 se utiliza el siguiente operador para este propósito:

int FileOpen( string filename, int mode, int delimiter=';')

cuyos parámetros son: el nombre del archivo, el tipo (un archivo FILE_BIN binario o un archivo de texto FILE_CSV, con separadores), el método de acceso (lectura FILE_READ o escritura FILE_WRITE), y el carácter delimitador de las líneas. Si el archivo se abre correctamente se asigna un valor único al identificador; en caso contrario se asigna el valor -1 al identificador del archivo. La función GetLastError() sirve para mejorar los datos de los errores. La variable FileName se coloca en la cabecera del script.

#property show_inputs
extern string FileName = "semana.txt";
 
…
 
   int handle;
   handle=FileOpen(FileName,FILE_CSV|FILE_READ,';');
   if(handle<1)
    {
     Print("Archivo no encontrado: ", GetLastError());
     return(false);
    }

Así nos conectamos al archivo. El siguiente paso es leer los datos. Leeremos las líneas y luego las convertiremos a los tipos necesarios. A continuación intentaremos escribir el filtro de visualización de eventos. Para ello tan solo necesitamos poner las variables en la cabecera del script. Las variables indicarán si el evento de un determinado país se tiene que mostrar en el gráfico del precio.

    while(!FileIsEnding(handle))
   {
    string sDate=FileReadString(handle); // Fecha
    string sTime=FileReadString(handle); // Hora
    string sCountry=FileReadString(handle); // País
    string sPeriod=FileReadString(handle); // Periodo
    string sDescription=FileReadString(handle); // Descripción
    string sPrev=FileReadString(handle); // Previo    
    string sForecast=FileReadString(handle); // Esperado 
    string sCurrent=FileReadString(handle); // Valor actual
    
    FileReadString(handle); // null
    
    
    Print(
      sDate+" "
      ,sTime+" "
      ,sCountry+" "
      ,sPeriod+" "
      ,sDescription+" "
      ,sForecast+" "
      ,sCurrent+" ");
      
    i++;
    datetime dt = StrToTime(sDate+" "+sTime);
    
         color c = Red;
 
         if (sCountry == "Japón") c = Yellow;
         if (sCountry == "USA") c = Brown;
         if (sCountry == "Alemania") c = Green;
         if (sCountry == "Eurozona") c = Blue;
         if (sCountry == "U.K.") c = Orange;
         if (sCountry == "Canadá") c = Gray;
         if (sCountry == "Australia") c = DarkViolet;
         if (sCountry == "Suecia") c = FireBrick;
         if (sCountry == "República Sudafricana")
             c = DodgerBlue;
         if (sCountry == "Dinamarca") c = RosyBrown;
         if (sCountry == "Noruega") c = HotPink;
         
 
 
         if ((sCountry == "Japón") && (!Japan)) continue;
         if ((sCountry == "USA") && (!USA)) continue;
         if ((sCountry == "Alemania") && (!Germany)) continue;
         if ((sCountry == "Eurozona") && (!ES)) continue;
         if ((sCountry == "U.K.") && (!GB)) continue;
         if ((sCountry == "Canadá") && (!Canada)) continue;
         if ((sCountry == "Australia") && (!Australia)) 
              continue;
         if ((sCountry == "Suecia") && (!Shweden)) continue;
         if ((sCountry == "República Sudafricana")&& (!UAR))
               continue;
         if ((sCountry == "Dinamarca") && (!Dania)) continue;
         if ((sCountry == "Noruega") && (!Norvegia)) continue;
         
 
            
            
          if (DisplayText)
          {
          ObjectCreate("x"+i, OBJ_TEXT, 0, dt, Close[0]);
          ObjectSet("x"+i, OBJPROP_COLOR, c);
          ObjectSetText("x"+i, 
            sDescription + " "
            + sCountry + " "
            + sPeriod + " "
            + sCurrent + " "
            + sForecast,
            8);          
          ObjectSet("x"+i, OBJPROP_ANGLE, 90);
          }
          
                   
          ObjectCreate(sCountry+" "+i, OBJ_VLINE, 0, dt,
                       Close[0]);
          ObjectSet(sCountry+" "+i, OBJPROP_COLOR, c);
          ObjectSet(sCountry+" "+i, OBJPROP_STYLE, STYLE_DOT);
          ObjectSet(sCountry+" "+i, OBJPROP_BACK, true);
          ObjectSetText(sCountry+" "+i,
            sDescription + " · "
            + sPeriod + " · "
            + sCurrent + " · "
            + sForecast,
            8);
 
   }


Ahora ya puede ver los eventos que están por venir y el impacto que tienen en el mercado. En este artículo se adjuntan los archivos de datos y el código del script. Por favor, tenga presente que los scripts se tienen que poner en el directorio Experts/Scripts, y los archivos de datos en Experts/Files. No olvide el formato de la fecha y los delimitadores (YYYY.MM.DD HH:MM). El funcionamiento del script se ilustra a continuación.









Los ficheros MQL4 ofrecen muchas posibilidades. Permiten conectar el terminal con fuentes de datos externas, simplifican y optimizan la gestión del terminal de trading, etc. Estos ejemplos trabajan con logs, y también permiten visualizar los niveles de soporte y resistencia con datos tomados de la Web. El usuario es libre de elegir los métodos que desee. La gestión automática de las posiciones ayuda al trader a disminuir su nivel de estrés, y también permite analizar los factores que influyen en el trading. En realidad MQL4 está diseñado para esto.

Abajo se muestran todas las funciones MQL4 disponibles para trabajar con ficheros. La documentación de MQL4 contiene más detalles.

FileClose 
FileDelete 
FileFlush 
FileIsEnding 
FileIsLineEnding 
FileOpen 
FileOpenHistory 
FileReadArray 
FileReadDouble 
FileReadInteger 
FileReadNumber 
FileReadString 
FileSeek 
FileSize 
FileTell 
FileWrite 
FileWriteArray 
FileWriteDouble 
FileWriteInteger 
FileWriteString

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

Archivos adjuntos |
ReadFromFile.mq4 (3.12 KB)
week.txt (2.22 KB)
week1.txt (1.86 KB)
Cómo funcionan las órdenes en los programas complejos Cómo funcionan las órdenes en los programas complejos
En este artículo vamos a explicar los principios generales que rigen el funcionamiento de las órdenes en programas extensos y complejos.
AutoGraf, un Asesor Experto Gráfico AutoGraf, un Asesor Experto Gráfico
Este artículo explica cómo funcionan los gráficos en la creación de una interfaz para gestionar el trading de manera adecuada.
Eventos en MetaTrader 4 Eventos en MetaTrader 4
En este artículo vamos a tratar el seguimiento programado de eventos en el Terminal Cliente MetaTrader 4, tales como la apertura, el cierre y la modificación de órdenes. Se dirige a los usuarios que tienen unos conocimientos básicos en programación MQL 4 y ya saben manejar el terminal.
Método de construcción de los niveles de resistencia y apoyo con los recursos de MQL5 Método de construcción de los niveles de resistencia y apoyo con los recursos de MQL5
En este artículo se describe la manera de encontrar los cuatro puntos extremos para, partiendo de ellos, construir acto seguido los niveles de resistencia y apoyo. Para encontrar los extremos en el gráfico de la pareja de divisas, se usa el incador RSI. Como ejemplo, se muestra el código de un indicador que representa los niveles de resistencia y apoyo.