|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Flexible Summe aus Variablenreihe berechnen?
Guten Tag,
ich habe eine größere Anzahl an Variablen in der Werte abgelegt werden. Ist es möglich die Summe einer flexiblen Anzahl dieser Variablen auszulesen? Also zB.: es gibt eine Reihe von 50 Variablen und dazu eine externe Variable die die Anzahl der zu addierenden Variablen (der 50) auswählt. Also Steht in der externen Variable 30 dann soll die Summe der ersten 30 der 50 Variablen berechnet werden, steht dort 5 dann nur die ersten 5 der 50 Variablen... Wie ist das Programmiertechnisch möglich? Grüße C$D |
|
|||
Hallo Ca$hDigger,
habe mir dein Problem mal angeschaut und muss überlegen wie du das genau meinst. Liegen die Werte als Array vor oder sind es tatsächlich verschiedene Variablen? Im zweiten Fall ist es schon schwieriger, habe trotzdem eine Lösung. Schau mal hier meine Lösung, vielleicht kannst du damit was anfangen. Die erste Summenberechnung ist für die Arraylösung, die zweite für verschiedene Variablen. Hier ist der Trick, dass die Cases umgedreht angeordnet sind und per Fall Through verbunden sind. Code:
#define MAX_NUMBER_OF_ELEMENTS 100 //Für den Fall das tatsächlich verschiedene Variablen gemeint sind int var1; int var2; int var3; int var4; int var5; int start() { int summe; int aiInputArray[MAX_NUMBER_OF_ELEMENTS];//Es kann hier auch ein double verwendet werden, dann nur überall anpassen Comment("Summe:"+getSumOfArray(aiInputArray,5)); if(getSumOfDifferentVars(summe,5) == TRUE) { Comment("Summe:"+summe); } } int getSumOfArray(int &aiInputArray[], int iNumberOfSumElements)//hier return Typ wahlweise auch double angeben, je nach Typ des Input-Array { int iSumme = 0;//hier wahlweise auch double angeben, je nach Typ des Input-Array int i; for(i=0; ((i < iNumberOfSumElements) && (i < MAX_NUMBER_OF_ELEMENTS));i++) { iSumme += aiInputArray[i]; } return (iSumme); } int getSumOfDifferentVars(int &summe, int iNumberOfSumElements) { bool retValue; retValue = TRUE; summe = 0; switch(iNumberOfSumElements) { case 5: summe += var5; case 4: summe += var4; case 3: summe += var3; case 2: summe += var2; case 1: summe += var1; break; default: retValue = FALSE; break; } return(retValue); } Dave |
|
|||
Genau es sind verschiedene Variablen (also kein Array). Ist für diese Variante dann nur der letzte Teil also ab "int getSumOfDifferentVars(int &summe, int iNumberOfSumElements)" relevant? Hab als Newcomer noch nicht ganz verstanden wie die Summe der verschiedenen Variablen dort zustande kommt
|
|
|||
Wo kommen denn die Variablen her bzw. wo stehen sie?
Wenn sie im Programm selbst anfallen, dann können sie auch einfach einem Array zugeordnet werden, welches über den Wert der separaten Variable ausgelesen und gleichzeitig addiert wird. Fertig! traderdoc |
|
|||
Hallo Ca$hDigger,
die zu summierenden Werte stehen in den Variablen: Code:
int var1; int var2; int var3; int var4; int var5; ist folgendermaßen zu sehen. Das erste int ist der Rückgabe Status, er kann entweder True sein, dann hat die Funktion geklappt oder False dann gab es einen Fehler. Fehler ist es dann, wenn die Anzahl an Elementen nicht korrekt ist. das & vor summe gibt an, dass es ein Aufruf per Referenz ist, also ebenso ein Rückgabewert. Also in die Funktion wird nur die Adresse übergeben, so dass die Summe in diese Variable geschrieben wird und dann an die Aufrufen Funktion übergeben wird. Das zweite Argument iNumberOfSumElements gibt die Anzahl der zu summierenden Elemente an. Achtung! Es muss natürlich so sein, dass wenn du zwei Elemente addieren möchtest immer var1 und var2 addiert werden und wenn du drei Elemente addieren möchtest var1, var2 und var3 addiert werden. Wenn du nun als Beispiel drei Elemente macht der Code folgendes. Da das Switch Argument drei ist, gehst du in den Case 3 und addierst auf die leere Summe den Wert aus Var3, also ist die Summe Var3. Danach fällst du durch und addierst auf die Summe Var2 (die Summe ist jetzt Var2+Var3). Du fällst wieder durch und addiert dann Var1 hinzu. Die Summe ist nun Var1+Var2+Var3,aufgrund des Break springst du raus. Fertig Schönen Gruß Dave |
|
|||
Zitat:
@Ca$hDigger: Am besten können wir helfen, wenn wir deinen Code sehen. Schönen Abend Dave |
|
|||
Das funktioniert auf jeden Fall!
|
|
|||
Hi also nochmal um das mit den Variablen zu klären: Die Variablen sind global definiert und vom Typ int.
Ich schau mir das Bisherige gleich nochmal genau an muss das erstmal verstehen, sind neue Programmieraspekte für mich drin. Die möglichst einfachste Lösung wäre natürlich perfekt, ich schau jetzt mal wie weit ich durchsteige |
|
|||
um es nochmal ganz genau zu sagen es sind die Globalvariable innerhalb des EAs also nicht die Taste F3 Globalvariablen die auf dem Metatrader sitzen
|
|
|||
Hallo und nochmal danke für den bisherigen Code. Ich muss leider nochmal nachfragen denn mit dem Code komme ich nicht zurecht. Also die Variante mit den globalen Variablen ist mir ehrlich gesagt zu hoch da musste ich jetzt passen. Es kam so rüber als wäre eine Arraylösung effektiver und ich habe mich, da unwissend, dazu ein bisschen eingelesen. Würde ich jetzt die Variablenwerte als Array speichern dann hätte ich eine Variable die etliche verschiedenen Werte aufnehmen kann (was ich sowieso bevorzugen würde um im Code jede Menge Platz zu sparen)
Code:
double variable[51] // die Indizes dieser Variablen laufen dann von 0-50 LG C$D |
Lesezeichen |
Stichworte |
berechnung, flexible summe, mql4, programmierung, programmierung metatrader, summe, summe variablen, variablen, variablenreihe |
|
|