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)
-   -   Simple Anfängerfrage (http://www.expert-advisor.com/forum/showthread.php?t=3173)

AiGelb 23.08.13 08:55

Simple Anfängerfrage
 
Hi,

ich mache gerade meine ersten Gehvesuche also nicht gleich köpfen.

Meine erste Übung: ich möchte den Durchschnittsclose-Wert der 3 letzten Bars im Tradingjounal ausgeben.

Der Tester läuft auf USD/EUR 5min und einem Tag per Datum eingeschränkt.
Demnach müsste ich mehrer Duzend Einträge erhalten.

Meine Idee:

double hilfe1;
double hilfe2;
double hilfe3;
double hilfe4;

hilfe1 = Close[0];
hilfe2 = Close[1];
hilfe3 = Close[2];

hilfe4 = (hilfe1+hilfe2+hilfe3)/3;

Print("der durchschnitt ist ", DoubleToStr(hilfe4,5));


Das Problem ist das der Close[0] scheinbar immer den aktuellen Bar ausliest aber das mit den vorgängern funktioniert nicht. Jetzt habe ich schon recherchiert das vermutlich alle selektierten Bars durchgezählt werden und demnach der Close[1] immer der gleiche ist ? KOmisch aber das dann der Close[0] funktioniert. Das verwirrt mich zumindest. Demnach wäre mein nächster Versuch die Zählung in einer Schleife laufen zu lassen?

Racki 24.08.13 05:33

Zitat:

Zitat von AiGelb (Beitrag 23289)
Hi,

ich mache gerade meine ersten Gehvesuche also nicht gleich köpfen.

Meine erste Übung: ich möchte den Durchschnittsclose-Wert der 3 letzten Bars im Tradingjounal ausgeben.

Der Tester läuft auf USD/EUR 5min und einem Tag per Datum eingeschränkt.
Demnach müsste ich mehrer Duzend Einträge erhalten.

Meine Idee:

double hilfe1;
double hilfe2;
double hilfe3;
double hilfe4;

hilfe1 = Close[0];
hilfe2 = Close[1];
hilfe3 = Close[2];

hilfe4 = (hilfe1+hilfe2+hilfe3)/3;

Print("der durchschnitt ist ", DoubleToStr(hilfe4,5));


Das Problem ist das der Close[0] scheinbar immer den aktuellen Bar ausliest aber das mit den vorgängern funktioniert nicht. Jetzt habe ich schon recherchiert das vermutlich alle selektierten Bars durchgezählt werden und demnach der Close[1] immer der gleiche ist ? KOmisch aber das dann der Close[0] funktioniert. Das verwirrt mich zumindest. Demnach wäre mein nächster Versuch die Zählung in einer Schleife laufen zu lassen?

Da hast du dir die Antwort doch schon selbst gegeben, oder ich hab nicht ganz das Problem erkannt.
Ja, Close[0] ist der aktuelle Kurs.
PHP-Code:

double DurchschnittClose = (Close[1]+Close[2]+Close[3])/3;
Print(
"Durchschnitt = " DurchschnittClose); 

Die Feldvariable Close muss also ab Index 1 angesprochen werden.

AiGelb 26.08.13 18:06

OK Danke,

also ich habe einen neuen EA gemacht mit deinem Code.

Ich verstehe jetzt nicht die Ausgabe im Journal:

Warum bekomme ich jetzt ganz viele Einträge für jede MInute, ich erwarte nur einen Eintrag für alle 5 Minuten?! :confused:

2013.08.26 17:59:48 2013.08.22 23:30 TEST EURUSD,M5: Durchschnitt = 1.33566000
2013.08.26 17:59:48 2013.08.22 23:31 TEST EURUSD,M5: Durchschnitt = 1.33566000
2013.08.26 17:59:48 2013.08.22 23:31 TEST EURUSD,M5: Durchschnitt = 1.33566000

dave_hofmann 26.08.13 21:26

Hallo AiGelb,

der Grund liegt daran, dass die Print funktion häufiger, wahrscheinlich bei jedem Tick aufgerufen wird. Die Berechnung wird immer wieder neu durchgeführt, kommt aber immer zum gleichen Ergebnis, daran siehst du das mit dem Tick.

Schönen Abend,

Dave

AiGelb 26.08.13 21:35

So etwas hatte ich befürchtet.

Wünschenswert wäre natürlich wenn es die in dem Strategietester verwendete Zeitintervalle verwendet. (hier zum Beispiel 5 Min).

Muss dies dann mittels Programmcode abgefangen werden?
Wie sehe soetwas aus?! Besteht die Möglichkeit dynamisch das ausgewählte Zeitintervall zu verwenden des Testers zu verwenden?

pako 26.08.13 22:35

Zitat:

Zitat von AiGelb (Beitrag 23338)
So etwas hatte ich befürchtet.

Wünschenswert wäre natürlich wenn es die in dem Strategietester verwendete Zeitintervalle verwendet. (hier zum Beispiel 5 Min).

Muss dies dann mittels Programmcode abgefangen werden?
Wie sehe soetwas aus?! Besteht die Möglichkeit dynamisch das ausgewählte Zeitintervall zu verwenden des Testers zu verwenden?

PHP-Code:

datetime mzeit;
//---------------------------------------+
if(TimeCurrent() - mzeit 300)//-- 5 min
  
{
   
bla-bla-bla;// code
   
mzeit TimeCurrent();
  }
//-------------------------------------+ 


AiGelb 26.08.13 22:50

Ah okay ich verstehe die Idee...
So sieht der Code jetzt aus.

PHP-Code:

int start()
  {
//----

datetime mzeit;

if(
TimeCurrent() - mzeit 300)//-- 5 min
  
{
double DurchschnittClose = (Close[1]+Close[2]+Close[3])/3;
Print(
"Durchschnitt = " DurchschnittClose);  
mzeit TimeCurrent();
  }
return(
0);
   
   
  } 

Ergebnis funktioniert nicht:

2013.08.26 22:46:59 2013.08.19 00:02 TEST EURUSD,M5: Durchschnitt = 1.33245000
2013.08.26 22:46:59 2013.08.19 00:01 TEST EURUSD,M5: Durchschnitt = 1.33245000
2013.08.26 22:46:59 2013.08.19 00:01 TEST EURUSD,M5: Durchschnitt = 1.33245000
2013.08.26 22:46:59 2013.08.19 00:01 TEST EURUSD,M5: Durchschnitt = 1.33245000
2013.08.26 22:46:58 2013.08.19 00:01 TEST EURUSD,M5: Durchschnitt = 1.33245000

usw...

pako 26.08.13 23:22

Zitat:

Zitat von AiGelb (Beitrag 23341)
Ah okay ich verstehe die Idee...
So sieht der Code jetzt aus.

PHP-Code:

int start()
  {
//----

datetime mzeit;

if(
TimeCurrent() - mzeit 300)//-- 5 min
  
{
double DurchschnittClose = (Close[1]+Close[2]+Close[3])/3;
Print(
"Durchschnitt = " DurchschnittClose);  
mzeit TimeCurrent();
  }
return(
0);
   
   
  } 

Ergebnis funktioniert nicht:

2013.08.26 22:46:59 2013.08.19 00:02 TEST EURUSD,M5: Durchschnitt = 1.33245000
2013.08.26 22:46:59 2013.08.19 00:01 TEST EURUSD,M5: Durchschnitt = 1.33245000
2013.08.26 22:46:59 2013.08.19 00:01 TEST EURUSD,M5: Durchschnitt = 1.33245000
2013.08.26 22:46:59 2013.08.19 00:01 TEST EURUSD,M5: Durchschnitt = 1.33245000
2013.08.26 22:46:58 2013.08.19 00:01 TEST EURUSD,M5: Durchschnitt = 1.33245000

usw...

:eek:
PHP-Code:

datetime mzeit;
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
  
if(TimeCurrent() - mzeit 300)//-- 5 min 
  

   
double DurchschnittClose = (Close[1]+Close[2]+Close[3])/3
   Print(
"Durchschnitt = " DurchschnittClose);   
   
mzeit TimeCurrent(); 
  } 
 
   
//----
   
return(0);
  }
//+------------------------------------------------------------------+ 

:D
23:18:59 test: loaded successfully
23:19:00 TestGenerator: spread set to 2
23:19:00 test test started
23:19:00 2013.08.12 00:00 test EURUSD,M1: Durchschnitt = 1.33371000
23:19:07 2013.08.12 00:05 test EURUSD,M1: Durchschnitt = 1.33370333
23:19:10 2013.08.12 00:10 test EURUSD,M1: Durchschnitt = 1.33370667
23:19:15 2013.08.12 00:15 test EURUSD,M1: Durchschnitt = 1.33371000

AiGelb 27.08.13 07:27

Ok dumm, habe es jetzt verstanden. Ein Schritt weiter.
Danke für die Unterstützung.

Was an diesem Beispiel nun blöd ist das wenn nach 5 Minuten in dieser Sekunde kein Folge Tick da ist, verschiebt sich das Konstrukt allerdings immer etwas. Über längere Zeit ist passiert dann wohl dies

2013.08.27 07:18:40 2013.08.20 09:41 TEST EURUSD,M5: Durchschnitt = 1.33688667
2013.08.27 07:18:40 2013.08.20 09:36 TEST EURUSD,M5: Durchschnitt = 1.33637333
2013.08.27 07:18:40 2013.08.20 09:30 TEST EURUSD,M5: Durchschnitt = 1.33611333
2013.08.27 07:18:40 2013.08.20 09:25 TEST EURUSD,M5: Durchschnitt = 1.33581333

Vermutlich müsste man die Überschuss-Sekunden abrunden und dann den 300er Vergleich ziehen.

Aber gut ich versuche nun mal meine nächste Übung!

dave_hofmann 27.08.13 08:48

Hallo,

zum Runden der Sekunden, kannst du mzeit = TimeCurrent()%300 verwenden. Per Modulo (Division ohne Rest) ist das Problem geloest. Jetzt verschiebt sich nichts.

Guten Tag

Dave


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