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 entradainputstring InpFileName="data.bin"; inputstring InpDirectoryName="AlgunCarpeta"; //+------------------------------------------------------------------+//| Estructura para almacenar datos de precios |//+------------------------------------------------------------------+struct precios { datetime fecha; // datos double bid; // Precio Bid double ask; // Precio Ask }; //--- variables globalesint contador=0; int tamaño=20; string ruta=InpDirectoryName+"//"+InpFileName; precios arr[]; //+------------------------------------------------------------------+//| Función de inicialización del Asesor |//+------------------------------------------------------------------+intOnInit() { //--- asignar memoria para el arreglo ArrayResize(arr,tamaño); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+//| Función de desinicialización del Asesor |//+------------------------------------------------------------------+voidOnDeinit(constint razon) { //--- escribir las cadenas restantes si contador<n EscribirDatos(contador); } //+------------------------------------------------------------------+//| Función de tick del Asesor |//+------------------------------------------------------------------+voidOnTick() { //--- 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(constint 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