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: 4228
Beiträge: 39240
Benutzer: 6.529
Aktive Benutzer: 255
Links: 80
Wir begrüßen unseren neuesten Benutzer: mt4user
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor einem Tag
- mt4user
vor einem Tag
- htnob77
vor einem Tag
- pitpitrows...
vor einem Tag
- Neldam
vor 3 Tagen
- Gerik

Onlineuser
'Wer ist online' anzeigen Benutzer: 1
Gäste: 72
Gesamt: 73
Team: 0
Team:  
Benutzer:  fxnoob
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: 147
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: 147
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: 147
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
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 20:16 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.
-----------------------------------------------------------------------------------------------------------------------------