[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 291

 
alsu >> :

Stai confondendo la nozione di "libreria" (da cui le funzioni sono estratte usando #import) e "include header file" (#include).


Le librerie si trovano nella cartella libraries, i loro sorgenti hanno l'estensione *.mq4, come gli indicatori e gli Expert Advisors. Sono compilati nel file *.ex4 (dal quale le funzioni pronte sono poi importate in altri programmi, come questo

Per compilare correttamente la libreria, come regola, dovreste prima scrivere la direttiva di libreria #property.

I file header include sono usati per includere pezzi di codice già pronti in vari programmi. Sono memorizzati nella cartella includes, hanno l'estensione *.mqh e sono inclusi nel testo (cioè nel testo) del programma usando la direttiva #include <...>; non devono essere compilati separatamente, perché sono compilati insieme al programma principale.

A proposito, prima la libreria era generata da un template con #property library, e ora non lo è. Qualcuno sa perché hanno cambiato il template o semplicemente si sono dimenticati di includere?

PS se non fosse stato per alsu non avrei capito cosa voleva sapere l'interrogante, sto diventando vecchio.

 
Urain >> :

A proposito, prima la libreria veniva generata usando un template con #property library, ma ora non lo è, chissà perché hanno cambiato il template o semplicemente si sono dimenticati di includere?

PS se non avessi alsu non capirei cosa vuole sapere.

puoi modificare manualmente il template:)

 
alsu >> :

puoi modificare manualmente il template:)

Sì sì lo so, ma nel mio tempo ho ucciso 2 giorni per trovare l'errore, ed è un grosso problema nella nuova build un modello diverso.

 
Urain >> :

>> ...se non fosse per alsu, non saprei cosa voleva sapere l'interrogante, sto diventando vecchio.

Vecchietti esperti, guardate il codice della libreria dell'"asker" e spiegatemi cosa intendeva l'autore quando l'ha scritto?

 

Mi dispiace.

È stato scritto molto, ma non ho ancora capito la risposta alla mia domanda. Cercherò ancora una volta di spiegare ciò che non posso fare.

Supponiamo che io abbia fatto un EA in cui ho inserito la direttiva #include<...> e poi ho fatto un file header include con un pezzo di codice.

Ho compilato l'Expert Advisor e l'ho inserito in un trade. Tutto funziona. Basato sulla citazione di Sergei Kovalev:

"...Un'altra cosa che si può aggiungere è che il file ex4 è autosufficiente - perché funzioni,
non ha bisogno di includere i codici sorgente delle funzioni dell'utente.
Il file ex4 può essere copiato, condiviso con altri commercianti e utilizzato lì.

"È completo indipendentemente dalla sua tecnologia.

Ho preso il mio EA e l'ho copiato e trasferito su un altro computer, ad un altro trader. Dopo di che, l'Expert Advisor non vuole funzionare e scrive che non c'è nessuna funzione a cui mi riferisco #include<...>, cioè, non vede il file di intestazione include e non può compilare.

Ecco un esempio dell'Expert Advisor e del file di intestazione include. Vedere qual è esattamente l'errore sulla domanda.

//+------------------------------------------------------------------+
//| Kibliot.mq4 |
//| Copyright © 2009, MetaQuotes Software Corp.
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp.
#proprietà link "http://www.metaquotes.net"

#include <PointZigZag.mqh>

//+------------------------------------------------------------------+
//| funzione di inizio esperto |
//+------------------------------------------------------------------+
int start()
{PointZigZag();
Comment("Prod.-y21 = ",y21," ", "Pok.-x21 = ",x21);
ritorno(0);
}

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

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

//+------------------------------------------------------------------+
//| PointZigZag.mqh |
//| Copyright © 2009, MetaQuotes Software Corp.
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp.
#proprietà link "http://www.metaquotes.net"

extern int intDepth = 12; //------- variabili ZigZag
extern inttern ExtDeviation = 5; //------- variabili ZigZag.
extern intBackstep = 3; //------- variabili ZigZag
extern inttern ShiftBars = 2; //------- variabili ZigZag
//------- variabili ZigZag ------------------------------------------
doppio y3, y2, y1, zz;//
int x3, x2, x1, sh;//
doppio x31, x21, x11; // punto di flesso a ZigZag
double y31, y21, y11; // punto di flesso ZigZag
doppio TimeZZ, TimeOO;
//------------------------------------------------------------------------------

doppio PuntoZigZag()
{y3=0;y2=0;y1=0;
sh=Barre del cambio;
mentre (y3==0)
{zz=iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, sh);
se (zz!=0 && zz!=EMPTY_VALUE)
{if (y1==0) { x1=sh; y1=zz; }
else if (y2==0) { x2=sh; y2=zz; }
else if (y3==0) { x3=sh; y3=zz; }}sh++;
}
se (Alto[x1]>Alto[x2])
{x11=Alto[x1]; x21=Basso[x2]; x31=Alto[x3];
y11=0;y21=0;y31=0;TimeZZ=Time[x2];
}else
{y11=Basso[x1]; y21=Alto[x2]; y31=Basso[x3];
x11=0;x21=0;x31=0;TimeZZ=Time[x2];}

}

//+------------------------------------------------------------------+
 
per favore correggete la linea di errore che il compilatore dà in forma invariata
 
gvi2504 >> :

Mi dispiace.

È stato scritto molto, ma non ho ancora capito la risposta alla mia domanda. Cercherò ancora una volta di spiegare ciò che non posso fare.

Supponiamo che io abbia fatto un EA in cui ho inserito la direttiva #include<...> e poi ho fatto un file header include con un pezzo di codice.

Ho compilato l'Expert Advisor e l'ho inserito in un trade. Tutto funziona. Basato sulla citazione di Sergei Kovalev:

"...Posso anche aggiungere che il file ex4 è autosufficiente - per funzionare,
non richiede di includere i codici sorgente delle funzioni utente.
Il file ex4 può essere copiato, condiviso con altri commercianti e utilizzato lì.

"È completo indipendentemente dalla sua tecnologia.

Ho preso il mio EA e l'ho copiato e trasferito su un altro computer, ad un altro trader. Dopo questo, l'Expert Advisor non vuole lavorare e scrive che non c'è nessuna funzione a cui faccio riferimento #include<...>, cioè, non vede il file di intestazione include e non può compilare.

Ecco un esempio dell'Expert Advisor e del file di intestazione include. Guarda qual è esattamente l'errore nella domanda.


La direttiva richiede che il file da includere si trovi anche su un altro computer nella directory include, e in generale, non rompete le scatole, scrivete tutto sullo stesso foglio, allocate un pezzo di codice come una funzione, mettetelo alla fine del foglio in modo che non rimanga in giro e non si accenda e spenga, perché vi complicate la vita. Le direttive #include e #import sono necessarie (imho) per scrivere un programma complesso con più di 1000 linee e composto da diverse decine di programmi separati, altrimenti sono più confuse che utili.

 
alsu >> :
Per favore, correggi la linea di errore che il compilatore genera

Il compilatore scrive la seguente linea

PointZigZag.mqh' - impossibile aprire il file di programma D:\Program Files\MetaTrader2\experts\Kibliot.mq4 (10, 1)

 
gvi2504 >> :

Il compilatore scrive la seguente linea

PointZigZag.mqh' - impossibile aprire il file di programma D:\Program Files\MetaTrader2\experts\Kibliot.mq4 (10, 1)

vedi risposta sopra - metti il file include PointZigZag.mqh nella cartella include

 
alsu >> :

vedi risposta sopra - metti il file include PointZigZag.mqh nella cartella include

Su tutti i computer in cui il file Kibliot.mq4 dovrebbe essere compilato.