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)
-   -   Return to Open (http://www.expert-advisor.com/forum/showthread.php?t=5215)

erakman 12.10.16 21:38

Return to Open
 
Hallo, hat jemand eine kleine Idee zu folgender Thematik?

Gesucht wird täglich die Anzahl der M5 Kerzen bis der Kurs nach Markteröffnung um 9:00 Uhr wieder das Open berührt.

Einziges Kriterium ist, dass vor der Kerze, welche das Open berührt/crossed, mindestens eine M5 Kerze das Open nicht berührt, somit oberhalb oder unterhalb des Open ist.

Beispiel :
if(TimeHour(TimeCurrent()==9)
1.M5 Kerze berührt das open logischerweise : Low(0)<=Open(Eröffnungskurs)<=High(0)
2.M5 Kerze beispielsweise auch: Low(0)<=Open(Eröffnungskurs)<=High(0)
3.M5 Kerze beispielsweise auch: Low(0)<=Open(Eröffnungskurs)<=High(0)
4 Kerze keine Berührung-- Kriterium erfüllt:
Low(0)>Open(Eröffnungskurs) && High(0)>Open(Eröffnungskurs) // Kerze oberhalb
oder
Low(0)<Open(Eröffnungskurs) && High(0)<Open(Eröffnungskurs) // Kerze unterhalb
5. Kerze entsprechend Kerze 4 -- oberhalb oder unterhalb wie 4
6. Kerze berührt EK
Low(0)<=Open(Eröffnungskurs)<=High(0)

Ergebnis 6

Hat jemand eine Codeidee dazu, komme leider nicht weiter!

Vielen Dank

MA-EA 13.10.16 07:45

Kannst Du das mal grafisch darstellen?

Was soll das Ganze bringen?

erakman 13.10.16 16:48

Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
vielen Dank für deine Antwort.
Als Beispiel ein Screenshot.
Ergebnis wäre demnach 7 und nicht 2.

Ich brauche den Output dieser Funktion um damit in meinem EA weiterarbeiten zu können.
Wäre cool, wenn du vielleicht eine Idee dazu hättest.

LG

traderdoc 13.10.16 18:59

So, mal schnell aus der Hüfte geschossen, ohne Überprüfung.

Code:

//global die Variablen deklarieren

if (TimeHour(TimeCurrent()>=9) {
  if (!stopcounting) {
      if (!timeflag) {
        OpenKurs = Open[0];
        touch = true;
        count = 0;
        candlecount = 0;
        OldBar = Time[0];
        timeflag = true;
      }
      if (OldBar != Time[0]) {
        candlecount++;
        if (!touch) count = 1;
            else count = 0;
        OldBar = Time[0];
      }
      if (Low[0] <= OpenKurs && High[0] >= OpenKurs)  touch = true;
        else touch = false;
      if (touch && count == 1) {
        //Aktion - candlecount stellt nun die Anzahl der Kerzen zwischen der
        //09:00 Kerze und dem ersten Berühren dieses OpenKurses dar, mit
        //der VorKerze der Unberührtheit
        stopcounting = true;
      }
  }
} else {
  timeflag = false;
  stopcounting = false;
}

traderdoc

erakman 13.10.16 20:37

Hey Traderdoc,
vielen Dank für deinen Input.
Ich checke das mal und gebe dir gerne Feedback.
LG

erakman 14.10.16 12:39

Hi Traderdoc,
also laufen tut es , liefert nur keine Ergebnisse.
Woran kann das liegen? Der Code scheint logisch einwandfrei.
LG

extern bool stopcounting = false;
extern bool timeflag = false;
extern bool touch;
extern int OpenKurs;
extern int count;
extern int candlecount ;
extern int OldBar;

//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
//global die Variablen deklarieren

if (TimeHour(TimeCurrent()>=9)) {
if (!stopcounting) {
if (!timeflag) {
OpenKurs = Open[0];
touch = true;
count = 0;
candlecount = 0;
OldBar = Time[0];
timeflag = true;
}
if (OldBar != Time[0]) {
candlecount++;
if (!touch) count = 1;
else count = 0;
OldBar = Time[0];
}
if (Low[0] <= OpenKurs && High[0] >= OpenKurs) touch = true;
else touch = false;
if (touch && count == 1) {
Comment("Anzahl = " , candlecount);
//Aktion - candlecount stellt nun die Anzahl der Kerzen zwischen der
//09:00 Kerze und dem ersten Berühren dieses OpenKurses dar, mit
//der VorKerze der Unberührtheit
stopcounting = true;
}
}
}
else {
timeflag = false;
stopcounting = false;
}
}

//+------------------------------------------------------------------+

traderdoc 14.10.16 15:28

Nun, so kann das auch nicht gehen, da die Variablen nicht als extern zu deklarieren sind. Außerdem muß unbeding die Variable OpenKurs double sein und nicht int, sonst wird der gesamte Kommateil ignoriert.

Also:

bool stopcounting = false;
bool timeflag = false;
bool touch;
double OpenKurs;
int count;
int candlecount ;
int OldBar;

traderdoc

traderdoc 14.10.16 16:07

Desweiteren habe ich hier eine Zeile von Dir falsch übernommen:

if (TimeHour(TimeCurrent()>=9)) {

Richtig:
if (TimeHour(TimeCurrent())>=9) {

traderdoc

traderdoc 14.10.16 17:35

Code überprüft, Ergebnisse werden angezeigt, läuft fehlerfrei!

traderdoc


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