Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 534

 
MikeZv:

Vladimir, obrigado pela resposta à primeira pergunta, senti falta destas características.

Coloco um e o mesmo indicador em MT4 e em MT5 (claro, o código é adaptado a cada plataforma).
Até à barra zero os seus valores são os mesmos, portanto, aparentemente de um extremo ... :)
E quando se desactiva o cálculo na barra actual em MT4 nada é desenhado sob a barra actual, em MT5 - valores errados.

Fórum sobre comércio, sistemas de comércio automatizados e testes estratégicos

Perguntas de principiantes

Karputov Vladimir, 2016.03.08 15:13

... Para verificação do conjunto de depuração - que valor está contido no tempo da série temporal [i] - para que se entenda em que fim se inicia o cálculo das barras e onde se tem uma barra "zero".


 
MikeZv:
E como colocar tal verificação ?

No MetaEditore adicionar um ponto de paragem e iniciar a depuração. Quando o ponto de paragem é interrompido, adicionar tempo[0] à observação:

Depuração de contas

 
Karputov Vladimir:

No MetaEditore adicionar um ponto de paragem e iniciar a depuração. Quando o ponto de paragem é interrompido, adicionar tempo[0] à observação:


Já introduzi a saída no código

MT4 2016.03.08 18:37:04.710 mvt_Vlt EURUSD,H1: hora[0] = 2016.03.08 17:00:00 hora[tarifas_total-1] = 1971.01.04 00:00:00

MT5 2016.03.08 18:36:23.565 mvt_Vlt (EURUSD,H1) hora[0] = 2010.01.04 00:00:00 hora[tarifas_total-1] = 2016.03.08 17:00:00

Inserido no código MT5ArraySetAsSeries(time,true);
agora saída:

MT5 2016.03.08 18:45:05.402 mvt_Vlt (EURUSD,H1) time[0] = 2016.03.08 17:00:00 time[rates_total-1] = 2010.01.04 00:00:00

E fazer também matrizes de preços ?


 
MikeZv:
Já coloquei a saída no código

MT4 2016.03.08 18:37:04.710 mvt_Vlt EURUSD,H1: hora[0] = 2016.03.08 17:00:00 hora[tarifas_total-1] = 1971.01.04 00:00

MT5 2016.03.08 18:36:23.565 mvt_Vlt (EURUSD,H1) hora[0] = 2010.01.04 00:00:00 hora[tarifas_total-1] = 2016.03.08 17:00:00
O que faço agora ?

Em ambas as versões do indicador adicionarArraySetAsSeries- para as matrizes que utiliza para os seus cálculos: alta[], baixa[] e temporariamente para a matriz de tempo[] - irá ajudá-lo a compreender onde está a barra "zero". Assim, a barra "zero" em ambas as versões estará do mesmo lado do gráfico (direita ou esquerda - dependendo do que definir no ArraySetAsSeries), e obterá a mesma parte de cálculo do indicador.

Acrescentado: enquanto estava a dactilografar, você tem a forma correcta de o fazer :)

 
Karputov Vladimir:


Adicionado: enquanto estava a dactilografar, encontrou o caminho certo :)

Encontrei-o, mas ainda não está a contar correctamente. :)
Coloquei-o em código MT5:
   ArraySetAsSeries(ExtCalcVlBuffer,true); 
   ArraySetAsSeries(ExtMovingBuffer,true);
   ArraySetAsSeries(ExtStdDevBuffer,true);
   ArraySetAsSeries(time,true);             
   ArraySetAsSeries(low,true);              
   ArraySetAsSeries(high,true); 

Está a sair:

produz ExtCalcVlBuffer, mas a média e o desvio não contam...
E continua a sair no bar actual, embora não o deva fazer.

 
MikeZv:
...

E ainda se exibe no bar actual, embora não o devesse fazer.

Porque não deveria?
 
Karputov Vladimir:
Porque não deveria?
Eu desliguei-o i<rates_total-1
 
MikeZv:
Eu desliguei-o i<rates_total-1
PORQUÊ?!
 
Karputov Vladimir:
PORQUÊ?!
E não precisa de contar com o actual, é apenas um desperdício de tempo de CPU, e não precisa do valor.
 
MikeZv:
Não precisa de usar o valor actual, apenas carregará o processador e simplesmente não precisa deste valor.

Tem de especificar isso imediatamente :) .

A situação é a seguinte: se houver uma barra no gráfico, ela corresponde a uma célula no tampão indicador. Desde que não se escreva algo nesta cela, esta cela irá armazenar lixo.

Razão: