Olá, estou tentandoconverter um indicador de mql4 para mql5. Basicamente eu só preciso de uma notificação sólida na IFM quando aparece uma barra vermelha. Como anexar este código de som agora à nova mfi?
Para ver exatamente, qual índice tem a barra mais à direita e a mais à esquerda no gráfico, use este método simples:
Em qualquer indicador, no MetaEditor, colocar um ponto de parada na primeira operação dentro da OnCakculate() (passo 1):
Comece a depuração dos dados históricos. Assim que você iniciar a depuração em seu ponto de parada, a depuração fará uma pausa. Depois acrescente duas expressões à observação: "time[rates_total-1]" e "time[0]" (passos 2 e 3). Agora podemos ver facilmente que nesta situação (a matriz de tempo[] tem a direção de indexação padrão, o ArrayAsSeries não foi aplicado), o elemento time[rates_total-1] será a barra mais à direita no gráfico (passo 4).
Espero que este método simples e claro lhe ajude a verificar rapidamente a direção da indexação nos indicadores.
Alexey Viktorov: Em mql5, a direção da indexação de barras é feita por padrão. Portanto, [i-1] será a primeira barra da direita.
Eu compreendo, portanto não esqueço de usar o ArraySetAsSeries.
A questão é que tanto no código mql4 como no mql5 é aplicado o mesmo cálculo "i-1", por que subtrair se a fórmula diz barra anterior e não barra futura?
Vladimir Karputov:
Para ver exatamente qual índice tem a barra mais direita e mais esquerda na tabela, use este truque simples:
Em qualquer indicador, no MetaEditor, colocar um ponto de parada na primeira operação dentro da OnCakculate() (passo 1):
Comece a depuração dos dados históricos. Assim que você iniciar a depuração em seu ponto de parada, a depuração fará uma pausa. Depois acrescente duas expressões à observação: "time[rates_total-1]" e "time[0]" (passos 2 e 3). Agora podemos ver facilmente que nesta situação (a matriz de tempo[] tem a direção de indexação padrão, o ArrayAsSeries não foi aplicado), o elemento time[rates_total-1] será a barra mais à direita no gráfico (passo 4).
Espero que este método simples e claro ajude a verificar rapidamente a direção da indexação nos indicadores.
Olá a todos!!! Comecei a modificar o indicador no MT5, mas não consigo entender a função do iTime, não consigo colocá-lo para funcionar, alguém pode dopilizar o indicador para uma condição de trabalho?????
O indicador lê o arquivo, que está localizado na pasta MQL5\Filesevolution-dvoid.
Bom dia a todos, eu não sou um programador, mas um de meus amigos diz que no código do indicador Bill Williams'sMarket Facilitation Index (BW MFI) os cálculos não são feitos estritamente de acordo com a fórmula clássica: BW MFI = (ALTO - BAIXO) / VOLUME E, além disso, é utilizada alguma correção adicional de dados. Isto é de fato um erro, e conseqüentemente o indicador exibe dados incorretos!
Favor informar como corrigir este erro no indicador (remover a correção de dados adicionais) e receber que funciona estritamente de acordo com a fórmula: BW MFI = (ALTO - BAIXO) / VOLUME ?????
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.
Olá, estou tentandoconverter um indicador de mql4 para mql5. Basicamente eu só preciso de uma notificação sólida na IFM quando aparece uma barra vermelha. Como anexar este código de som agora à nova mfi?
Anexei um exemplo da antiga versão de trabalho:
Diga-me da maneira correta, este é um cálculo Heiken Ashi
É um recorte do padrão
{
haOpen=(ExtOpenBuffer0[i-1]+ExtCloseBuffer0[i-1])/2; // <<<
haClose=(Open[i]+High[i]+Low[i]+Close[i])/4;
haHigh=MathMax(High[i],MathMax(haOpen,haClose));
haLow=MathMin(Low[i],MathMin(haOpen,haClose));
A questão surge: se Open deve ser procurado pela barra anterior, por que é procurado pela barra seguinte no código?
Provavelmente está correto desta maneira, ou estou entendendo algo errado:
Diga-me da maneira correta, este é um cálculo Heiken Ashi
É um recorte do padrão
{
haOpen=(ExtOpenBuffer0[i-1]+ExtCloseBuffer0[i-1])/2; // <<<
haClose=(Open[i]+High[i]+Low[i]+Close[i])/4;
haHigh=MathMax(High[i],MathMax(haOpen,haClose));
haLow=MathMin(Low[i],MathMin(haOpen,haClose));
A questão surge: se Open deve ser procurado pela barra anterior, por que é procurado pela barra seguinte no código?
Isto deve ser correto, ou estou entendendo algo errado?
Diga-me da maneira correta, este é um cálculo Heiken Ashi
É um recorte do padrão
{
haOpen=(ExtOpenBuffer0[i-1]+ExtCloseBuffer0[i-1])/2; // <<<
haClose=(Open[i]+High[i]+Low[i]+Close[i])/4;
haHigh=MathMax(High[i],MathMax(haOpen,haClose));
haLow=MathMin(Low[i],MathMin(haOpen,haClose));
A questão surge: se Open deve ser procurado pela barra anterior, por que é procurado pela barra seguinte no código?
Provavelmente da maneira correta, ou estou entendendo algo errado:
Para ver exatamente, qual índice tem a barra mais à direita e a mais à esquerda no gráfico, use este método simples:
Em qualquer indicador, no MetaEditor, colocar um ponto de parada na primeira operação dentro da OnCakculate() (passo 1):
Comece a depuração dos dados históricos. Assim que você iniciar a depuração em seu ponto de parada, a depuração fará uma pausa. Depois acrescente duas expressões à observação: "time[rates_total-1]" e "time[0]" (passos 2 e 3). Agora podemos ver facilmente que nesta situação (a matriz de tempo[] tem a direção de indexação padrão, o ArrayAsSeries não foi aplicado), o elemento time[rates_total-1] será a barra mais à direita no gráfico (passo 4).
Espero que este método simples e claro lhe ajude a verificar rapidamente a direção da indexação nos indicadores.
Em mql5, a direção da indexação de barras é feita por padrão. Portanto, [i-1] será a primeira barra da direita.
Eu compreendo, portanto não esqueço de usar o ArraySetAsSeries.
A questão é que tanto no código mql4 como no mql5 é aplicado o mesmo cálculo "i-1", por que subtrair se a fórmula diz barra anterior e não barra futura?
Para ver exatamente qual índice tem a barra mais direita e mais esquerda na tabela, use este truque simples:
Em qualquer indicador, no MetaEditor, colocar um ponto de parada na primeira operação dentro da OnCakculate() (passo 1):
Comece a depuração dos dados históricos. Assim que você iniciar a depuração em seu ponto de parada, a depuração fará uma pausa. Depois acrescente duas expressões à observação: "time[rates_total-1]" e "time[0]" (passos 2 e 3). Agora podemos ver facilmente que nesta situação (a matriz de tempo[] tem a direção de indexação padrão, o ArrayAsSeries não foi aplicado), o elemento time[rates_total-1] será a barra mais à direita no gráfico (passo 4).
Espero que este método simples e claro ajude a verificar rapidamente a direção da indexação nos indicadores.
Obrigado, eu não estava ciente disso.
Algum palpite sobre a exatidão dos cálculos?
Preciso fazer um alerta para o indicador CCI ARROWS.
Preciso que ele sinalize imediatamente após o aparecimento da flecha.
MT5
Olá a todos!!! Comecei a modificar o indicador no MT5, mas não consigo entender a função do iTime, não consigo colocá-lo para funcionar, alguém pode dopilizar o indicador para uma condição de trabalho?????
O indicador lê o arquivo, que está localizado na pasta MQL5\Filesevolution-dvoid.
Depois de baixá-lo, renomeá-lo para .csv
Obrigado de antemão.
Bom dia a todos, eu não sou um programador, mas um de meus amigos diz que no código do indicador Bill Williams'sMarket Facilitation Index (BW MFI) os cálculos não são feitos estritamente de acordo com a fórmula clássica: BW MFI = (ALTO - BAIXO) / VOLUME E, além disso, é utilizada alguma correção adicional de dados. Isto é de fato um erro, e conseqüentemente o indicador exibe dados incorretos!
Favor informar como corrigir este erro no indicador (remover a correção de dados adicionais) e receber
que funciona estritamente de acordo com a fórmula: BW MFI = (ALTO - BAIXO) / VOLUME ?????
//+------------------------------------------------------------------+
//| MarketFacilitationIndex.mq5 |
//| Copyright 2009, MetaQuotes Software Corp.
//|| http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp.
#link da propriedade "http://www.mql5.com"
//...- definições de indicadores
#janela_indicadora de propriedade_separarate_window
#property indicator_buffers 2
# indicadores de propriedade_plots 1
#indicador de propriedade_tipo1 DRAW_COLOR_HISTOGRAM
#Indicador de propriedade_color1 Cal,SaddleBrown,Blue,Pink
#largura_do_indicador de propriedade1 2
//--- parâmetro de entrada
input ENUM_APPLIED_VOLUME InpVolumeType=VOLUME_TICK; //volumes
//---- buffers
duplo ExtMFIBuffer[];
duplo ExtColorBuffer[];
//+------------------------------------------------------------------+
//| Função de inicialização do indicador personalizado |
//+------------------------------------------------------------------+
nulo OnInit()
{
//---- indicadores
SetIndexBuffer(0,ExtMFIBuffer,INDICADOR_DATA);
SetIndexBuffer(1,ExtColorBuffer,INDICADOR_COLOR_INDEX);
//--- nome para DataWindow
IndicatorSetString(INDICADOR_SHORTNAME, "BWMFI");
//... precisão do conjunto
IndicatorSetInteger(INDICADOR_DIGITOS,_Dígitos);
//----
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CalculateMFI(const int start,const int rates_total,
const double &high[],
const double &low[],
const long &volume[])
{
int i=start;
bool mfi_up=verdadeiro,vol_up=verdadeiro;
//--- calcular os primeiros valores de mfi_up e vol_up
if(i>0)
{
int n=i;
while(n>0)
{
if(ExtMFIBuffer[n]>ExtMFIBuffer[n-1]) { mfi_up=true; break; }
if(ExtMFIBuffer[n]<ExtMFIBuffer[n-1]) { mfi_up=falso; break; }
//--- se os valores mfi forem iguais, continuar
n--;
}
n=i;
while(n>0)
{
if(volume[n]>volume[n-1]) {vol_up=verdadeiro; break; }
if(volume[n]<volume[n-1]) { vol_up=falso; break; }
//--- se os volumes reais forem iguais, continuar
n--;
}
}
//---
while(i<rates_total && !IsStopped())
{
if(volume[i]==0)
{
if(i>0) ExtMFIBuffer[i]=ExtMFIBuffer[i-1];
senão ExtMFIBuffer[i]=0;
}
senão ExtMFIBuffer[i]=(high[i]-low[i])/_Point/volume[i];
//--- calcular mudanças
if(i>0)
{
if(ExtMFIBuffer[i]>ExtMFIBuffer[i-1]) mfi_up=verdadeiro;
if(ExtMFIBuffer[i]<ExtMFIBuffer[i-1]) mfi_up=false;
if(volume[i]>volume[i-1]) vol_up=verdadeiro;
if(volume[i]<volume[i-1]) vol_up=falso;
}
//... - definir cores
if(mfi_up && vol_up) ExtColorBuffer[i]=0.0;
if(!mfi_up && !vol_up) ExtColorBuffer[i]=1.0;
if(mfi_up && !vol_up) ExtColorBuffer[i]=2.0;
if(!mfi_up && vol_up) ExtColorBuffer[i]=3.0;
i++;
}
}
//+------------------------------------------------------------------+
//| Função de iteração de indicador personalizada |
//+------------------------------------------------------------------+
int OnCalculate(const int taxas_total,
const int prev_calculado,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
int start=0;
//---
if(start<prev_calculated) start=prev_calculated-1;
//--- calcular com carrapato ou com volumes reais
if(InpVolumeType==VOLUME_TICK)
CalculateMFI(start,rates_total,high,low,tick_volume);
senão
CalculateMFI(start,rates_total,high,low,volume);
//--- normalizar o último valor mfi
if(tarifas_total>1)
{
datetime ctm=TimeTradeServer(),lasttm=time[tarifas_total-1],nexttm=lasttm+datetime(PeriodSeconds());
if(ctm<nexttm && ctm>=lasttm && nexttm!=lasttm)
{
double correction_koef=double(1+ctm-lasttm)/double(nexttm-lasttm-lasttm);
ExtMFIBuffer[rates_total-1]*=correction_koef;
}
}
//---
retorno(taxas_total);
}
//+------------------------------------------------------------------+
Por favor, diga-me que tipo de código é este e como transformá-lo em um indicador MT5 ?
// Este é um indicador baseado em volume. Faça shure para usar a entrada de volume adequada.
Por favor, diga-me que tipo de código é este e como transformá-lo em um indicador MT5 ?
// Este é um indicador baseado em volume. Faça shure para usar a entrada de volume adequada.
BW MFI Barra de agachamento , 3 tampão ( se a memória servir)