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.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3822
Beiträge: 36911
Benutzer: 6.070
Aktive Benutzer: 493
Links: 80
Wir begrüßen unseren neuesten Benutzer: John_Livermore
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 29 Minuten
- harry1001
vor 16 Stunden
- supadog
vor einem Tag
- POCJonah7
vor einem Tag
- flowi88
vor einem Tag
- dealtycoon

Onlineuser
'Wer ist online' anzeigen Benutzer: 3
Gäste: 48
Gesamt: 51
Team: 0
Team:  
Benutzer:  Domke01, harry1001, John_Livermore
Freunde anzeigen

Empfehlungen

Werbung

Like Tree1Likes
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 23.08.13
Neues Mitglied
 
Registriert seit: Feb 2011
Beiträge: 13
AiGelb befindet sich auf einem aufstrebenden Ast
Standard 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?
  #2 (permalink)  
Alt 24.08.13
Mitglied
 
Registriert seit: Apr 2011
Ort: Osnabrück
Beiträge: 103
Racki befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von AiGelb Beitrag anzeigen
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.
  #3 (permalink)  
Alt 26.08.13
Neues Mitglied
 
Registriert seit: Feb 2011
Beiträge: 13
AiGelb befindet sich auf einem aufstrebenden Ast
Standard

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?!

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
  #4 (permalink)  
Alt 26.08.13
Mitglied
 
Registriert seit: Aug 2013
Beiträge: 61
dave_hofmann befindet sich auf einem aufstrebenden Ast
Standard

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
  #5 (permalink)  
Alt 26.08.13
Neues Mitglied
 
Registriert seit: Feb 2011
Beiträge: 13
AiGelb befindet sich auf einem aufstrebenden Ast
Standard

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?
  #6 (permalink)  
Alt 26.08.13
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 224
pako befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von AiGelb Beitrag anzeigen
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();
  }
//-------------------------------------+ 
Ca$hDigger likes this.
  #7 (permalink)  
Alt 26.08.13
Neues Mitglied
 
Registriert seit: Feb 2011
Beiträge: 13
AiGelb befindet sich auf einem aufstrebenden Ast
Standard

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...
  #8 (permalink)  
Alt 26.08.13
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 224
pako befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von AiGelb Beitrag anzeigen
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...

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);
  }
//+------------------------------------------------------------------+ 

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

Geändert von pako (26.08.13 um 23:36 Uhr)
  #9 (permalink)  
Alt 27.08.13
Neues Mitglied
 
Registriert seit: Feb 2011
Beiträge: 13
AiGelb befindet sich auf einem aufstrebenden Ast
Standard

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!
  #10 (permalink)  
Alt 27.08.13
Mitglied
 
Registriert seit: Aug 2013
Beiträge: 61
dave_hofmann befindet sich auf einem aufstrebenden Ast
Standard

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
Thema geschlossen

Lesezeichen

Stichworte
close, durchschnittswert, durchschnittswert close, mql4, programmierung, programmierung metatrader


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 +1. Es ist jetzt 15:31 Uhr.



Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2017 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.
-----------------------------------------------------------------------------------------------------------------------------