Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1116

 
Roman:

A ajuda diz que o valor do período deve ser retornado, não o identificador convertido comEnumToString()
A variável _Periodo retorna int.
ENUM_TIMEFRAMES Período() também implica na devolução da int.

Você é o único que o implica. Na verdade Period() retorna o valor do enum_TIMEFRAMES.

Se você imprimir os valores das constantes nesta enumeração, você verá números com os quais você já está familiarizado.

E sempre foi assim. Tem sido assim desde o nascimento da MQL5.

E está claramente escrito na ajuda o que é devolvido:

O valor pode ser um dos valores da enumeração ENUM_TIMEFRAMES.

Документация по MQL5: Проверка состояния / Period
Документация по MQL5: Проверка состояния / Period
  • www.mql5.com
Проверка состояния / Period - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin:

Você é o único que implica isto. Na verdade, Period() retorna o valor da enumeração ENUM_TIMEFRAMES.

Se você imprimir os valores das constantes nesta enumeração, você verá números com os quais você já está familiarizado.

E sempre foi assim. Tem sido assim desde o nascimento da MQL5.

E a Ajuda escreveu claramente o que é devolvido:

Que tipo você acha que a enumeração ENUM retorna?)
E a referência diz claramente
Retorna o valor do cronograma do gráfico atual.

Imprima-o por conta própria

Print(PERIOD_M30);
Print(PERIOD_H1);
 
Roman:

E a enumeração ENUM que tipo você acha que ela retorna?))
E a referência diz claramente
Retorna o valor do cronograma do gráfico atual.

Imprima o seu próprio.

O que você quer provar para mim?

Estou perfeitamente ciente do que está sendo impresso e quais dados estão sendo devolvidos, quando e onde.

Você quer o número de minutos do período atual?

Faça desta forma:

PeriodSeconds(Period())/60;

ou assim:

PeriodSeconds(PERIOD_CURRENT)/60;

Ou assim:

PeriodSeconds()/60;
 
Artyom Trishkin:

O que você quer provar para mim?

Nada para você, eu não lhe escrevi sobre o problema, eu escrevi para os desenvolvedores.
Imprima mais em M30, e em H1 e veja a diferença.

Print(_Period);
 
Roman:

Você não se importa, eu não escrevi para você sobre o problema, eu escrevi para os desenvolvedores.
Imprima mais em M30, e em H1 e veja a diferença.

Não é um problema. Nunca foi.

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

Bichos, insetos, perguntas

Artyom Trishkin, 2020.04.09 22:11

O que você quer provar?

Tenho uma boa compreensão do que é impresso e quais dados são devolvidos, quando e onde.

Você quer o número de minutos do período atual?

colocá-los desta forma:

PeriodSeconds(Period())/60;

ou assim:

PeriodSeconds(PERIOD_CURRENT)/60;

ou assim:

PeriodSeconds()/60;

 
Roman:

Você não precisa, eu não escrevi sobre o problema para você, eu o escrevi para os desenvolvedores.
Imprima mais em M30 e H1 e veja a diferença.

Você não pode se afastar da MQL4?

Faça isso na MQL4 desta forma:

PeriodSeconds(Period())/60;

ou assim:

PeriodSeconds(PERIOD_CURRENT)/60;

Ou assim:

PeriodSeconds()/60;

E imprimir os valores resultantes.

 
Artyom Trishkin:

Você não pode se afastar da MQL4?

Faça isso na MQL4 desta forma:

ou assim:

ou assim:

e imprimir os valores resultantes.

Eu não usei mql4 )) e não me acostumei.
Por que você tem que dividir por mais 60?
Onde diz isso na ajuda?
Já são suas muletas que contornam o bug.
Agora verifique sua muleta, em todos os períodos de tempo

Print(_Period / 60);
 
Roman:

Eu não usei mql4 )) e não me acostumei.
Por que você tem que dividir por mais 60?
Onde diz isso na ajuda?
Já são suas muletas que contornam o bug.

facepalm ...
 
Roman:

Variável _Período e Período() até M30, inclusive, exibe um valor em minutos.
Se o período M1 então 1
Se o período M2 então 2
...
Se o período M30 então 30

É lógico que o período horário será de 60
período de duas horas 120
três horas 180
etc.

Mas a partir de H1, os valores errados são exibidos.

se o programa produzir "valores errados", você precisa ver o que o programa "pensa", mas ele só pode pensar em formato binário

Eu verifiquei, e assim foi:

void OnStart()
{

   ENUM_TIMEFRAMES allperiod[] = {PERIOD_CURRENT, PERIOD_M1, PERIOD_M2, PERIOD_M3, PERIOD_M4, PERIOD_M5, PERIOD_M6, PERIOD_M10, PERIOD_M12, PERIOD_M15, PERIOD_M20, PERIOD_M30, PERIOD_H1, PERIOD_H2,
                                  PERIOD_H3, PERIOD_H4, PERIOD_H6, PERIOD_H8, PERIOD_H12, PERIOD_D1, PERIOD_W1, PERIOD_MN1
                                 };
   for(int i = 0; i < ArraySize(allperiod); i++)
      Print(UintToBinary((uint)allperiod[i]));

}
//+------------------------------------------------------------------+
string UintToBinary(uint n)
{
   string r = "";
   if(n == 0) return("0");
   while(n != 0)
   {
      r = (n % 2 == 0 ? "0" : "1") + r;
      n /= 2;
   }
   return(r);
}
//+------------------------------------------------------------------

2020.04.10 00:38:57.118 tst (EURUSD,H1) 0

2020.04.10 00:38:57.118 tst (EURUSD,H1) 1

2020.04.10 00:38:57.118 tst (EURUSD,H1) 10

2020.04.10 00:38:57.118 tst (EURUSD,H1) 11

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100

2020.04.10 00:38:57.118 tst (EURUSD,H1) 101

2020.04.10 00:38:57.118 tst (EURUSD,H1) 110

2020.04.10 00:38:57.118 tst (EURUSD,H1) 1010

2020.04.10 00:38:57.118 tst (EURUSD,H1) 1100

2020.04.10 00:38:57.118 tst (EURUSD,H1) 1111

2020.04.10 00:38:57.118 tst (EURUSD,H1) 10100

2020.04.10 00:38:57.118 tst (EURUSD,H1) 11110

2020.04.10 00:38:57.118 tst (EURUSD,H1) 10000000001

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000000010

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000000011

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000000100

2020.04.10 00:38:57.118 tst (EURUSD,H1) 1000000000110

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000001000

2020.04.10 00:38:57.118 tst (EURUSD,H1) 1000000001100

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000011000

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000001

2020.04.10 00:38:57.118 tst (EURUSD,H1) 1100000000000001


 
Artyom Trishkin:
facepalm ...

Manga de verdade...

Imprimir em diferentes prazos.

Print(_Period);
2020.04.09 23:39:49.963 VP (EPM20,M1)   1
2020.04.09 23:39:53.135 VP (EPM20,M3)   3
2020.04.09 23:39:53.758 VP (EPM20,M5)   5
2020.04.09 23:39:54.377 VP (EPM20,M10)  10
2020.04.09 23:39:55.094 VP (EPM20,M15)  15
2020.04.09 23:39:55.679 VP (EPM20,M30)  30
2020.04.09 23:39:56.384 VP (EPM20,H1)   16385  //Почему не 60 ?
2020.04.09 23:39:57.071 VP (EPM20,H4)   16388  //Почему не 240 ?
2020.04.09 23:39:57.641 VP (EPM20,D1)   16408  //Почему не 1440 ?
2020.04.09 23:39:58.181 VP (EPM20,W1)   32769  и т.д.
2020.04.09 23:39:58.768 VP (EPM20,MN1)  49153
Razão: