Pon "Me gusta" y sigue las noticias
Deje un enlace a él, ¡qué los demás también lo valoren!
Evalúe su trabajo en el terminal MetaTrader 5
Demo_FileTell - script para MetaTrader 5
- Visualizaciones:
- 980
- Ranking:
- Publicado:
- 2014.01.14 14:31
- Actualizado:
- 2016.11.22 07:33
- ¿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 (MDI) de William Blau.
Ergodic Mean Deviation Index Oscillator Ergodic_MDIErgodic Mean Deviation Index (MDI) Oscillator de William Blau.
Stochastic Momentum Oscillator de William Blau.
Stochastic Momentum Index Blau_SMIStochastic Momentum Index de William Blau.