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

 

¿Es posible crear una plantilla y aplicarla a varias funciones?

template<typename T>
void Fun1(T &y)
{тело
}
void Fun1(T &r,T k)
{тело
}
int Fun1(T &r,T k)
{тело return(0);
}

Si se utilizan variables del mismo tipo, sería muy útil saber si es posible utilizar una plantilla para varias funciones.

 
Buenas tardes, ¿podrían decirme cómo añadir las cotizaciones del petróleo, los índices y los metales?
 
vfrfhjybgjakjncmrb:
Hola, ¿podríais decirme cómo añadir cotizaciones de petróleo, índices y metales?

Depende, en primer lugar, de si la oficina los emite o no. También depende de la terminal en la que trabajes. Si la oficina las emite, entonces hay que saber en qué cuentas y bajo qué condiciones se emiten estas cotizaciones, tal vez sólo hay que abrir la lista de instrumentos y estos instrumentos están ahí. Si la oficina las emite en condiciones imposibles para ti, tienes que crear una tabla con estas cotizaciones y actualizarlas cada vez. ¿Sabe con certeza que su empresa de corretaje emitirá petróleo?

 
Seric29:

¿Es posible crear una plantilla y aplicarla a varias funciones?

Si se utilizan variables del mismo tipo, sería muy útil saber si es posible utilizar una plantilla para varias funciones.

No. Debe darse una descripción completa de cada función por separado. De lo contrario, no podrás leer tu propio código después.

 
¿Cómo puedo eliminar un indicador concreto de todos los gráficos de una sola vez? La aplicación de una nueva plantilla no funciona. ¿Qué tal un guión?
 
Ilya Prozumentov:

No. La descripción completa de cada función debe hacerse por separado. De lo contrario, no podrás leer tu propio código después de un tiempo.

Es una pena. De todos modos, no podrás leer tu propio código si no lo haces. Sólo quiero escribir programas compactos, porque a menudo se utilizan variables del mismo tipo en las funciones, por eso lo he preguntado. Pensé que sería posible utilizar "clases", pero todavía no estoy familiarizado con ellas. Así sabré si tengo que hacer plantillas para muchas funciones.

 

Quién puede decirme por qué esta entrada no funciona. Quiero acceder a los campos de las estructuras que almacenan un array y rotarlo dependiendo de la condición que se cumpla.La ejecución de la condición depende de la funciónArrayDimension.

   struct SD1{
   int a[10];//int q[10][2];
};SD1 a1;

struct SD2{
   int a[10][2];
};SD2 a2;

template<typename T>//,typename W
void MoveArray(T & s){//,W&e
   //Alert(ArrayDimension(s.a));
     int r=0;r=ArrayDimension(s.a);Print("r-ранг: ",r);if(r==1)пишу условие что если ранг равен 1му 
      {for(int cn=0; cn<=8; cn++)                              то крутить этот цикл
     {                
      s.a[cn]=s.a[cn+1];
     }} else if (r==2)            если ранг равен 2ум
      {for(int cn=0; cn<=8; cn++) крутить этот цикл
     {                
      s.a[cn][0]=s.a[cn+1][0];
      s.a[cn][1]=s.a[cn+1][1];
     }}  
}

Al finalse mete en el primer bucle apesar deque esta condiciónif(r==1)es falsa, por qué llega allí si el rango es 2um, cómo a pesar del false llega al cuerpo donde se ejecuta algo.

   MoveArray(a2);в OnTick
   for(int i=0;i<10;i++){Print("q: ",i,": ",a2.a[i][0]);}
int yy=ArrayDimension(a2.a);Print("Ранг: ",yy," ");
 
Seric29:

Lástima. De todos modos, no podrás leer tu propio código si no lo haces o si no lo haces. Sólo quiero escribir programas compactos, porque a menudo se utilizan variables del mismo tipo en las funciones, por eso lo he preguntado. Pensé que sería posible utilizar "clases", pero todavía no estoy familiarizado con ellas. Así sabré si tengo que hacer plantillas para muchas funciones.

No consigo captar la esencia de cómo se lograría la compacidad. En el ejemplo anterior se guardan 2 líneas. Si quiere ahorrarse tanto, puede escribir una macrosustitución y utilizarla en la línea anterior a la función

#define  templ(T) templeate<typename T>

templ(T1) void Funct(T1 a)
 
Ilya Prozumentov:
#define  templ(T) template<typename T>

templ(T1) void Funct(T1 a)

¿Es necesario escribirtempl(T1) delante de cada funcióny que ésta tome una variable o el argumento requerido? ¿Por qué se declaratempl(T) y se llamatempl(T1), debo añadir un número antes de cada función(templ(T1)templ(T2)templ(T3)) o debo escribirtempl(T1) en todas partes?Y si se anotan varios parámetros entemplate<typename T>entonces cómo sería, como estetemplate<typename T,typename P,typename Q>-templ(T,P,Q).

 
¡Tengo un problema! ¡Quiero arrastrar beneficios con otro EA, pero este EA no me deja tirar de stop loss para obtener beneficios! ¿Alguien puede corregirlo? ¡El autor no responde!
Archivos adjuntos:
cm-MA_Gread.mq4  18 kb
Razón de la queja: