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?
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_buffers4//--- 4 gráficos são usados#property indicator_plots4//+----------------------------------------------+//| Parâmetros de desenho do indicador de alta//+----------------------------------------------+//--- desenhando o indicador 1 como uma linha#property indicator_type1DRAW_LINE//--- a cor azul é usada para a linha do indicador#property indicator_color1clrBlue//--- a linha do indicador 1 é um traço de ponto#property indicator_style1STYLE_DASHDOTDOT//--- a largura da linha do indicador 1 é igual a 2#property indicator_width12//---- 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_type2DRAW_LINE//--- A cor HotPink é usada para a linha do indicador#property indicator_color2clrHotPink//--- a linha do indicador 2 é um traço de ponto#property indicator_style2STYLE_DASHDOTDOT//--- a largura da linha do indicador 2 é igual a 2#property indicator_width22//---- 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_type3DRAW_ARROW//--- A cor DeepSkyBlue é usada para o indicador#property indicator_color3clrDeepSkyBlue//--- a largura do indicador 3 é igual a 4#property indicator_width34//--- 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_type4DRAW_ARROW//--- a cor vermelha é usada para o indicador#property indicator_color4clrRed//--- a largura do indicador 4 é igual a 4#property indicator_width44//--- 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//+----------------------------------------------+inputuint atr_range=100;
inputuint ima_range=10;
inputdouble atr_factor=3;
input Mode_ Mode=Mode_ATR;
inputuint DeltaPrice=200;
inputint Shift=0; // Deslocamento horizontal do indicador em barras//+----------------------------------------------+//--- declaração de matrizes dinâmicas que//--- serão usados como buffers de indicadoresdouble ExtMapBufferUp[];
double ExtMapBufferDown[];
double ExtMapBufferUp1[];
double ExtMapBufferDown1[];
//---double dDeltaPrice;
//--- declaração de variáveis inteiras para os controles dos indicadoresint ATR_Handle;
//--- declaração de variáveis inteiras para o início do cálculo de dadosint min_rates_total;
//+------------------------------------------------------------------+//| Descrição da classe CMoving_Average|//+------------------------------------------------------------------+#include <SmoothAlgorithms.mqh>
//+------------------------------------------------------------------+//| Função de inicialização do indicador personalizado//+------------------------------------------------------------------+ intOnInit()
{
//--- Obtendo o identificador do indicador ATRif(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 indicadorSetIndexBuffer(0,ExtMapBufferUp,INDICATOR_DATA);
//---- deslocando o indicador 1 horizontalmente por ShiftPlotIndexSetInteger(0,PLOT_SHIFT,Shift);
//--- deslocando o início do desenho do indicador 1PlotIndexSetInteger(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áficoPlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- definir a matriz dinâmica ExtMapBufferDown[] como um buffer indicadorSetIndexBuffer(1,ExtMapBufferDown,INDICATOR_DATA);
//---- deslocando o indicador 2 horizontalmente com a tecla ShiftPlotIndexSetInteger(1,PLOT_SHIFT,Shift);
//--- deslocando o ponto de partida do cálculo do desenho do indicador 2PlotIndexSetInteger(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áficoPlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- Definir a matriz dinâmica ExtMapBufferUp1[] como um buffer indicadorSetIndexBuffer(2,ExtMapBufferUp1,INDICATOR_DATA);
//---- deslocando o indicador 1 horizontalmente por ShiftPlotIndexSetInteger(2,PLOT_SHIFT,Shift);
//--- deslocando o início do desenho do indicador 3PlotIndexSetInteger(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áficoPlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- símbolo do indicadorPlotIndexSetInteger(2,PLOT_ARROW,118);
//--- Defina a matriz dinâmica ExtMapBufferDown1[] como um buffer indicadorSetIndexBuffer(3,ExtMapBufferDown1,INDICATOR_DATA);
//---- deslocando o indicador 2 horizontalmente com a tecla ShiftPlotIndexSetInteger(3,PLOT_SHIFT,Shift);
//--- deslocando o início do desenho do indicador 4PlotIndexSetInteger(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áficoPlotIndexSetDouble(3,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- símbolo do indicadorPlotIndexSetInteger(3,PLOT_ARROW,118);
//--- criação do nome a ser exibido em uma subjanela separada e em uma ajuda pop-upIndicatorSetString(INDICATOR_SHORTNAME,"VolatilityPivot");
//--- determinar a precisão dos valores do indicadorIndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//--- fim da inicializaçãoreturn(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Função de iteração de indicador personalizado|//+------------------------------------------------------------------+intOnCalculate(constint rates_total, // número de barras no histórico no tick atualconstint prev_calculated,// quantidade de histórico em barras no tick anteriorconstdatetime &time[],
constdouble &open[],
constdouble& high[], // matriz de preço dos máximos de preço para o cálculo do indicadorconstdouble& low[], // matriz de preço dos mínimos de preço para o cálculo do indicadorconstdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//--- verificando se o número de barras é suficiente para o cálculoif((BarsCalculated(ATR_Handle)<rates_total && Mode==Mode_ATR) || rates_total<min_rates_total) return(RESET);
//--- declarações de variáveis locais double DeltaStop,Stop;
staticdouble 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 barrasif(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 principalfor(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 principalfor(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);
}
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
Busque o arquivo na pasta
C:\Users\XXX\AppData\Roaming\MetaQuotes\Terminal\ZXVVDASDADDEDADS23132\MQL5\Files
Exportação de valores de indicadores:
Autor: NFTrader
Exportação de valores de indicadores:
Autor: NFTrader
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?
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
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).
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
Este é muito útil.
O autor é um cara de pau.