Funktion, die 2 Ergebnisse liefert? - Seite 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).

Danke! Ich muss auch mein Wissen über Pointer auffrischen.

Matutin: Sehr interessant! Unglücklicherweise braucht EA Parameter, und manchmal eine Menge, so dass wir sie nicht vermeiden können und aus allen in https://www.mql4.com/go?http://www.c2.com/cgi/wiki?GlobalVariablesAreBad erwähnten Gründen aufpassen müssen.

Warum nicht in eine Datei schreiben & jeder EAs kann sie lesen.

gordon : In dieser Diskussion geht es um Variablen, die im globalen Bereich definiert sind (deklariert außerhalb der speziellen Funktionen start(), init(), deinit()) und nicht um GV's... Vermischen Sie die beiden nicht.

Ich sage immer global-scope variables & GlobalVariables, um Verwirrung zu vermeiden. MT4 & MT5 können besser mit verschiedenen Begriffen für diese tun.

 
gordon:
Warum ein Problem lösen, das es nicht gibt? Warum das Rad neu erfinden? Warum einen unklaren Code erfinden, der nur in begrenzten Fällen funktioniert?


Nun, weil ich eine Funktion geschrieben habe, die auf diese Weise funktioniert. Sie hat mehrere gleitende Durchschnitte in einem Array von 1 bis 7, und wenn einer davon von einer Signallinie gekreuzt wird, nimmt sie den Array-Index*1000 + die Richtung (0 für aufwärts, 1 für abwärts)*100 und gibt eine eindeutige ID-Nummer für jeden Auftrag zurück, die drei Informationen enthält.

Zum Beispiel wird ein Auftragseröffnungssignal mit der Nummer 3100 erstellt, wenn der dritte MA nach unten gekreuzt wurde, ein Signal mit der Nummer 2000 wird erstellt, wenn der zweite MA nach oben gekreuzt wurde.

Das bedeutet, dass meine Linienüberquerungsfunktion diese Zahl an meine Funktion für offene Aufträge senden kann, da sie nun drei Informationen enthält. Erstens ist sie selbst die magische Zahl, zweitens ist das Ergebnis von ordertype = signal%1000/100 eine Eins oder eine Null, was darüber entscheidet, ob es ein Verkaufs- oder ein Kaufauftrag sein soll.

Dann enthält die magische Zahl Informationen darüber, welche MA-Linie überschritten wurde, um sie überhaupt zu erzeugen. int MA=magische Zahl/1000 Ergebnis ist ein Wert von 1 bis 7, der dem ursprünglichen Array-Index der gleitenden Durchschnitte entspricht

Drittens ist die magische Zahl eine eindeutige Kennung für jeden Auftrag und verhindert, dass mehrere Aufträge aufgrund von Wiederholungssignalen eröffnet werden, da zwei Aufträge mit derselben magischen Zahl nicht zulässig sind.

Später im Programm, wenn ich eine Operation auf der Grundlage des Auftragstyps durchführen möchte, führe ich type=(magicnumber%1000)/100 aus; wenn das Ergebnis 1 ist, handelt es sich um einen Verkaufsauftrag, wenn es Null ist, um einen Kaufauftrag; wenn ich wissen möchte, welche MA-Linie diesen Auftrag erzeugt hat, führe ich int MA=magicnumber/1000 aus, wobei der Interger natürlich alle Fließkommazahlen ausblendet und mir den ursprünglichen MA-Index 1 bis 7 liefert.

Ich dachte, dies sei eine gute Möglichkeit, mehr als eine abrufbare und nutzbare Information aus einer einzigen Funktionsrückgabe zu erzeugen.

 
SDC:

Nun, weil [...]

Das ist großartig, aber noch einmal - warum nicht einfach den direkten, universellen, klaren und anerkannten Weg gehen. Warum diese ganze Mühe? Meinst du nicht, dass das einfacher ist?

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

Ich weiß nicht, ich nehme an, das hätte auch funktioniert, es schien einfach eine gute Idee zu der Zeit, es war vor allem, weil ich auf einem EA tp arbeiten mehrere verschiedene Handelsstrategien zur gleichen Zeit zu verwalten, so arbeitete ich aus, dass System zu verwalten Aufträge durch magicnumbers je nachdem, welche Handelskriterien sie gehörten, so zum Beispiel können Sie schließen alle Verkaufsaufträge durch eine 55 Perioden gleitenden Durchschnitt Kreuz unabhängig von allen anderen Aufträgen geöffnet, weil 55 MA ist Index 3, Die magischen Nummern dieser Aufträge würden auf 3000 basieren. Dann wurde mir klar, dass ich noch einen Schritt weiter gehen und auch den Auftragstyp mit einbeziehen könnte, so dass Verkaufsaufträge auf dieser MA-Linie die magische Nummer 3100 3101 3102 usw. haben, was bedeutet, dass Sie alle Aufträge, die nach diesem Handelskriterium eröffnet wurden, oder alle Kaufaufträge, die nach diesem Handelskriterium eröffnet wurden, oder alle Verkaufsaufträge, die nach einem beliebigen Handelskriterium eröffnet wurden, usw. anhand der speziellen magischen Nummer identifizieren können.

Grund der Beschwerde: