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)
-   -   Maximum oder Minimum eines Indikators (http://www.expert-advisor.com/forum/showthread.php?t=6473)

Max2018 07.08.19 10:29

Maximum oder Minimum eines Indikators
 
Hi,

ich will das Maximum und Minimum eines Indikators auslesen - klappt aber irgendwie nicht

Code:

      double MACDtip[1],MACDMinWert,MACDMaxWert;
      int MACDmini,MACDmaxi;     
      for(int u=0;u=20;u++)
      {
      MACDtip[u]=iMACD(NULL,0,MACDWert1,MACDWert2,9,PRICE_CLOSE,MODE_MAIN,u);
      MACDmini=ArrayMaximum(MACDtip,WHOLE_ARRAY,0);
      MACDmaxi=ArrayMinimum(MACDtip,WHOLE_ARRAY,0);
      }
      MACDMinWert=iMACD(NULL,0,MACDWert1,MACDWert2,9,PRICE_CLOSE,MODE_MAIN,MACDmini);
      MACDMaxWert=iMACD(NULL,0,MACDWert1,MACDWert2,9,PRICE_CLOSE,MODE_MAIN,MACDmaxi);
      Print("MACDMinWert: ",MACDMinWert);

wo ist der Fehler :confused:

Leopold 07.08.19 10:41

Hallo.

Hier sind ein paar Fehler. Ich kann diese gern mit dir durcharbeiten.

1. Fehler:

Code:

double MACDtip[1];
Damit wird das Array nur 1 Wert groß. Du musst die Größe der gewünschten Anzahl an Werten zuweisen oder diese Dynamisch (mit []) festlegen und die Größe immer wieder anpassen.

Max2018 07.08.19 10:54

ok, dann also

Code:

      double MACDtip[20]
ist das für das Beispiel richtig?

Leopold 07.08.19 11:05

Genau!

MACDMinWert, MACDMaxWert, MACDmini und MACDmaxi würde ich noch den Wert 0 zuweisen, damit diese auch einen Initialen Wert haben.

2. Fehler die for Schleife

Code:

for(int u=0;u=20;u++)
bei int u=0 musst du jetzt wissen ob du auch wirklich den aktuellen wert dabei haben willst. 0 ist für die aktuelle Periode, und diese ist noch nicht abgeschlossen. Wenn du nur Werte für abgeschlossene Perioden verwenden willst musst du mit 1 beginnen.

bei u=20 hier wird die Bedingung eingegeben bei der die Schleife noch ausgeführt wird. d.h. hier müsstest du <= bzw < verwenden. Aber Achtung, da du 20 Werte für dein Array willst musst du darauf achten auch nur 20 Werte dem Array zuzuweisen. Wenn du einen 21 Wert zuweisen willst bekommst du einen Fehler.

Max2018 07.08.19 11:11

SUPER Danke, so läuft es zumindest schon.....

Code:

      double  MACDtip[20],MACDMinWert,MACDMaxWert;
      int MACDmini,MACDmaxi;     
      for(int u=1;u<=20;u++)
      {
      MACDtip[u]=iMACD(NULL,0,MACDWert1,MACDWert2,9,PRICE_CLOSE,MODE_MAIN,u);
      MACDmini=ArrayMaximum(MACDtip,WHOLE_ARRAY,0);
      MACDmaxi=ArrayMinimum(MACDtip,WHOLE_ARRAY,0);
      }
      MACDMinWert=iMACD(NULL,0,MACDWert1,MACDWert2,9,PRICE_CLOSE,MODE_MAIN,MACDmini);
      MACDMaxWert=iMACD(NULL,0,MACDWert1,MACDWert2,9,PRICE_CLOSE,MODE_MAIN,MACDmaxi);
      Print("MACDMinWert: ",MACDMinWert);

Lag noch ein Fehler vor :confused:

Leopold 07.08.19 11:27

Hab was übersehn:

Du benötigst ja auch den Index für das Array und der beginnt bei 0.
Darum wär es doch besser int u=0 und die Bedingung u<20 verwenden. Damit hast du den Index für das Array. Bei der Indikator abfrage musst du dann aber den Index u+1 verwenden, damit er dann beim Indikator bei 1 beginnt.

Code:

for(int u=0;u<20;u++)
      {
      MACDtip[u]=iMACD(NULL,0,MACDWert1,MACDWert2,9,PRICE_CLOSE,MODE_MAIN,u+1);
      ...
      }

Es gäbe auch noch die möglichkeit für das Array einen eigenen Zähler zu verwenden aber Das ist doch eine sauberere Lösung.

Leopold 07.08.19 11:33

Zitat:

Zitat von Max2018 (Beitrag 42700)
SUPER Danke, so läuft es zumindest schon.....

Code:

      double  MACDtip[20],MACDMinWert,MACDMaxWert;
      int MACDmini,MACDmaxi;     
      for(int u=1;u<=20;u++)
      {
      MACDtip[u]=iMACD(NULL,0,MACDWert1,MACDWert2,9,PRICE_CLOSE,MODE_MAIN,u);
      MACDmini=ArrayMaximum(MACDtip,WHOLE_ARRAY,0);
      MACDmaxi=ArrayMinimum(MACDtip,WHOLE_ARRAY,0);
      }
      MACDMinWert=iMACD(NULL,0,MACDWert1,MACDWert2,9,PRICE_CLOSE,MODE_MAIN,MACDmini);
      MACDMaxWert=iMACD(NULL,0,MACDWert1,MACDWert2,9,PRICE_CLOSE,MODE_MAIN,MACDmaxi);
      Print("MACDMinWert: ",MACDMinWert);

Lag noch ein Fehler vor :confused:

Hier bekommst du nämlich das Problem, dass du dann MACDtip[20] einen Wert zuweisen willst und dieser dann außerhalb des Berechs des Arrays liegt und dieser endet bei 19 (bei 20 ist der Index 0-19).

Leopold 07.08.19 11:59

Die abfrage vom Min und Max Wert brauchst du nicht in die Schleife integrieren. Das Kannst du auch nachher machen:

Code:

MACDMinWert=MACDtip[ArrayMinimum(MACDtip,WHOLE_ARRAY,0)];
MACDMaxWert=MACDtip[ArrayMaximum(MACDtip,WHOLE_ARRAY,0)];

Damit kannst du dir auch die beiden Variablen MACDmini und MACDmaxi sparen.


Das sollte es dann gewesen sein. Vielleicht postest du den Code dann nochmal, dann schau ich nochmal drüber.

---Leopold---

Max2018 07.08.19 12:33

Klappt nicht .... der Maximalwert ist kleiner als das Minimum

Code:

      double  MACDtip[20],MACDMinWert,MACDMaxWert;
      int MACDmini,MACDmaxi;     
      for(int u=0;u<20;u++)
      {
      MACDtip[u]=iMACD(NULL,0,MACDWert1,MACDWert2,9,PRICE_CLOSE,MODE_MAIN,u+1);
      MACDmini=ArrayMaximum(MACDtip,WHOLE_ARRAY,0);
      MACDmaxi=ArrayMinimum(MACDtip,WHOLE_ARRAY,0);
      }
      MACDMinWert=iMACD(NULL,0,MACDWert1,MACDWert2,9,PRICE_CLOSE,MODE_MAIN,MACDmini);
      MACDMaxWert=iMACD(NULL,0,MACDWert1,MACDWert2,9,PRICE_CLOSE,MODE_MAIN,MACDmaxi);
      Print("MACDMinWert: ",MACDMinWert,"/ MACDMAXWert: ",MACDMaxWert);


Max2018 07.08.19 12:41

komisch manchmal ist Max>Min und dann wieder Min>Max ... da kann doch was nicht stimmen


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