wie schreibe beziehungsweise optimiere ich den Code, wenn ich prüfen möchte. ob der Schlusskurs der letzten 8 Bars über dem MA-Wert liegt?
- Du kannst, wenn ein Fehler entdeckt wurde den eigenen Post korrigieren. Unter dem Post gibt es den Knopf bearbeiten.
- Code bitte als Code posten: Alt+S oder (Menüzeile) mit dem Icon </>.
- Ob sich die Logik vereinfachen lässt ist au einer Zeile schwer zu erkennen, aber kennst Du die Boolesche Algebra: https://de.wikipedia.org/wiki/Boolesche_Algebra ?
Du kannst das für die letzten acht Bars höchstens in einem for loop abfragen, in etwa:
Update: So müsste es laufen
// Globale Variablen: bool longCondition[]; // du kannst auch verschiedene Conditions mit der selben Funktion überprüfen. int bars=8; //------ // In OnInit(): ArraySetAsSeries(longCondition,true); // Das Bedingungsarray wird wird als Zeitserie formatiert, mit "0" als letztem Wert. ArrayInitialize(longCondition,false); // long condition wird als falsch initialisiert ArrayResize(longCondition,bars); // bars gibt hier an, wie viele Balken Du möchtest //----- // In OnTick() AssignArrayConditions(longCondition); //Funktionsaufruf s.u. if(CheckArrayConditions(longCondition)) { Trade.Buy(...); } //----- // Außerhalb von OnTick(): void AssignArrayConditions(const bool &cond[]) //hier wird der gesamte Array longCondition an die Funktion übergeben. { for(int i=0 ; i<bars ; i++) { longCondition[i]=mrate[i].close>maVal[i]; // diese Schleife weist die boolsche Bedingung zu, die Du in ihr definierst } } bool CheckArrayConditions(const bool &cond[]) { bool res=true; for(int i=0 ; i<bars ; i++) { res&=cond[i]; // Beim Und-Istgleich werden im Prinzip 0=false und 1=true multipliziert Print("i = ",i,", Result = ",res); // Ist einer der Werte =0 , so wird das Ergebnis=0 } return(res); // das Ergebnis der Fkt. wird zu OnTick zurück gegeben. }
Es mag noch umständlicher ausschauen, aber Du musst jetzt nur noch die boolsche Bedingung und die Anzahl der Balken eingeben und nicht jedesmal Alles umschreiben.Du kannst auch eine short condition einführen und diese mit den selben Funktionen zuweisen und überprüfen. Es ist nun nicht mehr spezifiziert, welche Bedingungen übergeben werden.
So mit </> Code ist es besser. Der Code funktioniert nicht eins zu eins aber es steht dabei was wohin gehört. Habs aber mit Handy geschieben und noch nicht genau überprüft.
pennyhunter #:
Du kannst das für die letzten acht Bars höchstens in einem for loop abfragen, in etwa:
Update: So jetzt hab ich sie total kaputt gepflegt weil der Absatz in der Mobileversion nicht so will. Morgen wieder.
Du kannst das für die letzten acht Bars höchstens in einem for loop abfragen, in etwa:
Es mag noch umständlicher ausschauen, aber Du musst jetzt nur noch die boolsche Bedingung und die Anzahl der Balken eingeben und nicht jedesmal Alles umschreiben.
So mit </> Code ist es besser. Der Code funktioniert nicht eins zu eins aber es steht dabei was wohin gehört. Habs aber mit Handy geschieben und noch nicht genau überprüft.
![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Guten Tag!
Ich möchte als Voraussetzung zum Eingehen eines Trades prüfen, ob die letzten 8 Schlusskurse alle oberhalb des Values vom SMA50 liegen.
Das kann ich z.B. so schreiben:
bool BuyCondition1 = mrate[1]>maVal[1] && mrate[2]>maVal[2] && mrate[3]>maVal[3] &&.........................mrate[8]>maVal[8];
Diese Vorgehensweise hat meiner meinung nach 2 Nachteile:
1. sehr viel Code
2. dadurch auch Fehleranfällig (Tippfehler).
Gibt es in MQL5 die Möglichkeit, das "einfacher" zu schreiben; vielleicht in einer einzigen Zeile ohne &&, &&, &&... zu verwenden?
Danke für Vorschläge
Franz
Und schon hat die "Fehleranfälligkeit" zugeschlagen. Es muss "natürlich" mrate[1].close etc heißen.