Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1116

 
Roman:

La ayuda dice que debe devolverse el valor del marco temporal, no el identificador convertido conEnumToString()
La variable _Period devuelve int.
ENUM_TIMEFRAMES Period() también implica que se devuelve un int.

Usted es el único que lo implica. En realidad Period() devuelve el valor de la enumeración ENUM_TIMEFRAMES.

Si imprime los valores de las constantes de esta enumeración, verá números que ya conoce.

Y siempre ha sido así. Ha sido así desde el nacimiento de MQL5.

Y está claramente escrito en la ayuda lo que se devuelve:

El valor puede ser uno de los valores de la enumeración ENUM_TIMEFRAMES.

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

Usted es el único que insinúa esto. De hecho, Period() devuelve el valor de la enumeración ENUM_TIMEFRAMES.

Si imprime los valores de las constantes de esta enumeración, verá números que ya conoce.

Y siempre ha sido así. Ha sido así desde el nacimiento de MQL5.

Y la Ayuda ha escrito claramente lo que se devuelve:

¿Qué tipo cree que devuelve la enumeración ENUM?)
Y la referencia dice claramente
Devuelve el valor del marco temporal del gráfico actual.

Imprímelo por tu cuenta

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

Y la enumeración ENUM ¿qué tipo crees que devuelve?))
Y la referencia dice claramente
Devuelve el valor del marco temporal del gráfico actual.

Imprime el tuyo.

¿Qué quieres demostrarme?

Sé perfectamente qué se imprime y qué datos se devuelven, cuándo y dónde.

¿Quiere saber el número de minutos del período actual?

Consíguelo así:

PeriodSeconds(Period())/60;

o así:

PeriodSeconds(PERIOD_CURRENT)/60;

O así:

PeriodSeconds()/60;
 
Artyom Trishkin:

¿Qué quieres demostrarme?

Nada a ti, no te escribí sobre el problema, escribí a los desarrolladores.
Imprima más en M30, y en H1 y vea la diferencia.

Print(_Period);
 
Roman:

No te importa, no te escribí a ti sobre el problema, escribí a los desarrolladores.
Imprima más en M30, y en H1 y vea la diferencia.

No es un problema. Nunca lo ha sido.

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Bichos, errores, preguntas

Artyom Trishkin, 2020.04.09 22:11

¿Qué quieres demostrar?

Tengo un buen conocimiento de lo que se imprime y de los datos que se devuelven, cuándo y dónde.

¿Quiere saber el número de minutos del período actual?

conseguirlos de esta manera:

PeriodSeconds(Period())/60;

o así:

PeriodSeconds(PERIOD_CURRENT)/60;

o así:

PeriodSeconds()/60;

 
Roman:

No tienes que hacerlo, no te escribí el problema a ti, se lo escribí a los desarrolladores.
Imprima más en M30 y H1 y vea la diferencia.

¿No puedes alejarte de MQL4?

Hazlo en MQL4 así:

PeriodSeconds(Period())/60;

o así:

PeriodSeconds(PERIOD_CURRENT)/60;

O así:

PeriodSeconds()/60;

E imprimir los valores resultantes.

 
Artyom Trishkin:

¿No puedes alejarte de MQL4?

Hazlo en MQL4 así:

o así:

o así:

e imprimir los valores resultantes.

No he usado mql4 )) y no me he acostumbrado.
¿Por qué hay que dividir por 60 más?
¿Dónde dice eso en la ayuda?
Ya son tus muletas las que evitan el bicho.
Ahora comprueba tu muleta, en todos los plazos

Print(_Period / 60);
 
Roman:

No he usado mql4 )) y no me he acostumbrado.
¿Por qué hay que dividir por 60 más?
¿Dónde dice eso en la ayuda?
Ya son sus muletas las que evitan el bicho.

facepalm ...
 
Roman:

La variable _Period y la función Period() hasta M30 inclusive, muestra un valor en minutos.
Si el período M1 entonces 1
Si el período M2 entonces 2
...
Si el período M30 entonces 30

Es lógico que el periodo horario sea de 60
período de dos horas 120
tres horas 180
etc.

Pero a partir de H1 se muestran los valores erróneos.

si el programa emite "valores erróneos", hay que ver lo que el programa "piensa", pero sólo puede pensar en formato binario

Lo he comprobado, y así ha sido:

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

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

Realmente la manga...

Imprima en diferentes plazos.

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