|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
1. Austitt Range, Eintritt Range mit Innenstab, 2. Austritt Range= Order
Guten Tag,
ich versuche mich aktuell an der Erstellung eines EA, der mir 1) zwischen 12:30 und 13:00 Uhr eine Range ausgibt, 2) aus dieser ausbricht 3) in den nächsten x-Candles wieder in die Range eintritt, 4) einen Range-Innenstab bildet und 5) bei Austritt einer Order absetzt. Punkt 1) und 5) habe ich bereits umsetzen können. Ich möchte jedoch, wie beschrieben, dass er erst beim zweiten Ausbruch eine Order setzt mit der zusätzlichen Bedingung, dass er in der Range vor dem zweiten Ausbruch einen Innenstab ausbildet. Kann mir ein EA-erfahrenes Forenmitglied einen Tipp geben, wie ich dies im mql4-Code umsetzen kann? Vielen Dank vorab für Eure Unterstützung. |
|
|||
Das erste funktioniert bei Dir ja schon, super, darauf kannst Du aufbauen.
Anstatt gleich eine Order loszulassen, setzt Du eine Variable wie zum Beispiel bool Erstausbruch=false und wenn der Ausbruch da war, wird diese zu Erstausbruch=true. Das ist Deine erste Bedingung. Nun mußt Du die weiteren Bedingungen formulieren. Ein Innenstab innerhalb der Range bedeutet (wir arbeiten mit vollendeten Kerzen): 1. das Hoch der vorletzten Kerze muß kleiner sein als die obere Rangelinie 2. das Tief der vorletzten Kerze muß größer sein als die untere Rangelinie Das stellt sicher, daß wir uns innerhalb der Range befinden. Nun noch der Innenstab hinterher 3. das Hoch der letzten Kerze muß kleiner sein als das Hoch der Vorletzten 4. das Tief der letzten Kerze muß größer sein als das Tief der Vorletzten Diese weiteren Bedingungen kombinierst Du jetzt. Wenn Erstausbruch && weitere Bedingungen && aktueller Close außerhalb der Range, dann Order loslassen. Reicht das schon, um Dich weiter zu bringen? AVT |
|
|||
Danke für Deinen Tipp. Habe die letzten zwei Tage vergeblich versucht mit meinen noch sehr luftigen EA-Kenntnissen die Idee umzusetzen, ohne wirklichen Erfolg. Werde es aber direkt nochmal probieren nach Deiner Rückmeldung und mich mit dem aktuellen Stand wieder melden. Vielen Dank nochmal für Deinen Support
|
|
|||
Vom Gefühl her, bin ich deutlich näher gekommen dank Deiner Hinweise. Aktuell setzt er jedoch (noch) keine Order nach den genannten Bedingungen. Magst Du bei Gelegenheit mal über folgenden Code-Schnipsel schauen:
} Zitat:
Vielen Dank vorab. |
|
|||
das gibt Dir den Eröffnungskurs (iOpen) der 0. Kerze, also den gerade aktuellen Eröffnungskurs. Du brauchst aber
1. den Höchstkurs iHigh 2. der vorletzten Kerze, das ist die 2. Kerze Kerzenzahlen werden standardmäßig von 0=aktuell zurückgezählt bis z.B. 3598=erste Kerze in Chart (gleichzeitig die erste Kerze, bei der Berechnungen anfangen können - klar, man kann nur mit dem rechnen, was man hat). Also Langstab innerhalb der Range Code:
iHigh(NULL,0,2) < RangeHigh // Hoch 2.Kerze vorher kleiner Obergrenze && iLow(NULL,0,2) > RangeLow // Tief 2. Kerze vorher größer Untergrenze AVT |
|
|||
Zitat:
Habe dies nun wie von Dir vorgeschlagen auf iHigh und iLow geändert. Trotz zahlreichen rumprobieren eröffnet der EA bei mir immer noch bei dem ersten Durchbruch bzw. im aktuellen Code garnicht mehr. Eine Info noch bevor ich den Code zeige: Ich hatte mich mit dem Innenstab unklar ausgedrückt. Ich wollte damit ausdrücken, dass ich nach dem ersten Ausbruch lediglich einen Bar sehen will der das Hoch unter dem RangeHigh hat und das Tief über dem RangeLow. Also nicht die klassiche Definition einen Innenstabs. Mehr ein "RangeInnenstab" (so habe ich ihn auch genannt). Zitat:
Hast Du noch einen Hinweis, warum es nicht klappt? Bin nach etlichen Versuchen mit meinem Latein nah am Ende. Kurze Erläuterung damit es besser verständlich ist: a)Nach 1. Ausbruch ist RangeInnenstab = false, damit er noch keine Order setzt. b) Nach dem Bilden des RangeInnenstabs ist dieser = true c) Und erst wenn RangeInnenstab = true ist, dann soll beim 2. Ausbruch die Order gesetzt werden. Danke orab für Deine bzw. je nach User-Antwort Eure Hilfe. |
|
|||
Es funktioniert jetzt. Ich hatte die bool Variablen nicht im int init definiert.
Ich möchte mich nochmals auf diesem Wege für Deine Hilfe bedanken. Der Austausch hat mir sehr geholfen. |
|
|||
Leider habe ich nicht immer Zeit, daher konnte ich Deine letzte Anfrage erst jetzt sehen. Aber super, daß Du es allein hinbekommen hast AVT
|
|
|||
Innenstäbe (Die "klassischen" / "üblichen") sind jedoch ein wenig anders definiert....
So etwas: Code:
// i = Außenstab, mit dem die Kerze z verglichen wird //z = die Kerze(n), die mit dem Außenstab i verglichen wird / werden if(BarClose[z]<BarHigh[i] && BarClose[z]>BarLow[i] && BarOpen[z]<BarHigh[i] && BarOpen[z]>BarLow[i])// Check, ob der Stab z ein Innenstab zu dem Stab i ist Code:
for(i=Anzahl;i>1;i--) // Erste Schleife; ´Beim Entstehen einer neuen 1-Minute Kerze sollen alle "Anzahl"-Kerzen durchlaufen und überprüft werden { for(z=i-1;z>0;z--) // Zweite Schleife; Anfang soll i-1 sein { if(BarClose[z]<BarHigh[i] && BarClose[z]>BarLow[i] && BarOpen[z]<BarHigh[i] && BarOpen[z]>BarLow[i]) } }
__________________
MQL4-Interessiert... und noch gaaaanz am Anfang |
Lesezeichen |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|