Scripts: Export Indicator's Values - página 2

[Excluído]  
Não funciona.
 
Não estou conseguindo exportar valores da Media Movel Exponencial 50 periodos, alguem poderia me ajudar como fazer isso??
 

Busque o arquivo na pasta

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

 
O script é muito bom, mas eu gostaria mais se os dados pudessem ir diretamente para o Excel, por meio de um servidor RTD, para usar a função RDTR do Excel. Você tem algo planejado nesse sentido?
 
 
Jose Luis Perez Navarro:
O script é muito bom, mas eu gostaria mais se os dados pudessem ir diretamente para o Excel, por meio de um servidor RTD, para usar a função RDTR do Excel. Você tem algo assim em mente?
xm.cm real14
 

Sim, funciona. Você precisa examinar o caminho ...MQL5\Files, onde está o arquivo CSV.

Eu modifiquei para salvar valores de OBV (volume real), basta alterar o código abaixo


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

Hi,

Obrigado pelo trabalho. Infelizmente, quando executo o script, nenhum arquivo é criado. Atualizei o script para gravar em C:/temp/. Quando executo em depuração, vejo que o nome do arquivo está correto e não recebo nenhum erro, mas não há arquivo.

Alguma pista?


Se você verificar o identificador, ele provavelmente estará retornando -1 (identificador inválido).


Print ( "fileHandle Value=", fileHandle);


Por alguma razão, o MT5 não gosta que você salve arquivos em locais diferentes do padrão. Apenas deixe o código original e ele escreverá em ...MQL5\Files path

 

Parabéns pelo script, estou exportando os valores da flag volatilitypivot para csv, mas o script só exporta corretamente os valores altos, nas linhas que deveriam aparecer os valores baixos aparece um erro.

Alguém pode me ajudar, por favor?

Script VolatilityPivot

#property indicator_chart_window
//--- 4 buffers são usados para calcular e desenhar o indicador
#property indicator_buffers 4
//--- 4 gráficos são usados
#property indicator_plots   4
//+----------------------------------------------+
//| Parâmetros de desenho do indicador de alta
//+----------------------------------------------+
//--- desenhando o indicador 1 como uma linha
#property indicator_type1   DRAW_LINE
//--- a cor azul é usada para a linha do indicador
#property indicator_color1  clrBlue
//--- a linha do indicador 1 é um traço de ponto
#property indicator_style1  STYLE_DASHDOTDOT
//--- a largura da linha do indicador 1 é igual a 2
#property indicator_width1  2
//---- exibição do rótulo do indicador
#property indicator_label1  "Upper VolatilityPivot"
//+----------------------------------------------+
//| Parâmetros para desenhar um indicador de baixa
//+----------------------------------------------+
//--- desenhando o indicador 2 como uma linha
#property indicator_type2   DRAW_LINE
//--- A cor HotPink é usada para a linha do indicador
#property indicator_color2  clrHotPink
//--- a linha do indicador 2 é um traço de ponto
#property indicator_style2  STYLE_DASHDOTDOT
//--- a largura da linha do indicador 2 é igual a 2
#property indicator_width2  2
//---- exibição do rótulo do indicador
#property indicator_label2  "Lower VolatilityPivot"
//+----------------------------------------------+
//| Parâmetros de desenho do indicador de alta
//+----------------------------------------------+
//--- desenhando o indicador 3 como um rótulo
#property indicator_type3   DRAW_ARROW
//--- A cor DeepSkyBlue é usada para o indicador
#property indicator_color3  clrDeepSkyBlue
//--- a largura do indicador 3 é igual a 4
#property indicator_width3  4
//--- exibindo o rótulo do indicador
#property indicator_label3  "Buy VolatilityPivot"
//+----------------------------------------------+
//| Parâmetros para desenhar um indicador de baixa
//+----------------------------------------------+
//--- desenhando o indicador 4 como um rótulo
#property indicator_type4   DRAW_ARROW
//--- a cor vermelha é usada para o indicador
#property indicator_color4  clrRed
//--- a largura do indicador 4 é igual a 4
#property indicator_width4  4
//--- exibindo o rótulo do indicador
#property indicator_label4  "Sell VolatilityPivot"
//+----------------------------------------------+
//| declaração de constantes
//+----------------------------------------------+
#define  RESET 0  // Uma constante para retornar o comando de recálculo do indicador para o terminal
//+----------------------------------------------+
//| Declaração de enumeração
//+----------------------------------------------+
enum Mode_
  {
   Mode_ATR=0,   //ATR
   Mode_Price    /Desvio de preço
  };
//+----------------------------------------------+
//| Parâmetros de entrada do 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;          // Deslocamento horizontal do indicador em barras
//+----------------------------------------------+
//--- declaração de matrizes dinâmicas que
//--- serão usados como buffers de indicadores
double ExtMapBufferUp[];
double ExtMapBufferDown[];
double ExtMapBufferUp1[];
double ExtMapBufferDown1[];
//---
double dDeltaPrice;
//--- declaração de variáveis inteiras para os controles dos indicadores
int ATR_Handle;
//--- declaração de variáveis inteiras para o início do cálculo de dados
int min_rates_total;
//+------------------------------------------------------------------+
//| Descrição da classe CMoving_Average|
//+------------------------------------------------------------------+
#include <SmoothAlgorithms.mqh>
//+------------------------------------------------------------------+
//| Função de inicialização do indicador personalizado
//+------------------------------------------------------------------+ 
int OnInit()
  {
//--- Obtendo o identificador do 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;
     }
//--- definir a matriz dinâmica ExtMapBufferUp[] como um buffer indicador
   SetIndexBuffer(0,ExtMapBufferUp,INDICATOR_DATA);
//---- deslocando o indicador 1 horizontalmente por Shift
   PlotIndexSetInteger(0,PLOT_SHIFT,Shift);
//--- deslocando o início do desenho do indicador 1
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//--- indexação de elementos do buffer como séries temporais 
   ArraySetAsSeries(ExtMapBufferUp,true);
//--- definição dos valores do indicador que não serão visíveis em um gráfico
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- definir a matriz dinâmica ExtMapBufferDown[] como um buffer indicador
   SetIndexBuffer(1,ExtMapBufferDown,INDICATOR_DATA);
//---- deslocando o indicador 2 horizontalmente com a tecla Shift
   PlotIndexSetInteger(1,PLOT_SHIFT,Shift);
//--- deslocando o ponto de partida do cálculo do desenho do indicador 2
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);
//--- indexação de elementos do buffer como séries temporais 
   ArraySetAsSeries(ExtMapBufferDown,true);
//--- definição dos valores do indicador que não serão visíveis em um gráfico
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- Definir a matriz dinâmica ExtMapBufferUp1[] como um buffer indicador
   SetIndexBuffer(2,ExtMapBufferUp1,INDICATOR_DATA);
//---- deslocando o indicador 1 horizontalmente por Shift
   PlotIndexSetInteger(2,PLOT_SHIFT,Shift);
//--- deslocando o início do desenho do indicador 3
   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,min_rates_total);
//--- indexação de elementos do buffer como séries temporais 
   ArraySetAsSeries(ExtMapBufferUp1,true);
//--- definição dos valores do indicador que não serão visíveis em um gráfico
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- símbolo do indicador
   PlotIndexSetInteger(2,PLOT_ARROW,118);
//--- Defina a matriz dinâmica ExtMapBufferDown1[] como um buffer indicador
   SetIndexBuffer(3,ExtMapBufferDown1,INDICATOR_DATA);
//---- deslocando o indicador 2 horizontalmente com a tecla Shift
   PlotIndexSetInteger(3,PLOT_SHIFT,Shift);
//--- deslocando o início do desenho do indicador 4
   PlotIndexSetInteger(3,PLOT_DRAW_BEGIN,min_rates_total);
//--- indexação de elementos do buffer como séries temporais 
   ArraySetAsSeries(ExtMapBufferDown1,true);
//--- definição dos valores do indicador que não serão visíveis em um gráfico
   PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- símbolo do indicador
   PlotIndexSetInteger(3,PLOT_ARROW,118);
//--- criação do nome a ser exibido em uma subjanela separada e em uma ajuda pop-up
   IndicatorSetString(INDICATOR_SHORTNAME,"VolatilityPivot");
//--- determinar a precisão dos valores do indicador
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//--- fim da inicialização
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Função de iteração de indicador personalizado|
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,    // número de barras no histórico no tick atual
                const int prev_calculated,// quantidade de histórico em barras no tick anterior
                const datetime &time[],
                const double &open[],
                const double& high[],     // matriz de preço dos máximos de preço para o cálculo do indicador
                const double& low[],      // matriz de preço dos mínimos de preço para o cálculo do indicador
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//--- verificando se o número de barras é suficiente para o cálculo
   if((BarsCalculated(ATR_Handle)<rates_total && Mode==Mode_ATR) || rates_total<min_rates_total) return(RESET);
//--- declarações de variáveis locais 
   double DeltaStop,Stop;
   static double PrevStop;
   int limit,bar;
//--- indexação de elementos em matrizes como em séries temporais 
   ArraySetAsSeries(close,true);
//--- cálculo do índice inicial "limite" para o loop de recálculo das barras
   if(prev_calculated>rates_total || prev_calculated<=0) // verificação do primeiro início de cálculo de um indicador
     {
      limit=rates_total-min_rates_total-1;               // índice inicial para o cálculo de todas as barras
      PrevStop=close[limit+1];
     }
   else limit=rates_total-prev_calculated;               // índice inicial para o cálculo de novas barras
//---
   if(Mode==Mode_Price)
     {
      //--- loop de cálculo do indicador principal
      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)
     {
      //--- declarações de variáveis locais 
      double ATR[];
      int to_copy,maxbar;
      //--- declaração das variáveis de classe CMoving_Average do arquivo SmoothAlgorithms.mqh 
      static CMoving_Average EMA;
      //--- indexação de elementos em matrizes como em séries temporais 
      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;
      //--- loop de cálculo do indicador principal
      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);
  }

erro de csv

 

Este é muito útil.

O autor é um cara de pau.