HELP !!!! converter um indicador do MT4 para MT5. - página 5

 

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:

Arquivos anexados:
 

Diga-me da maneira correta, este é um cálculo Heiken Ashi

É um recorte do padrão

for(i=pos/*pos=1*/; i<rates_total ;i++)
  {
   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:

haOpen=(ExtOpenBuffer0[i+1]+ExtCloseBuffer0[i+1])/2;
Obrigado!
 
Vitaly Muzichenko:

Diga-me da maneira correta, este é um cálculo Heiken Ashi

É um recorte do padrão

for(i=pos/*pos=1*/; i<rates_total ;i++)
  {
   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?

haOpen=(ExtOpenBuffer0[i+1]+ExtCloseBuffer0[i+1])/2;
Obrigado!
Em mql5, a direção da indexação de barras é feita por padrão. Portanto, [i-1] será apenas a primeira barra à direita.
 
Vitaly Muzichenko:

Diga-me da maneira correta, este é um cálculo Heiken Ashi

É um recorte do padrão

for(i=pos/*pos=1*/; i<rates_total ;i++)
  {
   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:

haOpen=(ExtOpenBuffer0[i+1]+ExtCloseBuffer0[i+1])/2;
Obrigado!

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):

verificação da indexação

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.

Obrigado, eu não estava ciente disso.

Algum palpite sobre a exatidão dos cálculos?

 
Olá.
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.

Arquivos anexados:
 

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.


//Squat bars são uma batalha dos touros e dos ursos, com muita compra e venda, mas pouco movimento de preços.
//A barra de agachamento será uma das três barras superiores OU três inferiores 85% do tempo no final de uma tendência.
// Enquanto todas as tendências terminam com um agachamento, todos os agachamentos NÃO são o fim de uma tendência.

estudo("Williams Squat Bars", shorttitle="Squat Bars", overlay=verdadeiro)
r_hl=roc((high-low)/volume,1)
r_v=roc(volume,1)
squat_f=(r_hl < 0) e (r_v > 0)
barcolor(squat_f ? azul : na)
 
Olexiy Polyakov:

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.


//Squat bars são uma batalha dos touros e dos ursos, com muita compra e venda, mas pouco movimento de preços.
//A barra de agachamento será uma das três barras superiores OU três inferiores 85% do tempo no final de uma tendência.
// Enquanto todas as tendências terminam com um agachamento, todos os agachamentos NÃO são o fim de uma tendência.

estudo("Williams Squat Bars", shorttitle="Squat Bars", overlay=verdadeiro)
r_hl=roc((high-low)/volume,1)
r_v=roc(volume,1)
squat_f=(r_hl < 0) e (r_v > 0)
barcolor(squat_f ? azul : na)

BW MFI Barra de agachamento , 3 tampão ( se a memória servir)