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

 

Buon pomeriggio.

Devo determinare l'apertura di un nuovo bar. Ho inserito nel mio Expert Advisor una funzione pura, l'esempio del tutorial MQL

void Fun_New_Bar() // Funzione di rilevamento di una nuova barra
{
static datetime New_Time=0; // Ora attuale della barra
bool New_Bar=false; // Nessuna nuova barra
if(New_Time!=Time[0]) // Confronta il tempo
{
New_Time=Time[0]; // Il tempo è ora
New_Bar=true; // Catturata la nuova barra
}
return(New_Bar);
}

Dà un singolo errore '(' - function definition unexpected - Lo capisco come una definizione di funzione inaspettata.

Ho definito la variabile "New_Time" prima della funzione int come datetime New_Time;- senza di essa la compilazione dà un errore di variabile indefinita.

La funzione viene chiamata nel programma principale come segue:

Fun_New_Bar(); // Chiamare f-i
if (New_Bar==false) // Se la barra non è nuova...
ritorno;

Chi può dirmi perché tutto questo non funziona?

E un'altra osservazione interessante - quando correggi qualcosa, lo copi - nessun errore, poi lo copi di nuovo - di nuovo

'(' - definizione della funzione inaspettata - ecco perché. Sto scrivendo in modo così offuscato che il compilatore non può capirmi subito?

 
keekkenen >> :
succede, a volte si stampano posti storti e si vede 0,0000 = 0 e non funziona - falso, normalizzare i valori per sicurezza.

Ho aggiunto una nuova condizione che duplica quella problematica e il problema è risolto.

Grazie!


PS È un bene che nel mio caso l'errore con gli ordini abbia segnalato il problema - in altri la logica dell'EA potrebbe essere completamente rotta,

senza alcun messaggio, e sarà impossibile saperlo :((((

 

La funzione è dichiarata come void, cioè non restituisce nulla, ma nel codice dice return(New_Bar); questa è la ragione dell'errore...

deve essere dichiarata secondo il tipo di variabile restituita - bool Fun_New_Bar()

e usarlo di conseguenza if ( !Fun_New_Bar() ) return(0);

 
keekkenen писал(а) >>

La funzione è dichiarata come void, cioè non restituisce nulla, ma nel codice dice return(New_Bar); questa è la ragione dell'errore...

deve essere dichiarata secondo il tipo di variabile restituita - bool Fun_New_Bar()

e usarlo di conseguenza if ( !Fun_New_Bar() ) return(0);

L'avevo esattamente come "bool Fun_New_Bar()" nella prima versione, ma l'errore era lo stesso, così ho chiamato la funzione come nel manuale - void. Ho implementato il tuo suggerimento e non c'è nessun cambiamento - l'errore è lo stesso.

Ma si è verificato un cambiamento - l'errore si trova alla linea 279 (questa è la linea di commento), mentre la funzione inizia alla 280

Una domanda correlata è se è accettabile caricare la funzione int() con qualche blocco di analisi una tantum, per esempio, determinando i valori delle due ultime inversioni sull'indicatore.

L'ho fatto. Può causare un blocco dell'Expert Advisor?

 

definizione dellafunzione inaspettata - molto probabilmente mancano o ci sono parentesi extra nel codice PRIMA della funzione Fun_New_Bar,

Guardate attentamente il codice e probabilmente troverete il problema.

 
keekkenen писал(а) >>

definizione della funzione inaspettata - molto probabilmente mancano o ci sono parentesi extra nel codice PRIMA della funzione Fun_New_Bar,

Guardate attentamente il codice e vedrete cosa c'è di sbagliato.

Lo cercherò ora. Cercherò di infilare questa funzione nel luogo da cui la chiamo. Due funzioni con tale errore sono già state copiate senza errori dopo essere state spostate nel luogo della chiamata. Per di più, se la funzione "difettosa" viene spostata nel luogo di chiamata, lo stesso errore salta all'altra funzione, non necessariamente successiva nell'ordine.

 
alsu >> :

1. Installare QIPInfium se non lo avete già fatto

2. Creare un account ICQ separato per il terminale

3. Installare e configurare il plugin MsgBox - istruzioni dettagliate

Dall'Expert Advisor (indicatore, script), che dovrebbe produrre segnali, scrivi i file con i messaggi necessari nella cartella OutBox, come spiegato nelle istruzioni del link sopra. Per scrivere sul file al di fuori della directory del terminale, potete, per esempio, usare la libreria ZI_File_Functions_Full_Lib


Ecco come, con un po' di google e un po' di creatività, si può fare tutto ciò che si vuole in quattro passi con una programmazione minima:))))

Grazie, funziona :)

 

Quando si esegue l'EA in modalità demo, la finestra di conferma dell'ordine continua ad apparire, come nel trading manuale. Questa funzione è stata cancellata nelle opzioni, ma è ancora catturata da qualche parte.

C'è un modo per annullare la finestra di conferma?

 
Andrei01 >> :

Quando si esegue l'EA in modalità demo, la finestra di conferma dell'ordine continua ad apparire, come nel trading manuale. Le opzioni hanno cancellato questa funzione, ma è ancora catturata da qualche parte.

C'è un modo per annullare questa finestra di conferma?


impostazioni_Mt servizi-impostazioni-consiglieri


impostazioni dell'esperto

 

Grazie. questo è esattamente ciò che non funziona poiché è scritto da qualche parte nel profilo e non può essere annullato. il problema è stato risolto ricreando il profilo.

Motivazione: