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

 
Yevhenii Levchenko:
¿Cómo establecer un filtro de tiempo (por horas) para el comercio de EA? Funcionará la siguiente opción:

YOU google (limitación de tiempo del EA - por ejemplo) - puede haber características especiales, por ejemplo, pujar de 22:00 hr a 04:00 hr. En las fuentes de Kim I.V. Asunto: Sólo fuentes útiles de Kim - echa un vistazo.

Aquí hay una opción:

extern int HourStart=2;
// время начала работы советника в часах по времени терминала - может быть от 0 до 23
extern int HourEnd=22;
// время окончания работы советника в часах по времени терминала
// пример - советник начинает работать в 2 часа 0 минут, заканчивает работу в 22, то есть в 22 часа и после советник не выставляет новых ордеров и ждет рабочего времени - 2 часа
extern bool Use_Time=false;

...

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  { 
   bool time_trade=false;
   if(Use_Time==false) {time_trade=true;}
   if(Use_Time==true && Hour()>=HourStart && Hour()<HourEnd) {time_trade=true;}

...
   
 
Roman Shiredchenko:

BUSCA EN EL GOBIERNO - puede haber características especiales, por ejemplo, pujar de las 22:00 hrs a las 04:00 hrs. En el tema de los f.i.v. de Kim: Sólo los f.i.v. útiles de Kim - echa un vistazo.

Aquí hay una opción:

Vaya, qué tema más chulo. Gracias.


¿Y lo que he hecho no funcionará?
 
Yevhenii Levchenko:

Vaya, qué tema más chulo. Gracias.


¿Y lo que he hecho no funcionará?

Sí, no sé - prepáralo y úsalo, descubre qué es lo correcto. Las bicicletas ya están inventadas, en mi opinión.

 
Yevhenii Levchenko:
¿Cómo puedo establecer el filtro de tiempo (por horas) para el comercio de EA? ¿Funcionaría la siguiente opción?

Ya discutimos esto hace tiempo, aquí hay un tema, mis ejemplos funcionan todos, yo lo uso, todo funciona en MT4https://www.mql5.com/ru/forum/317351


Yevhenii Levchenko:

¿Cuáles son las particularidades del uso de Symbol() y _Symbol?

¿Funcionaría correctamente el siguiente código para comprobar la presencia de órdenes para el símbolo actual?

No, Symbol() es una forma antigua de obtener el nombre del símbolo, las últimas construcciones para la compatibilidad MQL4 - MQL5 han añadido _Symbol

Si escribes código desde cero, usa _Symbol, si quieres portar el código a MQL5, tendrás menos que editar.

 
Igor Makanu:

Ya discutimos esto hace tiempo, aquí hay un tema, mis ejemplos funcionan todos, yo lo uso, todo funciona en MT4https://www.mql5.com/ru/forum/317351


No, Symbol() es una forma antigua de obtener el nombre del símbolo, las últimas construcciones para la compatibilidad MQL4 - MQL5 han añadido _Symbol

Si escribes código desde cero, usa _Symbol, si quieres portar el código a MQL5, tendrás menos que editar.

Gracias.

El código, por supuesto, es mucho más grande que lo que intenté prescribir... :) Tendré que sentarme y resolverlo...
 
Igor Makanu:

Ya discutimos esto hace tiempo, aquí hay un tema, mis ejemplos funcionan todos, yo lo uso, todo funciona en MT4https://www.mql5.com/ru/forum/317351


No, Symbol() es una forma antigua de obtener el nombre del símbolo, las últimas construcciones para la compatibilidad MQL4 - MQL5 han añadido _Symbol

Si escribes código desde cero, usa _Symbol, si quieres portar el código a MQL5, tendrás menos que editar.

La diferencia es diferente. _Symbol es una variable predefinida y Symbol() es una función.

Ambos trabajan allí y allí. Todo es exactamente igual. Pero hace tiempo, uno de los desarrolladores (no recuerdo cuál) dijo que era preferible utilizar una función.

 

Foro sobre comercio, sistemas de comercio automatizados y prueba de estrategias de comercio

¿Cuál es la diferencia entre Symbol() y _Symbol

fxsaber, 2019.07.07 14:47

void Func( const string& ) {}

void OnStart()
{
  Func(Symbol()); // ERROR: 'Symbol' - parameter passed as reference, variable expected
  Func(_Symbol);  // OK   
}
 
Artyom Trishkin:

La diferencia es diferente. _Symbol es una variable predefinida y Symbol() es una función.

Ambos funcionan en ambos sentidos. Todo es absolutamente idéntico. Pero hace algún tiempo uno de los desarrolladores (no recuerdo quién exactamente) dijo que era preferible utilizar una función.

Creo que la mejor manera de utilizarlo, he mirado a través de la ayuda, no hay ninguna recomendación definitiva de los desarrolladores

En la práctica, en algunas bibliotecas los desarrolladores anulan Symbol() en los métodos de la clase, en MQL5 también anulé el método Symbol() para el TF personalizado en mi clase .... Si es conveniente, lo uso así, no veo ninguna ofensa por los axiomas del libro ))))

SZZ: Creo que esto es una religión... La función iClose() no debe ser utilizada - "¡es una falsificación!" (С)

entonces aquí hay una nueva tendencia _Symbol es peor que Symbol() ...medí la velocidad por si acaso, no hay ninguna diferencia, el mismo trabajo

#property strict
//+------------------------------------------------------------------+
#define    test(count_x10,msg,EX)        {uint mss=GetTickCount(); ulong count=(ulong)pow(10,count_x10);for(ulong i=0;i<count&&!_StopFlag;i++){EX;} \
                                printf("%s: loops=%i ms=%u",msg,count,GetTickCount()-mss);}

//+------------------------------------------------------------------+
void OnStart()
  {
   Print("test 1:"); srand(GetTickCount()); test(9,"_Symbol",string s=_Symbol+IntegerToString(rand()));
   Print("test 2:"); srand(GetTickCount()); test(9,"Symbol()",string s=Symbol()+IntegerToString(rand()));
   Print("test 3:"); srand(GetTickCount()); test(9,"_Symbol",string s=_Symbol+IntegerToString(rand()));
   Print("test 4:"); srand(GetTickCount()); test(9,"Symbol()",string s=Symbol()+IntegerToString(rand()));
   Print("test 5:"); srand(GetTickCount()); test(9,"_Symbol",string s=_Symbol+IntegerToString(rand()));
   Print("test 6:"); srand(GetTickCount()); test(9,"Symbol()",string s=Symbol()+IntegerToString(rand()));
  }
//+------------------------------------------------------------------+

2019.08.09 00:54:20.631 tst EURUSD,H1: Symbol(): loops=1000000000 ms=66203

2019.08.09 00:53:14.432 tst EURUSD,H1: test 6:

2019.08.09 00:53:14.432 tst EURUSD,H1: _Símbolo: loops=1000000000 ms=65515

2019.08.09 00:52:08.921 tst EURUSD,H1: test 5:

2019.08.09 00:52:08.921 tst EURUSD,H1: Symbol(): loops=1000000000 ms=65610

2019.08.09 00:51:03.301 tst EURUSD,H1: test 4:

2019.08.09 00:51:03.301 tst EURUSD,H1: _Symbol: loops=1000000000 ms=65890

2019.08.09 00:49:57.418 tst EURUSD,H1: test 3:

2019.08.09 00:49:57.418 tst EURUSD,H1: Symbol(): loops=1000000000 ms=65563

2019.08.09 00:48:51.850 tst EURUSD,H1: test 2:

2019.08.09 00:48:51.850 tst EURUSD,H1: _Símbolo: loops=1000000000 ms=65750

2019.08.09 00:47:46.105 tst EURUSD,H1: test 1:

 
Igor Makanu:

Creo que debes usar lo que sea más conveniente. He mirado la referencia, no hay recomendaciones definitivas de los desarrolladores

En la práctica, en algunas bibliotecas los desarrolladores anulan Symbol() en los métodos de las clases, yo también anulé el método Symbol() para el TF personalizado en MQL5 .... Si es conveniente, lo uso así, no veo ninguna ofensa por los axiomas del libro ))))

SZZ: Creo que ya es una religión... La función iClose() no debe ser utilizada - "¡es una falsificación! (С)

entonces aquí hay una nueva tendencia _Symbol es peor que Symbol() ...medí la velocidad por si acaso, no hay ninguna diferencia, el mismo trabajo

2019.08.09 00:54:20.631 tst EURUSD,H1: Symbol(): loops=1000000000 ms=66203

2019.08.09 00:53:14.432 tst EURUSD,H1: test 6:

2019.08.09 00:53:14.432 tst EURUSD,H1: _Símbolo: loops=1000000000 ms=65515

2019.08.09 00:52:08.921 tst EURUSD,H1: test 5:

2019.08.09 00:52:08.921 tst EURUSD,H1: Symbol(): loops=1000000000 ms=65610

2019.08.09 00:51:03.301 tst EURUSD,H1: test 4:

2019.08.09 00:51:03.301 tst EURUSD,H1: _Symbol: loops=1000000000 ms=65890

2019.08.09 00:49:57.418 tst EURUSD,H1: test 3:

2019.08.09 00:49:57.418 tst EURUSD,H1: Symbol(): loops=1000000000 ms=65563

2019.08.09 00:48:51.850 tst EURUSD,H1: test 2:

2019.08.09 00:48:51.850 tst EURUSD,H1: _Símbolo: loops=1000000000 ms=65750

2019.08.09 00:47:46.105 tst EURUSD,H1: test 1:

Como dice el refrán: lo que se compra, se vende. La recomendación no estaba en la documentación, sino de boca en boca en el foro.

 
Igor Makanu:

¿Por qué la última línea no tiene una barra, y es posible devolver un valor de una macro

#define  FOR3(a,b,c,loop) for(int i=0; i<a; i++) \
for(int j=0; j<b; j++) \
for(int k=0; k<c; k++) \
{loop;}