[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 291

 
alsu >> :

Estás confundiendo la noción de "biblioteca" (de la que se extraen las funciones mediante #import) y la de "archivo de cabecera incluido" (#include).


Las librerías se encuentran en la carpeta de librerías, sus fuentes tienen la extensión *.mq4, al igual que los indicadores y los Asesores Expertos. Se compilan en el archivo *.ex4 (desde el cual se importan las funciones listas en otros programas, así

Para compilar la biblioteca correctamente, por regla general, debe escribir primero la directiva de biblioteca #property.

Los archivos de cabecera Include se utilizan para incluir trozos de código ya preparados en diversos programas. Se almacenan en la carpeta includes, tienen la extensión *.mqh y se incluyen en el texto (es decir, en el texto) del programa utilizando la directiva #include <...>; no es necesario compilarlos por separado, ya que se compilan junto con el programa principal.

Por cierto, antes la librería se generaba con una plantilla con #property library, y ahora no. ¿Alguien sabe por qué han cambiado la plantilla o simplemente se han olvidado de incluirla?

PD Si no fuera por alsu, no habría entendido lo que quería saber el que preguntaba, me estoy haciendo viejo.

 
Urain >> :

Por cierto, antes la librería se generaba usando una plantilla con #property library, pero ahora no, ¿quién sabe por qué cambiaron la plantilla o simplemente se olvidaron de incluirla?

PS si no tuviera alsu no entendería lo que quiere saber.

puede ajustar manualmente la plantilla:)

 
alsu >> :

puede ajustar manualmente la plantilla:)

Sí, sí, lo sé, pero en mi tiempo maté 2 días para encontrar el error, y es un gran problema en la nueva construcción de una plantilla diferente.

 
Urain >> :

>> ...si no fuera por alsu, no sabría lo que quiere saber el que pregunta, me estoy haciendo viejo.

Experimentados veteranos, mirad el código de la biblioteca del "preguntante" y explicadme qué quiso decir el autor cuando lo escribió...

 

Lo siento.

Se ha escrito mucho, pero sigo sin entender la respuesta a mi pregunta. Intentaré una vez más explicar lo que no puedo hacer.

Supongamos que he hecho un EA en el que he insertado la directiva #include<...> y luego he hecho un archivo de cabecera include con un trozo de código.

He recopilado el Asesor Experto y lo he incluido en una operación. Todo funciona. Basado en la cita de Sergei Kovalev:

"...Otra cosa que se puede añadir es que el archivo ex4 es autosuficiente - para que funcione,
no necesita incluir los códigos fuente de las funciones del usuario.
Puedes copiar el archivo ex4, pasarlo a otros operadores y utilizarlo allí.

"Es completa independientemente de su tecnología.

Cogí mi EA y lo copié y lo transferí a otro ordenador, a otro trader. Después de eso, el Asesor Experto no quiere trabajar y escribe que no existe la función a la que me refiero #include<...>, es decir, no ve el archivo de cabecera include y no puede compilar.

Aquí hay un ejemplo del Asesor Experto y del archivo de cabecera incluido. Vea cuál es exactamente el error en la pregunta.

//+------------------------------------------------------------------+
//| Kibliot.mq4 ||
//| Copyright © 2009, MetaQuotes Software Corp.
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp.
#enlace de propiedad "http://www.metaquotes.net"

#include <PointZigZag.mqh>

//+------------------------------------------------------------------+
//| función de inicio experto |
//+------------------------------------------------------------------+
int inicio()
{PointZigZag();
Comentario("Prod.-y21 = ",y21," ", "Pok.-x21 = ",x21);
return(0);
}

//+------------------------------------------------------------------+

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

//+------------------------------------------------------------------+
//| PointZigZag.mqh |
//| Copyright © 2009, MetaQuotes Software Corp.
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp.
#enlace de propiedad "http://www.metaquotes.net"

extern int intDepth = 12; //------- variables ZigZag
extern inttern ExtDeviation = 5; //------- variables ZigZag.
extern intBackstep = 3; //------- variables ZigZag
extern inttern ShiftBars = 2; //------- variables ZigZag
//------- variables ZigZag ------------------------------------------
double y3, y2, y1, zz;//
int x3, x2, x1, sh;//
double x31, x21, x11; // Punto de inflexión en zigzag
double y31, y21, y11; // Punto de inflexión en zigzag
doble TimeZZ, TimeOO;
//------------------------------------------------------------------------------

double PuntoZigZag()
{y3=0;y2=0;y1=0;
sh=Barras de desplazamiento;
while (y3==0)
{zz=iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, sh);
if (zz!=0 && zz!=EMPTY_VALUE)
{si (y1==0) { x1=sh; y1=zz; }
else if (y2==0) { x2=sh; y2=zz; }
else if (y3==0) { x3=sh; y3=zz; }}sh++;
}
si (Alto[x1]>Alto[x2])
{x11=Alto[x1]; x21=Bajo[x2]; x31=Alto[x3];
y11=0;y21=0;y31=0;TimeZZ=Time[x2];
}sin embargo
{y11=Bajo[x1]; y21=Alto[x2]; y31=Bajo[x3];
x11=0;x21=0;x31=0;TimeZZ=Time[x2];}

}

//+------------------------------------------------------------------+
 
por favor, arregle la línea de error que da el compilador en forma inalterada
 
gvi2504 >> :

Lo siento.

Se ha escrito mucho, pero sigo sin entender la respuesta a mi pregunta. Intentaré una vez más explicar lo que no puedo hacer.

Supongamos que he hecho un EA en el que he insertado la directiva #include<...> y luego he hecho un archivo de cabecera include con un trozo de código.

He recopilado el Asesor Experto y lo he incluido en una operación. Todo está funcionando. Basado en la cita de Sergei Kovalev:

"...También puedo añadir que el archivo ex4 es autosuficiente - para que funcione,
no requiere incluir los códigos fuente de las funciones del usuario.
El archivo ex4 puede copiarse, compartirse con otros operadores y utilizarse allí.

"Es completa independientemente de su tecnología.

Cogí mi EA y lo copié y lo transferí a otro ordenador, a otro trader. Después de eso, el Asesor Experto no quiere trabajar y escribe que no hay ninguna función a la que haga referencia #include<...>, es decir, no ve el archivo de cabecera de inclusión y no puede compilar.

Aquí hay un ejemplo del Asesor Experto y del archivo de cabecera incluido. Mira cuál es exactamente el error en la pregunta.


El archivo a incluir también debe estar ubicado en otro ordenador en el directorio include, y en general, no te molestes, escribe todo en una hoja, asigna un trozo de código como función, ponlo al final de la hoja para que no se quede colgado y nada de encender y apagar, para qué te complicas la vida. Las directivas #include e #import son necesarias (en mi opinión) para escribir un programa complejo con más de 1000 líneas y compuesto por varias docenas de programas separados, de lo contrario son más confusas que útiles.

 
alsu >> :
Por favor, arregle la línea de error que genera el compilador

El compilador escribe la siguiente línea

PointZigZag.mqh' - no se puede abrir el archivo de programa D:\N-Archivos de programa\N-MetaTrader2\perts\Kibliot.mq4 (10, 1)

 
gvi2504 >> :

El compilador escribe la siguiente línea

PointZigZag.mqh' - no se puede abrir el archivo de programa D:\N-Archivos de programa\N-MetaTrader2\perts\Kibliot.mq4 (10, 1)

ver respuesta anterior - poner el archivo de inclusión PointZigZag.mqh en la carpeta de inclusión

 
alsu >> :

ver respuesta anterior - poner el archivo de inclusión PointZigZag.mqh en la carpeta de inclusión

En todos los ordenadores en los que se supone que se compila el archivo Kibliot.mq4.