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

 
Priffekt:
Buenas tardes, he cambiado todos los valores, pero me interesa la posibilidad de desactivar la función en sí en la configuración del EA.

Buenos días.

Cuando pegues un trozo de código, utiliza el botón </>, será mucho más legible, te escribí arriba que "es mejor adjuntarlo así".

En el post 8518 te he enviado tu propio código en el que ya he añadido el interruptor. Sólo tienes que separar la primera línea a las variables entrantes, la segunda línea a OnTick.

 
Sergey Voytsekhovsky:

Por supuesto, no soy muy adecuado para el papel de asesor, pero la tarea parece no ser difícil.

Ten en cuenta que no voy a entrar en tu código propiamente dicho, hay mucha controversia, incluso para mí (los tontos), empezando por el hecho de que tu función es de tipo void. Este tipo se utiliza para indicar que la función no devuelve un valor, o como parámetro de la función indica la ausencia de parámetros. Y tienes return(Exist) al final de tu código;

Declare una variable de entrada, escríbala como un parámetro para su función y salga de la función si establece 'esta variable a False.

El destacado es absolutamente erróneo. Nadie prohíbe el manejo de variables declaradas globalmente.

int n = 0;

int OnInit()
 {
  f();
 }

void OnTick()
 {
  Print(n);
  f();
 }

void f()
 {
  n += n*3+12;
 }
 
Priffekt:
Buenas tardes, he cambiado todos los valores, pero me interesa la posibilidad de desactivar la función en sí en los ajustes del EA.

Si quieres poder desactivar una función en los ajustes de EA, tienes que establecer una bandera variable

input bool flag = true; // флаг отключения

void OnTick()
 {
  if(flag)
   f();
 }

void f()
 {
  // что-то выполняем
 }
La función f() se ejecutará sólo si flag == true;
 
Alexey Viktorov:

Esto es absolutamente incorrecto. Nadie prohíbe el tratamiento de variables declaradas a nivel global.

Extraño, esto es en realidad una cita del manual MQL5, en su totalidad se ve así:

" El tipo void y la constante NULL.

La sintaxis del tipo void es un tipo fundamental, junto con los tipos char, uchar, bool, short, ushort, int, uint, color, long, ulong, datetime, float, double y string. Este tipo se utiliza para indicar que la función no devuelve ningún valor, o como parámetro de la función para indicar la ausencia de parámetros.

Una variable constante predefinida NULL es de tipo void. Se puede asignar a variables de cualquier otro tipo fundamental sin transformación. También se permite la comparación de variables de tipos fundamentales con el valor NULL".


He citado este fragmento porque la función en el texto del autor tiene el tipo void, es decir, no debería devolver nada más que ".return(Exist);". Lo que probablemente sea un error, ¿no crees?

Toda la discusión sobre el manejo de los datos nunca fue aprobada. Puede que me equivoque en algún punto, ya que apenas estoy aprendiendo lo básico, pero gracias por la información de todos modos.

 
 
 
Alekseu Fedotov:

"...return(Exist);" ,

valor de retorno, por función

así

Sí, tienes razón, no estuve atento y atribuí esta vuelta a la función anterior (sobre la que).

 
Alexey Viktorov:

No se trata de eso... Es que no leí con atención el resaltado.

El viod resaltado significa que no hay parámetros. Pero no tienes que escribirlo. No hay parámetros, así que no...

Sí, tienes razón, yo también estaba desatento.

 

Pregunta para los expertos.

Estoy tratando de escribir un EA, encontré un script que se adapta a mis necesidades en términos de funcionalidad. Quiero hacer una función, estoy preparando el entorno, por supuesto hay intersecciones en las bibliotecas estándar. Quiero entender la diferencia entre estas entradas y si el signo " * " en sí mismo cualquier significado secreto, es posible cambiar el nombre en un solo tipo dentro de las funciones futuras?

CTrade         trade;
CPositionInfo  apos;
CSymbolInfo    asymbol;


CTrade         *m_trade;
CSymbolInfo    *m_symbol;
CPositionInfo  *m_position_info; 

 

Ayuda, ¿cómo puedo averiguar la primera coordenada temporal de la línea de tendencia?

price = NormalizeDouble(ObjectGetValueByShift("trend",0),Digits);//ЦЕНА НА ТЕКУЩЕМ