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

 
Karputov Vladimir:

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 nada nesta cela, ela irá armazenar lixo.

Porque não é lixo no MT4 mas simplesmente não mostra o indicador debaixo desta barra?
 
Aleksey Lebedev:

Quando se dividem números inteiros (int,long,datetime etc.) o resultado é um número inteiro, ou seja, o restante é descartado. 00:00 de hoje e 23:59:59 de ontem, a diferença será de 1 dia.

Em primeiro lugar, não é - está provado experimentalmente no indicador.

Em segundo lugar, como se obtém um 1 - mostre-me matematicamente, dado que estamos originalmente a calcular em segundos.

 
Alexey Kozitsyn:
Exactamente da mesma forma que a zeragem de tipos simples. Atribuindo-lhes um valor 0. Uma vez atribuído aos campos requeridos um valor 0 - utilizar a operação inversa StructToTime().

Zerado:

MqlDateTime str1;
datetime  Open_timePos=iTime(_Symbol,0,pos);
TimeToStruct(Open_timePos,str1);
   str1.hour=0;
   str1.min=0;
   str1.sec=0;
datetime  start_time=StructToTime(str1);
Print("день=",TimeToStr(start_time));

Tudo funcionou - obrigado!
 

Aleksey Lebedev:
При делении целых чисел(int,long,datetime и т.п.) результат целое число, т.е. остаток отбрасывается. 00:00 сегодня и 23:59:59 вчера, разность будет равна 1дню.

-Aleks-:

Antes de mais, não é - comprovado experimentalmente no indicador.

Não discuta com o básico).

-Aleks-:

Segundo, como se obtém 1 - mostrar-me matematicamente, dado que inicialmente temos o cálculo em segundos.

datetime today=D'2016.03.09 00:00:00';
datetime yesterday=D'2016.03.08 23:59:59';
Print("today=",86400*(today/86400)," value=",int(today));
Print("yesterday=",86400*(yesterday/86400)," value=",int(yesterday));
Print("разница в днях = ",int(today/86400-yesterday/86400));

Utilizar a conversão através da estrutura, se for mais fácil de compreender.

 
Aleksey Lebedev:

Não conteste o básico)

Utilizar a conversão da estrutura se for mais fácil de compreender.

O que se entende é o que tem sido tratado. Ainda não experimentei o seu código para o executar, mas penso que o fez você mesmo, por isso explique-me de forma pouco inteligente como funciona:

86401/86400-86400/86400 igual a 1, se por regras matemáticas 1.000012-1=0.000012 , e int deve arredondar-se para o inteiro, isto é, 0.

 
-Aleks-:

O que se entende é o que tem sido tratado. Não tentei executar o seu código, mas penso que o fez você mesmo, por isso explique-me de forma ininteligente como funciona:

86401/86400/86400 igual a 1, se de acordo com as regras da matemática 1.000012-1=0.000012 , e int deve arredondar para inteiro, ou seja, 0.

mas fá-lo)

O início do dia 00:00:00 é dividido por 86400 sem um resto, o anterior é pelo menos 1 segundo a menos. Arredondado - o resto da divisão é descartado, não toda a expressão.

86400/86400=1

86399/86400=0

 
Aleksey Lebedev:

e depois executá-lo)

O início do dia 00:00:00 é dividido por 86400 sem um resto, sendo o anterior pelo menos 1 segundo a menos. Arredondado - o resto da divisão é descartado, não toda a expressão.

86400/86400=1

86399/86400=0

por isso surpreende-me que o arredondamento peculiar aconteça dentro de uma expressão - pensei que era quando a uma variável era atribuído um valor que o valor após o ponto decimal era descartado.
 
Rapazes! É possível exibir o indicador no gráfico de forma programática? Ou apenas à mão?
 
Vladimir Tkach:
Rapazes! É possível exibir o indicador no gráfico de forma programática? Ou apenas à mão?
Pode fazê-lohttps://www.mql5.com/ru/docs/chart_operations/chartindicatoradd
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
  • www.mql5.com
Операции с графиками / ChartIndicatorAdd - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
está em mql5, e em mql4?