[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 267
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Grazie, lì sul link, c'è una soluzione software al problema, e non so cosa fare. Che cosa ha a che fare questo con e come posso risolvere questo problema? Perché l'EA ha funzionato bene per un mese e ora ha un glitch? Se l'errore era nel codice? Si scopre che questo thread non è per i neofiti se mi appesantisce con le risposte alle domande. Sono frustrato.
Ho scritto una cosa del genere nel mio EA subito dopo l'inizio:
Provatelo, forse qualcosa vi sarà utile anche per voi.
1. ok. È stato dichiarato Int start(). Ho sempre restituito zero. Ho visto i comandi return(-1) e anche return(-2) nel codice. Qual è il modo corretto di scegliere questo codice?
2. Quindi la domanda naturale sorge, è possibile dichiarare start() di EA/indicator/script non di tipo int(), ma di qualsiasi altro tipo e poi cosa restituire al terminale? In altre parole, cosa fa il terminale con il valore restituito da return() ?
1. Come si fa a decidere che cosa dovrebbe restituire una funzione normale?
2. Si può avere qualsiasi tipo, proprio come una funzione normale. Il terminale non fa nulla con i valori restituiti. Li ignora.
Funzioni speciali
1. Come si fa a decidere quale funzione normale deve ritornare?
2. Si può avere qualsiasi tipo, proprio come una funzione normale. Il terminale non fa nulla con i valori restituiti. Li ignora.
1. Per decidere cosa dovrebbe restituire una funzione ordinaria, ho bisogno di sapere perché il codice principale ha bisogno di un tale valore. Per esempio, se voglio prendere la decisione di aprire un ordine di acquisto quando c'è un segnale, scriverò una funzione che restituisce il numero di ordini di acquisto già aperti. A seconda di quanti ce ne sono, il codice prenderà una decisione seguendo la logica incorporata nel codice. Non so quale logica sia incorporata nel codice di ritorno. Oggi stavo guardando un articolo sulla creazione di un semaforo e mi sono imbattuto in un codice di ritorno (-2). Sorpreso, ha fatto una domanda qui. Questo è tutto. ( https://www.mql5.com/ru/articles/1412 - articolo qui).
2. il terminale ignora i valori restituiti. È così? Se è così, allora ancora una volta sorge una domanda legittima, perché nella creazione di un EA/indicatore/script, lo sviluppatore mette in un template esattamente int, perché sarebbe più ragionevole mettere lì void - allora il terminale non deve ignorare nulla - guadagneremmo 1 tatto di tempo del processore? Forse c'è qualche logica in COSA restituire dalle funzioni int init(), int deinit() e int start()? Penso che Roche l'abbia già spiegato a qualcuno da qualche parte - ricordava una descrizione di quando restituire zero e quando restituire (-1). Era proprio questa la spiegazione che cercavo. Peccato che non l'ho trovato...
P.S.
L'autore dell'articolo usa return(-2) per i suoi scopi. Ma il fatto è che a volte la funzione start() finisce con un codice che restituisce un valore diverso da zero. E non è solo una persona a farlo. È esattamente questa logica che vogliamo capire.
Funzioni speciali
Sembra che ci sia nel testo.
Le funzioni predefinite possono avere dei parametri. Tuttavia, quando queste funzioni sono chiamate dal terminale client, nessun parametro sarà passato esternamente, ma saranno utilizzati i valori predefiniti.
Questo riguarda i parametri che entrano nella funzione, non i parametri restituiti da essa.
Questo è un contatore di ordini. Bene, potrebbe essere il caso, per esempio, di voler sapere nel codice se ci sono ordini di acquisto nel mercato per una certa coppia di valute e con un certo numero magico, per esempio. Se c'è, ad esempio, un altro ordine di acquisto non può essere aperto. Quindi il contatore di ordini è necessario per prendere una decisione.
Ho scritto questo nel mio EA subito dopo l'inizio:
Provatelo, potreste trovare qualcosa di utile.
come queste linee possono essere comprese:
volume degli ordini di ritorno
if(buys>0) return(buys);
else return(-sells);
} ?
Scrivere una sceneggiatura:
buttalo sul grafico e guarda il registro:
2012.07.20 12:04:11 111 NZDUSD,M15: removed
2012.07.20 12:04:11 111 NZDUSD,M15: uninit reason 0
2012.07.20 12:04:11 111 NZDUSD,M15: Попытка ретурна 136
2012.07.20 12:04:11 111 NZDUSD,M15: loaded successfully
(qui 111 è il nome dello script). Vediamo la linea " uninit reason 0 " - apparentemente il terminale stava aspettando lo zero!
Prova lo stesso con (-1) :
Il risultato è lo stesso:
2012.07.20 12:08:19 111 NZDUSD,M15: rimosso
2012.07.20 12:08:19 111 NZDUSD,M15: uninit reason 0
2012.07.20 12:08:19 111 NZDUSD,M15:Tentativo di ritorno -1
2012.07.20 12:08:19 111 NZDUSD,M15: caricato con successo
Il terminale sembra preoccuparsi se viene restituito zero o no.
P.S.
In generale, nel web si è imbattuto in questa risposta:
return 0 - il programma ha completato il suo lavoro senza errori
return 1 - o numero superiore, il programma ha finito il suo lavoro con un errore e restituisce il codice di errore per un'ulteriore elaborazione.
In qualsiasi sistema operativo, qualsiasi programma restituisce sempre un codice di errore.
L'unico problema è che il nostro ritorno non restituisce il codice al sistema operativo, ma al terminale. Questo lascia aperta la questione.
Scrivere una sceneggiatura:
buttalo sul grafico e guarda il registro:
(qui 111 è il nome dello script). Vediamo la linea " uninit reason 0 " - apparentemente il terminale stava aspettando lo zero!
Prova lo stesso con (-1) :
Il risultato è lo stesso:
A quanto pare al terminale interessa se viene restituito uno zero o meno.uninit reason è il codice del motivo della terminazione dell'Expert Advisor
https://docs.mql4.com/ru/constants/uninit