Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools  
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4294
Beiträge: 39577
Benutzer: 6.607
Aktive Benutzer: 218
Links: 80
Wir begrüßen unseren neuesten Benutzer: Carstn
Mit 1.311 Benutzern waren die meisten Benutzer gleichzeitig online (vor 5 Tagen um 01:18).
Neue Benutzer:
vor 3 Stunden
- Carstn
vor 6 Tagen
- dellinger
vor einer Woche
- SABA
vor einer Woche
- artfeld
vor einer Woche
- sonnejian

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 151
Gesamt: 151
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 13.03.19
Neues Mitglied
 
Registriert seit: Mar 2019
Beiträge: 5
RollsReus befindet sich auf einem aufstrebenden Ast
Standard 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.
Mit Zitat antworten
  #2 (permalink)  
Alt 15.03.19
AVT AVT ist offline
Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 211
AVT befindet sich auf einem aufstrebenden Ast
Standard

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
Mit Zitat antworten
  #3 (permalink)  
Alt 15.03.19
Neues Mitglied
 
Registriert seit: Mar 2019
Beiträge: 5
RollsReus befindet sich auf einem aufstrebenden Ast
Standard

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
Mit Zitat antworten
  #4 (permalink)  
Alt 15.03.19
Neues Mitglied
 
Registriert seit: Mar 2019
Beiträge: 5
RollsReus befindet sich auf einem aufstrebenden Ast
Standard

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:
//Longtrade

if (Ask>(RangeHigh+Point*20))
//1. Ausbruch über dem RangeHigh
Erstausbruch = true;

if(iOpen(Symbol(),NULL,0)<RangeHigh && iClose(Symbol(),NULL,0)<RangeHigh)
//danach Innenstab innerhalb der Range

if (Ask>(RangeHigh+Point*20) && Erstausbruch == true && TradeAllowed == true && RangeOk==true && GetTotalTrades()==0)
//2. Ausbruch über dem RangeHigh


{
bool ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-(SL*Point),Ask+(TP*Point),NULL,Magic,0,Blue);
TradeAllowed=false;
}
Beim Kompilieren wird bei der Syntax kein Fehler festgestellt, jedoch habe ich irgendwo noch einen Fehler in der Umsetzung. Fällt Dir ein Fehler auf den ich korrigieren sollte damit es funktioniert?

Vielen Dank vorab.
Mit Zitat antworten
  #5 (permalink)  
Alt 16.03.19
AVT AVT ist offline
Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 211
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von RollsReus Beitrag anzeigen
Code:
iOpen(Symbol(),NULL,0)
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
Fehlt noch Innenstab-Bedingung (Hoch und Tief der 1. Kerze mit der vorherigen, also der 2. Kerze vergleichen), versuch's mal. Ein Tip: wenn Du im MT-Editor das Wort z.B. iOpen geschrieben hast, Cursor auf Wort, F1 drücken und Du kriegst automatisch die Hilfseite dazu.
AVT
Mit Zitat antworten
  #6 (permalink)  
Alt 16.03.19
Neues Mitglied
 
Registriert seit: Mar 2019
Beiträge: 5
RollsReus befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von AVT Beitrag anzeigen
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
Fehlt noch Innenstab-Bedingung (Hoch und Tief der 1. Kerze mit der vorherigen, also der 2. Kerze vergleichen), versuch's mal. Ein Tip: wenn Du im MT-Editor das Wort z.B. iOpen geschrieben hast, Cursor auf Wort, F1 drücken und Du kriegst automatisch die Hilfseite dazu.
AVT
Habe mich mit dem iOpen/iClose total vertan, danke. War wohl doch schon zu spät gestern Abend.

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:
//Longtrade

if (Ask>(RangeHigh+Point*20)) //1. Ausbruch über dem RangeHigh
Erstausbruch = true;
RangeInnenstab = false;

if(Erstausbruch == true && RangeInnenstab == false && iHigh(Symbol(),NULL,0)<RangeHigh && iLow(Symbol(),NULL,0)>RangeLow) //danach Innenstab innerhalb der Range
RangeInnenstab = true;

if (RangeInnenstab == true && Ask>(RangeHigh+Point*20) && TradeAllowed == true && RangeOk==true && GetTotalTrades()==0) //2. Ausbruch über dem RangeHigh


{

bool ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-(SL*Point),Ask+(TP*Point),NULL,Magic,0,Blue);
TradeAllowed=false;
}
//Shorttrade
if (Bid<(RangeLow+Point*-20) && TradeAllowed == true && RangeOk==true && GetTotalTrades()==0)
{
bool ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+( SL*Point),Bid-(TP*Point),NULL,Magic,0,Red);
TradeAllowed=false;
}

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.
Mit Zitat antworten
  #7 (permalink)  
Alt 16.03.19
Neues Mitglied
 
Registriert seit: Mar 2019
Beiträge: 5
RollsReus befindet sich auf einem aufstrebenden Ast
Standard

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.
Mit Zitat antworten
  #8 (permalink)  
Alt 19.03.19
AVT AVT ist offline
Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 211
AVT befindet sich auf einem aufstrebenden Ast
Standard

Leider habe ich nicht immer Zeit, daher konnte ich Deine letzte Anfrage erst jetzt sehen. Aber super, daß Du es allein hinbekommen hast AVT
Mit Zitat antworten
  #9 (permalink)  
Alt 07.06.19
Mitglied
 
Registriert seit: Dec 2017
Ort: 76891
Beiträge: 117
Angel befindet sich auf einem aufstrebenden Ast
Standard

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
Ich habe dies in 2 For-Schleifen gelöst.
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
Mit Zitat antworten
Antwort

Lesezeichen


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +2. Es ist jetzt 01:29 Uhr.


Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2019 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2017 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------