Mira cómo descargar robots gratis
¡Búscanos en Twitter!
Pon "Me gusta" y sigue las noticias
¿Es interesante este script?
Deje un enlace a él, ¡qué los demás también lo valoren!
¿Le ha gustado el script?
Evalúe su trabajo en el terminal MetaTrader 5
Visualizaciones:
980
Ranking:
(33)
Publicado:
2014.01.14 14:31
Actualizado:
2016.11.22 07:33
\MQL5\Files\Data\
file.txt (0.1 KB) ver
¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa

El script abre un archivo de texto, analiza las posiciones de los puntos iniciales del as cadenas en el archivo y visualiza el texto de una cadena seleccionada de manera aleatoria. Para obrener la matriz de las posiciones iniciales de cada cadena en el archivo se ha escrito la función GetStringPositions(). La función busca el inicio de las cadenas teneiendo el cuenta la codificación del archivo que puede ser especificada en el parámetro de entrada "InpEncodingType".

Además de utilizar la función FileTell(), el script utiliza también la función FileGetInteger() para obtener la codificación, la función FileIsEnding() para determinar el final del archivo y la función FileSeek() para mover el puntero dentro del archivo al visualizar la cadena con una posición aleatoria.

Código:

//--- muestra la ventana con los parámetros de entrada al lanzar el script
#property script_show_inputs
//--- parámetros de entrada
input string InpFileName="file.txt";    // nombre del archivo
input string InpDirectoryName="Data";   // nombre de la carpeta
input int    InpEncodingType=FILE_ANSI; // ANSI=32 o UNICODE=64
//+------------------------------------------------------------------+
//| Función de inicio del script                                     |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- especifica el valor del a variable para generar números aleatorios
   _RandomSeed=GetTickCount();
//--- variables para las posiciones de los puntos de inicio de las cadenas
   ulong pos[];
   int   size;
//--- inicializa el valor de la variable de errores
   ResetLastError();
//--- abre el archivo
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_TXT|InpEncodingType);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("El archivo %s está disponible para lectura",InpFileName);
      //--- recibe las posiciones de cada cadena en el archivo
      GetStringPositions(file_handle,pos);
      //--- determina el número de cadenas en el archivo
      size=ArraySize(pos);
      if(!size)
        {
         //--- se deiene la ejecución si no hay cadenas
         PrintFormat("El archivo %s está vacío!",InpFileName);
         FileClose(file_handle);
         return;
        }
      //--- selección de un número aleatorio para la cadena
      int ind=MathRand()%size;
      //--- desplaza la posición en el archivo al inicio de la cadena
      FileSeek(file_handle,pos[ind],SEEK_SET);
      //--- lee e imprime la cadena correspondiente al número ind
      PrintFormat("Texto de la cadena con el número %d: \"%s\"",ind,FileReadString(file_handle));
      //--- cierra el archivo
      FileClose(file_handle);
      PrintFormat("El archivo %s ha sido cerrado",InpFileName);
     }
   else
      PrintFormat("Falló la apertura del archivo %s, código de error = %d",InpFileName,GetLastError());
  }
//+-------------------------------------------------------------------------------+
//| La función determina los puntos de inicio de cada cadena en el archivo y      |
//| los coloca en la matriz arr                                                   |
//+-------------------------------------------------------------------------------+
void GetStringPositions(const int handle,ulong &arr[])
  {
//--- tamaño por defecto de la matriz
   int def_size=127;
//--- reserva memoria para la matriz
   ArrayResize(arr,def_size);
//--- contador de cadenas
   int i=0;
//--- si no estamos al final del archivo, al menos existe una cadena más
   if(!FileIsEnding(handle))
     {
      arr[i]=FileTell(handle);
      i++;
     }
   else
      return; // el archivo está vacío, salimos
//--- definimos el desplazamiento en bytes, según la codificación
   int shift;
   if(FileGetInteger(handle,FILE_IS_ANSI))
      shift=1;
   else
      shift=2;
//--- avanzamos por las cadenas en el ciclo
   while(1)
     {
      //--- leemos la cadena
      FileReadString(handle);
      //--- comprobamos el final del archivo
      if(!FileIsEnding(handle))
        {
         //--- almacenamos la posición de la siguiente cadena
         arr[i]=FileTell(handle)+shift;
         i++;
         //--- incrementamos el tamaño de la matriz, si es necesario
         if(i==def_size)
           {
            def_size+=def_size+1;
            ArrayResize(arr,def_size);
           }
        }
      else
         break; // fin del archivo, salimos
     }
//--- definimos el tamaño real de la matriz
   ArrayResize(arr,i);
  }

Traducción del ruso realizada por MetaQuotes Ltd
Artículo original: https://www.mql5.com/ru/code/1634

Mean Deviation Index Blau_MDI Mean Deviation Index Blau_MDI

Mean Deviation Index (MDI) de William Blau.

Ergodic Mean Deviation Index Oscillator Ergodic_MDI Ergodic Mean Deviation Index Oscillator Ergodic_MDI

Ergodic Mean Deviation Index (MDI) Oscillator de William Blau.

Stochastic Momentum Oscillator Blau_SM_Stochastic Stochastic Momentum Oscillator Blau_SM_Stochastic

Stochastic Momentum Oscillator de William Blau.

Stochastic Momentum Index Blau_SMI Stochastic Momentum Index Blau_SMI

Stochastic Momentum Index de William Blau.