El Asesor Experto obtiene los valores de los precios Bid y Ask en cada tick y los almacena en un arreglo de estructura llamado "precios". Cada veinte ticks, el Asesor escribe los datos de estos objetos estructurados en un archivo utilizando la función FileWriteArray(). Los datos se registrarán en un archivo binario dentro del subdirectorio de la carpeta local del terminal. Puedes obtener la ubicación de esta carpeta local llamando a la función TerminalInfoString.
PrintFormat("La ruta a la carpeta local del terminal: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
Cuando eliminas el Asesor Experto del gráfico, se escriben los datos que no se habían guardado en el archivo antes de que el Asesor termine su trabajo.
Código:
//--- parámetros de entrada input string InpFileName="data.bin"; input string InpDirectoryName="AlgunCarpeta"; //+------------------------------------------------------------------+ //| Estructura para almacenar datos de precios | //+------------------------------------------------------------------+ struct precios { datetime fecha; // datos double bid; // Precio Bid double ask; // Precio Ask }; //--- variables globales int contador=0; int tamaño=20; string ruta=InpDirectoryName+"//"+InpFileName; precios arr[]; //+------------------------------------------------------------------+ //| Función de inicialización del Asesor | //+------------------------------------------------------------------+ int OnInit() { //--- asignar memoria para el arreglo ArrayResize(arr,tamaño); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Función de desinicialización del Asesor | //+------------------------------------------------------------------+ void OnDeinit(const int razon) { //--- escribir las cadenas restantes si contador<n EscribirDatos(contador); } //+------------------------------------------------------------------+ //| Función de tick del Asesor | //+------------------------------------------------------------------+ void OnTick() { //--- guardar datos en el arreglo arr[contador].fecha=TimeCurrent(); arr[contador].bid=SymbolInfoDouble(Symbol(),SYMBOL_BID); arr[contador].ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK); //--- mostrar datos actuales Print("Fecha = ",arr[contador].fecha," Bid = ",arr[contador].bid," Ask = ",arr[contador].ask); //--- incrementar el contador contador++; //--- si el arreglo está lleno, escribir datos en el archivo y reiniciarlo if(contador==tamaño) { EscribirDatos(tamaño); contador=0; } } //+------------------------------------------------------------------+ //| Escribir n elementos del arreglo en el archivo | //+------------------------------------------------------------------+ void EscribirDatos(const int n) { //--- abrir el archivo ResetLastError(); int manejador=FileOpen(ruta,FILE_READ|FILE_WRITE|FILE_BIN); if(manejador!=INVALID_HANDLE) { //--- escribir datos del arreglo al final del archivo FileSeek(manejador,0,SEEK_END); FileWriteArray(manejador,arr,0,n); //--- cerrar el archivo FileClose(manejador); } else Print("Error al abrir el archivo, código de error ",GetLastError()); }
Comentarios 0