How to export an indicator to excel

Para añadir comentario, por favor Autorícese o regístrese
Pedro Severin
1264
Pedro Severin  

Hola a todos, cómo están.


Estoy buscando un script, EA o algo que pueda exportar datos de 3 indicadores (no tienen que ser todos al mismo tiempo, puedo hacer 3 exportaciones) a un libro de excel o txt.

He buscado por el foro y encontré esto:

//+------------------------------------------------------------------+
//|                                          Export Indicator Values |
//+------------------------------------------------------------------+
#property description "This Script Export Indicators Values to CSV File."
#property description "(You can change the iCustom function parameters to change what indicator to export)"
#property copyright "NFTrader"
#property version   "2.00"
#property script_show_inputs

input int    IndicatorPeriod=3;
input string Indicator_Directory_And_Name="Examples\\RSI";
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   MqlRates  rates_array[];
   string sSymbol=_Symbol;

// Convert Period to string to use it in the file name
   string  sPeriod=EnumToString(_Period);
// Comment to appear in the up left screen
   Comment("Exporting ... Please wait... ");

// Prepare file name, e.g: EURUSD_PERIOD_H1(RSI,14)
   string       ExtFileName="AUDUSD_PERIOD_M1(RSI,3).csv"; // ="XXXXXX_PERIOD_H1(RSI,14).CSV";
   ExtFileName=sSymbol;
   int pos=StringFind(Indicator_Directory_And_Name,"\\",0);
   string indicatorName=StringSubstr(Indicator_Directory_And_Name,pos+1,-1);
   string indicatorPeriod=IntegerToString(IndicatorPeriod);
   StringConcatenate(ExtFileName,sSymbol,"_",sPeriod,"(",indicatorName,",",indicatorPeriod,")",".csv");

   ArraySetAsSeries(rates_array,true);
   int MaxBar=TerminalInfoInteger(TERMINAL_MAXBARS);
   int iCurrent=CopyRates(sSymbol,_Period,0,MaxBar,rates_array);

   double IndicatorBuffer[];
   SetIndexBuffer(0,IndicatorBuffer,INDICATOR_DATA);

   int bars=Bars(sSymbol,PERIOD_CURRENT);
   int to_copy=bars;

   int rsiHandle=iCustom(NULL,PERIOD_CURRENT,Indicator_Directory_And_Name,IndicatorPeriod);       // Change here.

   CopyBuffer(rsiHandle,0,0,to_copy,IndicatorBuffer);
   ArraySetAsSeries(IndicatorBuffer,true);

   int fileHandle=FileOpen(ExtFileName,FILE_WRITE|FILE_CSV);

   for(int i=iCurrent-IndicatorPeriod-1; i>0; i--)
     {
      string outputData=StringFormat("%s",TimeToString(rates_array[i].time,TIME_DATE));
      outputData+=","+TimeToString(rates_array[i].time,TIME_MINUTES);
      outputData+=","+ DoubleToString(IndicatorBuffer[i],2);
      outputData+="\n";

      FileWriteString(fileHandle,outputData);
     }

   FileClose(fileHandle);
   Comment("Exported Successfully");
  }
//+------------------------------------------------------------------+

Pero no logro hacer que se exporte la data del indicador RSI. En la carpeta "examples" de MQL5 tengo el archivo "AUDUSD_PERIOD_M1(RSI,3)" en extensión .csv y .txt. ¿Qué estoy haciendo mal?


De antemano, muchas gracias!

karachiento
188
karachiento  

Creo que te estas complicando la vida con ese codigo. Si tienes los datos de los indicadores en arrays, prueba lo siguiente:


   int Manejador_Archivo;

 

   Manejador_Archivo = FileOpen("DATOS.txt", FILE_WRITE | FILE_TXT);  

   

   if (Manejador_Archivo != INVALID_HANDLE)    

   {   

      FileWrite (Manejador_Archivo, " RSI    ADX   EMA"); 

      FileWrite (Manejador_Archivo, " ================"); 

   

      for (int i = 1; i <= 99; i++)

         FileWrite (Manejador_Archivo, RSI[i],"   ",ADX[i],"   ",EMA[i]); 


      FileClose (Manejador_Archivo);    

      Print ("FileOpen OK");        

   }     

   else 

      Print("Operación FileOpen fallida, error ",GetLastError());     


Ese código deberia generarte un archivo de texto con los valores que necesitas. Segurisimamente hay mejores maneras de hacerlo (con la funcion WriteArray() por ejemplo), pero funciona.

Saludos

Edito: Donde decia CopyArray() corrijo por WriteArray().
Pedro Severin
1264
Pedro Severin  
karachiento:

Creo que te estas complicando la vida con ese codigo. Si tienes los datos de los indicadores en arrays, prueba lo siguiente:


   int Manejador_Archivo;

 

   Manejador_Archivo = FileOpen("DATOS.txt", FILE_WRITE | FILE_TXT);  

   

   if (Manejador_Archivo != INVALID_HANDLE)    

   {   

      FileWrite (Manejador_Archivo, " RSI    ADX   EMA"); 

      FileWrite (Manejador_Archivo, " ================"); 

   

      for (int i = 1; i <= 99; i++)

         FileWrite (Manejador_Archivo, RSI[i],"   ",ADX[i],"   ",EMA[i]); 


      FileClose (Manejador_Archivo);    

      Print ("FileOpen OK");        

   }     

   else 

      Print("Operación FileOpen fallida, error ",GetLastError());     


Ese código deberia generarte un archivo de texto con los valores que necesitas. Segurisimamente hay mejores maneras de hacerlo (con la funcion CopyArray() por ejemplo), pero funciona.

Saludos

Estoy usando Buffers. Sirve también?

Pedro Severin
1264
Pedro Severin  

Y a donde va a parar datos.txt? Tengo que crearlo yo en alguna carpeta?

Disculpa la ignorancia y gracias por tu ayuda :)

karachiento
188
karachiento  
ppsev:

Y a donde va a parar datos.txt? Tengo que crearlo yo en alguna carpeta?

Disculpa la ignorancia y gracias por tu ayuda :)


Existen dos carpetas (con subcarpetas) en las que se puede colocar los archivos de trabajo:

  • terminal_data_directorio\MQL5\FILES\  (para verla seleccione el punto del menú "Archivo"-"Abrir carpeta de datos" en el terminal);
  • carpeta general de todos los terminales instalados en el ordenador — suele ubicarse en el directorio C:\Documents and Settings\All Users\Application Data\MetaQuotes\Terminal\Common\Files.


En el siguiente link la info completa para trabajar con archivos.

https://www.mql5.com/es/docs/files

Saludos

Documentación para MQL5: Operaciones con archivos
Documentación para MQL5: Operaciones con archivos
  • www.mql5.com
terminal_data_directorio\MQL5\FILES\  (para verla seleccione el punto del menú "Archivo"-"Abrir carpeta de datos" en el terminal);carpeta general de todos los terminales instalados en el ordenador — suele ubicarse en el directorio C:\Documents and Settings\All Users\Application Data\MetaQuotes\Terminal\Common\Files. Las funciones de archivos...
Para añadir comentario, por favor Autorícese o regístrese