Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Kleines MQL4 Problem!! (http://www.expert-advisor.com/forum/showthread.php?t=2884)

Tycoon 23.04.13 21:49

Kleines MQL4 Problem!!
 
Hallo an alle!
Mein erster Beitrag startet gleich mit einer Frage an euch!?
Ich bin gerade dabei MQL4 zu lernen.Das Programieren klappt auch schon ganz gut.Bisher habe ich mich bei allen Fehlern die ich begangen habe selber durchgefuchst,aber jetzt komme ich nicht weiter.
Meine Frage: Ich habe ein Trade offen.Dieser wird unglücklich ausgestoppt.Nun besteht ja das Signal noch und sofort wird wieder ein trade eröffnet!Wenn ich crossover trade möchte ich ja auch nur das kreuzen traden und nicht schon die bestehende kreuzung vor langer Zeit!!!
Könnt ihr mir vielleicht ne Erklärung liefern???
Vielen Dank im voraus!

Racki 23.04.13 22:41

Helas, du kannst mit den Balken arbeiten, oder dir sonst irgendeinen Schalter einbauen um zu verhindern ältere Signale zu verarbeiten.
Je nachdem wie du deine Strategie umgesetzt hast, findet sich bestimmt ein entsprechendes Mittel. Die bereits erwähnten Bars, Hour(), DayOfYear() usw.
Zusätzlich einen temporären Schalter, der durch eine X-beliebige Methode umgeschaltet wird.

s.l.
Racki

Deepack 23.04.13 23:07

versuche auf die periode davor zu überprüfen ob dort das gegensignal läuft
dann hast du geben genau die kreuzung und der EA dürfte danach nicht sofort wieder einsteigen
es sei denn du hast den stop so eng gesetzt dass in der eröffnungsperiode schon ausgestoppt wirst dann ists klar dass noch eine position eröffnet wird

Tycoon 24.04.13 10:42

Zitat:

Zitat von Deepack (Beitrag 20645)
versuche auf die periode davor zu überprüfen ob dort das gegensignal läuft
dann hast du geben genau die kreuzung und der EA dürfte danach nicht sofort wieder einsteigen
es sei denn du hast den stop so eng gesetzt dass in der eröffnungsperiode schon ausgestoppt wirst dann ists klar dass noch eine position eröffnet wird

Also wenn bsp. die 10er ema die 30er kreuzen soll, dass ich das so deklariere das min.
vorher iclose (..3) über der 10 er waren?

Tycoon 24.04.13 12:09

Zitat:

Zitat von Racki (Beitrag 20643)
Helas, du kannst mit den Balken arbeiten, oder dir sonst irgendeinen Schalter einbauen um zu verhindern ältere Signale zu verarbeiten.
Je nachdem wie du deine Strategie umgesetzt hast, findet sich bestimmt ein entsprechendes Mittel. Die bereits erwähnten Bars, Hour(), DayOfYear() usw.
Zusätzlich einen temporären Schalter, der durch eine X-beliebige Methode umgeschaltet wird.

s.l.
Racki

Mit der Timefunktion ist mir auch schon durch den Kopf gewandert.Habe gelesen
das die Hour () Funktion mir die Stundenanzahl erst ab Programmstart ausgibt??
0, 1, 2, 3, 4.....24 ??
if (Hour ()> 8) Dann müsste das Programm von mir um 0:00 UHR gestartet werden?
Habe ich das Richtig gelesen? Wäre ja auch blöd! !!

Deepack 24.04.13 12:35

hallo

ich habe dir kurz ein stück code geschrieben
hab ich zwar jetzt nicht getestet aber es sollte so die logik stimmen
und er sollte jetzt genau den schnittpunkt nehmen und eben dann die meldung ausgeben
bist du eine periode weiter wird nichts mehr ausgegeben
weil die bedingung nicht erfüllt ist

Code:


double MA10_1 = iMA(Symbol(),Period(), 10, 0, MODE_SMA,PRICE_CLOSE,1);
double MA10_2 = iMA(Symbol(),Period(), 10, 0, MODE_SMA,PRICE_CLOSE,2);

double MA30_1 = iMA(Symbol(),Period(), 30, 0, MODE_SMA,PRICE_CLOSE,1);
double MA30_2 = iMA(Symbol(),Period(), 30, 0, MODE_SMA,PRICE_CLOSE,2);

if(MA30_2 > MA10_2 && MA30_1 < MA10_1) Alert ("kauf");

hoffe du kannst damit was anfangen

traderdoc 24.04.13 17:43

Aber wenn nun, das Open und das Close auf einer Kerze passiert, wird auch in Deinem Codefall eine weitere Order geöffnet.

Man kann das Problem so lösen, indem man nur bei jedem Kerzenwechsel die Kreuzung der Indikatorwerte der letzten und vorletzten geschlossenen Kerze abfragt und bei entsprechender Signalgebung die Order einmalig! öffnet.

Code:


if (timeold != Time(0)) {
  timeold = Time(0);
  // Code zum Eruieren des Signals
  if (Kreuzung) {
      //OrderSend
  }
}

Man nimmt die beiden letzten geschlossenen Kerzen, um nur tatsächlich stattgefundene Kreuzungen zu traden.

Viel Erfolg!

traderdoc

Deepack 24.04.13 18:22

oh aja stimmt hab ich vergessen
danke fürs ergänzen

Tycoon 24.04.13 19:42

Danke euch erstmal!!!
Die iTime()Funktion gibt mir die Zeit des jeweiligen Balken zurück??
Also iTime(NULL,0,1) wäre die Zeit des letzten Balkens???

traderdoc 24.04.13 20:34

In meinem Code müßtest Du bei Time(0) statt den runden die eckigen Klammern benutzen. Dieser Ausdruck steht für die OpenTime der aktuellen Kerzen des jeweiligen Charts.
Die iTime()-Funktion wird genommen, wenn man im selben Währungspaar aber in einem anderen TimeFrame die Zeit Abfragen will, oder wenn man von einem anderen Währungspaar etwas über die Zeit wissen will.

traderdoc


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:35 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum