Scripts: Exportación de Valores del Indicador - página 2

[Eliminado]  
No funciona.
 
No puedo exportar valores de la media móvil exponencial de 50 periodos, ¿alguien podría ayudarme?
 

Busque el archivo en la carpeta

C:\Users\XXX\AppData\Roaming\MetaQuotes\Terminal\ZXVVDASDADDEDADS23132\MQL5\Files

 
El script está muy bien, pero me gustaría más si los datos pudiesen ir a excel directamente, mediante un servidor RTD, para usar la función RDTR de excel. Tienes previsto algo así?
 
 
Jose Luis Perez Navarro:
El script está muy bien, pero me gustaría más si los datos pudiesen ir a excel directamente, mediante un servidor RTD, para usar la función RDTR de excel. Tienes previsto algo así?
xm.cm real14
 

Sí, funciona. Usted necesita mirar en ...MQL5\Files ruta, su allí el archivo CSV.

he modificado para guardar los valores de OBV (volumen real) sólo cambiar el código de abajo


Indicator_Directory_And_Name="Examples\\OBV";
IndicatorPeriod=VOLUME_REAL;
 
Ecirba:

Hola,

Gracias por el trabajo. Desafortunadamente, cuando ejecuto el script, no se crea ningún archivo. He actualizado el script para que escriba en C:/temp/. Cuando lo ejecuto en debug veo que el nombre del fichero es correcto y no me da ningún error pero no hay fichero.

¿Alguna pista?


Si compruebas el handle, probablemente devolverá -1. (handle inválido)


Print ( "fileHandle Value=", fileHandle);


Por alguna razón MT5 doesnt'like que guarde los archivos en lugares diferentes de los predeterminados. Simplemente deje como código original y se escribirá en ...MQL5\Files path

 

Enhorabuena por el script, estoy exportando los valores de la bandera volatilitypivot a csv, pero el script solo exporta correctamente los valores altos, en las lineas que deberian aparecer los valores bajos aparece un error.

¿Alguien me puede ayudar por favor?

Script VolatilityPivot

#property indicator_chart_window
//--- 4 buffers son usados para calcular y dibujar el indicador
#property indicator_buffers 4
//--- se utilizan 4 parcelas
#property indicator_plots   4
//+----------------------------------------------+
//| Parámetros de dibujo del indicador alcista |
//+----------------------------------------------+
//--- dibujar el indicador 1 como una línea
#property indicator_type1   DRAW_LINE
//--- el color azul se utiliza para la línea indicadora
#property indicator_color1  clrBlue
//--- la línea del indicador 1 es de punto y raya
#property indicator_style1  STYLE_DASHDOTDOT
//--- el ancho de línea del indicador 1 es igual a 2
#property indicator_width1  2
//---- visualización de la etiqueta del indicador
#property indicator_label1  "Upper VolatilityPivot"
//+----------------------------------------------+
//| Parámetros de dibujo de un indicador bajista |
//+----------------------------------------------+
//--- dibujar el indicador 2 como una línea
#property indicator_type2   DRAW_LINE
//--- El color HotPink se utiliza para la línea indicadora
#property indicator_color2  clrHotPink
//--- la línea del indicador 2 es de punto y raya
#property indicator_style2  STYLE_DASHDOTDOT
//--- el ancho de línea del indicador 2 es igual a 2
#property indicator_width2  2
//---- visualización de la etiqueta del indicador
#property indicator_label2  "Lower VolatilityPivot"
//+----------------------------------------------+
//| Parámetros de dibujo del indicador alcista |
//+----------------------------------------------+
//--- dibujar el indicador 3 como etiqueta
#property indicator_type3   DRAW_ARROW
//--- Se utiliza el color DeepSkyBlue para el indicador
#property indicator_color3  clrDeepSkyBlue
//--- indicador 3 ancho es igual a 4
#property indicator_width3  4
//--- visualización de la etiqueta del indicador
#property indicator_label3  "Buy VolatilityPivot"
//+----------------------------------------------+
//| Parámetros de dibujo de un indicador bajista |
//+----------------------------------------------+
//--- dibujar el indicador 4 como etiqueta
#property indicator_type4   DRAW_ARROW
//--- el color rojo se utiliza para el indicador
#property indicator_color4  clrRed
//--- indicador 4 ancho es igual a 4
#property indicator_width4  4
//--- visualización de la etiqueta del indicador
#property indicator_label4  "Sell VolatilityPivot"
//+----------------------------------------------+
//| declaración de constantes |
//+----------------------------------------------+
#define  RESET 0  // Una constante para devolver el comando de recálculo del indicador al terminal
//+----------------------------------------------+
//| Declaración de enumeración |
//+----------------------------------------------+
enum Mode_
  {
   Mode_ATR=0,   //ATR
   Mode_Price    //Desviación de precios
  };
//+----------------------------------------------+
//| Parámetros de entrada del indicador |
//+----------------------------------------------+
input uint   atr_range=100;
input uint   ima_range=10;
input double atr_factor=3;
input Mode_  Mode=Mode_ATR;
input  uint  DeltaPrice=200;
input int    Shift=0;          // Desplazamiento horizontal del indicador en barras
//+----------------------------------------------+
//--- declaración de matrices dinámicas que
//--- se utilizarán como búferes indicadores
double ExtMapBufferUp[];
double ExtMapBufferDown[];
double ExtMapBufferUp1[];
double ExtMapBufferDown1[];
//---
double dDeltaPrice;
//--- declaración de variables enteras para las manijas de los indicadores
int ATR_Handle;
//--- declaración de variables enteras para el inicio del cálculo de datos
int min_rates_total;
//+------------------------------------------------------------------+
//| Descripción de la clase CMoving_Average|
//+------------------------------------------------------------------+
#include <SmoothAlgorithms.mqh>
//+------------------------------------------------------------------+
//| Función de inicialización del indicador personalizada |
//+------------------------------------------------------------------+ 
int OnInit()
  {
//--- Obtener el handle del indicador ATR
   if(Mode==Mode_ATR)
     {
      min_rates_total=int(atr_range+ima_range)+1;
      ATR_Handle=iATR(NULL,0,atr_range);
      if(ATR_Handle==INVALID_HANDLE)
        {
         Print(" Failed to get handle of the ATR indicator");
         return(INIT_FAILED);
        }
     }
   else
     {
      min_rates_total=3;
      dDeltaPrice=DeltaPrice*_Point;
     }
//--- establece el array dinámico ExtMapBufferUp[] como buffer indicador
   SetIndexBuffer(0,ExtMapBufferUp,INDICATOR_DATA);
//---- desplazar horizontalmente el indicador 1 mediante Shift
   PlotIndexSetInteger(0,PLOT_SHIFT,Shift);
//--- desplazamiento del inicio del dibujo del indicador 1
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//--- indexar elementos del buffer como timeseries 
   ArraySetAsSeries(ExtMapBufferUp,true);
//--- establecer los valores de los indicadores que no serán visibles en un gráfico
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- establece el array dinámico ExtMapBufferDown[] como buffer indicador
   SetIndexBuffer(1,ExtMapBufferDown,INDICATOR_DATA);
//---- desplazar el indicador 2 horizontalmente mediante Shift
   PlotIndexSetInteger(1,PLOT_SHIFT,Shift);
//--- desplazamiento del punto de partida del cálculo del dibujo del indicador 2
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);
//--- indexar elementos del buffer como timeseries 
   ArraySetAsSeries(ExtMapBufferDown,true);
//--- establecer los valores de los indicadores que no serán visibles en un gráfico
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- Establece el array dinámico ExtMapBufferUp1[] como buffer indicador
   SetIndexBuffer(2,ExtMapBufferUp1,INDICATOR_DATA);
//---- desplazar horizontalmente el indicador 1 mediante Shift
   PlotIndexSetInteger(2,PLOT_SHIFT,Shift);
//--- desplazamiento del inicio del dibujo del indicador 3
   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,min_rates_total);
//--- indexar elementos del buffer como timeseries 
   ArraySetAsSeries(ExtMapBufferUp1,true);
//--- establecer los valores de los indicadores que no serán visibles en un gráfico
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- símbolo indicador
   PlotIndexSetInteger(2,PLOT_ARROW,118);
//--- Establece el array dinámico ExtMapBufferDown1[] como buffer indicador
   SetIndexBuffer(3,ExtMapBufferDown1,INDICATOR_DATA);
//---- desplazar el indicador 2 horizontalmente mediante Shift
   PlotIndexSetInteger(3,PLOT_SHIFT,Shift);
//--- desplazamiento del inicio del dibujo del indicador 4
   PlotIndexSetInteger(3,PLOT_DRAW_BEGIN,min_rates_total);
//--- indexar elementos del buffer como timeseries 
   ArraySetAsSeries(ExtMapBufferDown1,true);
//--- establecer los valores de los indicadores que no serán visibles en un gráfico
   PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- símbolo indicador
   PlotIndexSetInteger(3,PLOT_ARROW,118);
//--- creación del nombre que se mostrará en una subventana separada y en una ayuda emergente
   IndicatorSetString(INDICATOR_SHORTNAME,"VolatilityPivot");
//--- determinar la precisión de los valores de los indicadores
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//--- fin de la inicialización
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Función de iteración del indicador personalizada|
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,    // número de barras en la historia en el tick actual
                const int prev_calculated,// cantidad de historia en barras en el tick anterior
                const datetime &time[],
                const double &open[],
                const double& high[],     // matriz de precios máximos para el cálculo del indicador
                const double& low[],      // array de precios mínimos para el cálculo del indicador
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//--- comprobar si el número de barras es suficiente para el cálculo
   if((BarsCalculated(ATR_Handle)<rates_total && Mode==Mode_ATR) || rates_total<min_rates_total) return(RESET);
//--- declaraciones de variables locales 
   double DeltaStop,Stop;
   static double PrevStop;
   int limit,bar;
//--- indexación de elementos en arrays como en timeseries 
   ArraySetAsSeries(close,true);
//--- cálculo del índice inicial 'límite' para el bucle de recálculo de barras
   if(prev_calculated>rates_total || prev_calculated<=0) // comprobación del primer inicio de cálculo de un indicador
     {
      limit=rates_total-min_rates_total-1;               // índice inicial para el cálculo de todas las barras
      PrevStop=close[limit+1];
     }
   else limit=rates_total-prev_calculated;               // índice inicial para el cálculo de nuevas barras
//---
   if(Mode==Mode_Price)
     {
      //--- bucle principal de cálculo del indicador
      for(bar=limit; bar>=0; bar--)
        {
         ExtMapBufferUp1[bar]=EMPTY_VALUE;
         ExtMapBufferDown1[bar]=EMPTY_VALUE;
         DeltaStop=dDeltaPrice;
         //---
         if(close[bar]==PrevStop) Stop=PrevStop;
         else
           {
            if(close[bar+1]<PrevStop && close[bar]<PrevStop) Stop=MathMin(PrevStop,close[bar]+DeltaStop);
            else
              {
               if(close[bar+1]>PrevStop && close[bar]>PrevStop) Stop=MathMax(PrevStop,close[bar]-DeltaStop);
               else
                 {
                  if(close[bar]>PrevStop) Stop=close[bar]-DeltaStop;
                  else Stop=close[bar]+DeltaStop;
                 }
              }
           }
         //---
         if(close[bar]>Stop) ExtMapBufferUp[bar]=Stop; else ExtMapBufferUp[bar]=EMPTY_VALUE;
         if(close[bar]<Stop) ExtMapBufferDown[bar]=Stop; else ExtMapBufferDown[bar]=EMPTY_VALUE;
         if(ExtMapBufferUp[bar+1]==EMPTY_VALUE && ExtMapBufferUp[bar]!=EMPTY_VALUE) ExtMapBufferUp1[bar]=ExtMapBufferUp[bar];
         if(ExtMapBufferDown[bar+1]==EMPTY_VALUE && ExtMapBufferDown[bar]!=EMPTY_VALUE) ExtMapBufferDown1[bar]=ExtMapBufferDown[bar];
         if(bar) PrevStop=Stop;
        }
     }
//---
   if(Mode==Mode_ATR)
     {
      //--- declaraciones de variables locales 
      double ATR[];
      int to_copy,maxbar;
      //--- declaración de las variables de clase CMoving_Average del fichero SmoothAlgorithms.mqh 
      static CMoving_Average EMA;
      //--- indexación de elementos en arrays como en timeseries 
      ArraySetAsSeries(ATR,true);
      to_copy=limit+1;
      if(CopyBuffer(ATR_Handle,0,0,to_copy,ATR)<=0) return(RESET);
      maxbar=rates_total-min_rates_total-1;
      //--- bucle principal de cálculo del indicador
      for(bar=limit; bar>=0; bar--)
        {
         ExtMapBufferUp1[bar]=EMPTY_VALUE;
         ExtMapBufferDown1[bar]=EMPTY_VALUE;
         DeltaStop=atr_factor*EMA.EMASeries(maxbar,prev_calculated,rates_total,ima_range,ATR[bar],bar,true);
         //---
         if(close[bar]==PrevStop) Stop=PrevStop;
         else
           {
            if(close[bar+1]<PrevStop && close[bar]<PrevStop) Stop=MathMin(PrevStop,close[bar]+DeltaStop);
            else
              {
               if(close[bar+1]>PrevStop && close[bar]>PrevStop) Stop=MathMax(PrevStop,close[bar]-DeltaStop);
               else
                 {
                  if(close[bar]>PrevStop) Stop=close[bar]-DeltaStop;
                  else Stop=close[bar]+DeltaStop;
                 }
              }
           }
         //---
         if(close[bar]>Stop) ExtMapBufferUp[bar]=Stop; else ExtMapBufferUp[bar]=EMPTY_VALUE;
         if(close[bar]<Stop) ExtMapBufferDown[bar]=Stop; else ExtMapBufferDown[bar]=EMPTY_VALUE;
         //---
         if(ExtMapBufferUp[bar+1]==EMPTY_VALUE && ExtMapBufferUp[bar]!=EMPTY_VALUE) ExtMapBufferUp1[bar]=ExtMapBufferUp[bar];
         if(ExtMapBufferDown[bar+1]==EMPTY_VALUE && ExtMapBufferDown[bar]!=EMPTY_VALUE) ExtMapBufferDown1[bar]=ExtMapBufferDown[bar];
         //---
         if(bar) PrevStop=Stop;
        }
     }
//--- 
   return(rates_total);
  }

Error csv

 

Este es muy útil.

El autor es un toro.