Funzione che restituisce 2 risultati? - pagina 4

 

gordon: It doesn't imply anything, but specifically in both C and C++ arrays are passed by reference as well (technically a pointer to the array's first element is passed, that pointer is passed by value).

Grazie. Ho bisogno di rispolverare le mie conoscenze anche sul puntatore.

Matutin: Molto interessante! Sfortunatamente, EA ha bisogno di parametri, e a volte molti, quindi non possiamo evitarli e dobbiamo fare attenzione per tutte le ragioni menzionate in https://www.mql4.com/go?http://www.c2.com/cgi/wiki?GlobalVariablesAreBad

Perché non scrivere su un file e ogni EAs può leggerli.

gordon : Questa discussione riguarda le variabili definite in ambito globale (dichiarate al di fuori della funzione speciale start(), init(), deinit()) e non le GV... Non mischiare le due cose.

Io dico sempre global-scope variables & GlobalVariables per evitare confusione. MT4 & MT5 possono fare meglio usando una terminologia diversa per questi.

 
gordon:
Perché risolvere un problema che non esiste? Perché reinventare la ruota? Perché inventare un codice poco chiaro che funzionerebbe solo in casi limitati?


Bene, perché ho scritto una funzione che funziona in questo modo: ha diverse medie mobili in una matrice da 1 a 7, se una di esse è attraversata da una linea di segnale, prende l'indice della matrice*1000 + la direzione (0 per su, 1 per giù) *100. Questo restituisce un numero ID unico per ogni ordine che contiene tre informazioni.

Per esempio, un segnale di ordine aperto con il numero 3100 viene creato quando la terza MA è stata attraversata verso il basso, il segnale numero 2000 viene creato se la seconda MA viene attraversata verso l'alto.

Questo significa che la mia funzione di attraversamento delle linee può inviare quel numero alla mia funzione ordini aperti, poiché ora contiene 3 informazioni. in primo luogo esso stesso è il numero magico, in secondo luogo ordertype = signal%1000/100 il risultato è un uno o uno zero che decide se deve essere un ordine di vendita o di acquisto.

quindi il magicnumber contiene informazioni su quale linea MA è stata attraversata per generarlo in primo luogo. int MA=magicnumber/1000 risultato è un valore da 1 a 7 che corrisponde all'indice originale dell'array delle medie mobili

in terzo luogo il numero magico è un identificatore unico per ogni ordine e impedisce l'apertura di più ordini a causa di segnali ripetuti, poiché non sono ammessi due ordini con lo stesso numero magico

più avanti nel programma se voglio eseguire un'operazione basata sul tipo di ordine che è faccio type=(magicnumber%1000)/100; se il risultato è 1 era un ordine di vendita se è zero era un ordine di acquisto, se voglio sapere quale linea MA ha creato quell'ordine faccio int MA=magicnumber/1000 ovviamente l'interger elimina qualsiasi virgola mobile e mi dà l'indice MA originale da 1 a 7

Ho pensato che questo fosse un modo pulito per creare più di un'informazione recuperabile e utilizzabile da un singolo ritorno di funzione.

 
SDC:

Beh, perché [...]

Questo è fantastico, ma di nuovo - perché non farlo semplicemente nel modo diretto, universale, chiaro e ben accettato. Perché prendersi tutto questo disturbo? Non pensate che questo sia più semplice:

int  a,b;
void MyFunc( int& a, int& b )
   {
   //... function result should be 'passed' to a and b
 

Non so, suppongo che avrebbe funzionato anche questo, mi sembrava solo una buona idea al momento, soprattutto perché stavo lavorando su un EA per gestire diverse strategie di trading allo stesso tempo, così ho elaborato quel sistema per gestire gli ordini per magicnumbers a seconda di quale criterio di trading appartenevano, così per esempio è possibile chiudere tutti gli ordini di vendita aperti da una media mobile a 55 periodi, indipendentemente da tutti gli altri ordini perché 55 MA è l'indice 3, i numeri magici di questi ordini sarebbero basati su 3000 poi mi sono reso conto che potevo fare un ulteriore passo avanti e incorporare anche il tipo di ordine, così gli ordini di vendita su quella linea di MA hanno il numero magico 3100 3101 3102 ecc questo significa che è possibile identificare tutti gli ordini aperti da quel criterio di trading, o tutti gli ordini di acquisto aperti da quel criterio di trading o tutti gli ordini di vendita aperti da qualsiasi criterio di trading ecc tutti dal numero magico speciale