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)
-   -   Problem bei Zeitfunktion (http://www.expert-advisor.com/forum/showthread.php?t=5460)

Alien 10.02.17 19:15

Problem bei Zeitfunktion
 
Guten Abend,

ich bin fast komplett neu auf dem Gebiet (ein paar Basics in C++) und würde mich freuen wenn mir jemand weiterhelfen kann.
Folgendes Problem:

Ich möchte ein EA programmieren, der alle 45 im 1h chart den RSI abruft und überprüft, ob dieser über 70 ist. Sollte das zutreffen, soll er nach 20 Minunten überprüfen, ob der RSI größer bzw kleiner als der Wert vor 30 Minuten ist. Ist der RSI also gesunken, wird ein Trade eröffnet, wenn nicht, überprüft er so lange, bis das zutrift. (Also sollte der RSI über 70 gehen, wird auf jeden Fall ein Trade eröffnet, aber eben erst dann, wenn dieser wieder damit beginnt abzufallen)

Ich bräuchte nur ein paar Denkanstöße wie ich das Problem angehe, weil ich mit if - schleifen leider nicht weit komme. :confused:
Und kann ich die eventsettimer() und ontimer() Funktionen belieben oft im code benutzen, solange ich sie danach schließe?

lg

MA-EA 10.02.17 22:17

Alle 45 was? :confused:

Alien 11.02.17 00:50

45 min sorry:D

Kronenchakra 11.02.17 01:23

Nachdem du offensichtlich Zeitintervalle unabhängig vom aktuellen Timeframe benötigst, brauchst du einen Timer der das erledigt. Soweit richtig erkannt!
Du kannst allerdings pro Indi/EA nur einen Timer aktivieren.
Ist weiters kein Problem, denn was der auslöst, kannst ja du festlegen.
Benötigst du einen Timer der alle 45 min die OnTimer() aktiviert, definierst du in der Oninit(): EventSetTimer(60*45) und on Timer() wird alle 45 min aktiviert.
Nachdem du aber verschiedene Zeitintervalle benötigst, musst du den Timer auf schneller stellen. zb auf 10 min. EventSetTimer(600) = 60sec*10 = alle 10 min.
In der OnTimer() musst du dann unterscheiden, zb mit TimeCurrent(), oder einem Zähler, was du jetzt machen willst.

Ich hoffe das bringt dich weiter :)

Alien 11.02.17 13:43

Also kann ich während das Programm läuft, die Zeiteinstellung von dem Timer ändern?

JJ-FX 11.02.17 18:23

Nö, aber Du könntest - wie ja bereits vorgeschlagen - eine Zählvariable einbauen. Wenn die Schleife z.B. alle fünf Minuten läuft, und die Zählvariable ohne Rest durch 9 teilbar ist, sind 45 Minuten rum - wenn denn tatsächlich alle 45 Minuten gemeint war. Wenn es eher jeweils xx:45 Uhr sein soll, könntest Du mit TimeMinute(TimeLocal()) bzw. TimeMinute(TimeCurrent()) die Minute der aktuellen Uhrzeit des Rechners bzw. des Servers gegen 45 prüfen.

traderdoc 11.02.17 20:20

Zitat:

Zitat von Alien (Beitrag 37600)
Also kann ich während das Programm läuft, die Zeiteinstellung von dem Timer ändern?

Ja natürlich geht das!

Code:

extern int Timer = 5;  //Angabe in Sekunden oder in Millisekunden

...

int OnInit() {
  ...
  EventSetTimer(Timer); //bei Verwendung der Sekunden
  //oder EventSetMillisecondTimer(Time) //bei Verwendung der Millisekunden
}

void OnDeinit(const int reason) {
  ...
  EventKillTimer(); 
}

void OnTimer() {
  ...
  //Action! 
}

Mittels Taste F7 die Eigenschaften des EAs aufrufen, Time-Wert ändern, Ok klicken - fertig!



Alle Zeitangaben in WEZ +2. Es ist jetzt 15:28 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