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)
-   -   Höchster Indikatorwert der letzten xPerioden??? (http://www.expert-advisor.com/forum/showthread.php?t=5698)

bennibunny 01.06.17 21:34

Höchster Indikatorwert der letzten xPerioden???
 
Hallo zusammen,

ich suche schon seit Tagen nach einer Lösung konnte aber weder im Forum noch bei etlichen google-Suchen das richtige finden.

Wie kann ich mir bei mql4 mir den höchsten wert eines Indikators (in meinem Fall des ATR) berechnen lassen.
Beispielsweise soll der Höchste Wert der letzten 3 Perioden >= dem Höchsten Wert der letzten 28 Perioden sein.

Mit dem iHighest() arbeite ich schon, allerdings funktioniert dieser leider nur auf Preisdaten. Wäre doch schön gewesen wenn man diesen auch für Indikatorenwerte benutzen könnte.

Vielen Dank im voraus und ich bin sicher das die Antwort auch für andere Interessant ist.

Adlerauge 03.06.17 12:06

Indikatoren schreiben ihre Werte in Buffer.
Buffer sind Arrays.
Den höchsten Wert eines Arrays kann man so ermitteln:

PHP-Code:


int Beispiel_Array
[10] = {7,3,11,17,2,7,11,3,22,1};
int Anzahl_zu_pruefender_Werte 10;

int groesster_Wert_Array Beispiel_Array[0];
for (
int i=1iAnzahl_zu_pruefender_Wertei++)
   {
    if (
groesster_Wert_Array Beispiel_Array[i] )
      {
       
groesster_Wert_Array Beispiel_Array[i];
      }
   }
Alert("groesster_Wert_Array: ",IntegerToString(groesster_Wert_Array)); 


Adlerauge 03.06.17 12:41

man sollte noch eine kleine Begrenzung einbauen, damit die Abfrage nicht über die Array-Länge hinausgehen kann:

PHP-Code:


int Beispiel_Array
[10] = {7,3,11,17,2,7,11,40,41,42};
int Anzahl_zu_pruefender_Werte 11;   // die 11 wäre hier zu gross und wird in der nächsten Zeile auf 10 korrigiert

if (ArraySize(Beispiel_Array) < Anzahl_zu_pruefender_WerteAnzahl_zu_pruefender_Werte ArraySize(Beispiel_Array);

int groesster_Wert_Array Beispiel_Array[0];
for (
int i=1iAnzahl_zu_pruefender_Wertei++)
   {
    if (
groesster_Wert_Array Beispiel_Array[i])
      {
       
groesster_Wert_Array Beispiel_Array[i];
      }
   }
 
Alert("groesster_Wert_Array: ",IntegerToString(groesster_Wert_Array)); 


traderdoc 03.06.17 22:15

Mann könnte es auch ganz knapp halten:

int Beispiel_Array[10] = {7,3,11,17,2,7,11,40,41,42};

int maxID = ArrayMaximum(Beispiel_Array,WHOLE_ARRAY,0);

int Max_Value = Beispiel_Array[maxID];

traderdoc

bennibunny 04.06.17 13:27

Oh vielen Dank für eure Antworten, wie man den größten Wert aus einer Zahlenreihe berechnen lässt habe ich kapiert.

Allerdings habe ich da noch eine eine Frage wie bekomme ich denn die Werte des Indikators z.B. des iATR in den array? Der array[123] kann ja schließlich nur mit Zahlen etwas anfangen.


MfG

bennibunny

Adlerauge 04.06.17 16:34

nun, ich bin kein Spezialist für den ATR, da ich ihn nicht benutze, aber er gibt offensichtlich einen double-Wert zurück und der Array lässt sich über Shift in der ATR-Funktion ansprechen:
double iATR(
string symbol, // symbol
int timeframe, // timeframe
int period, // averaging period
int shift // shift
);

Den höchsten Wert auslesen könntest Du demnach so:

PHP-Code:


int ATR_Zeitrahmen 
60;
int ATR_Periode 14;
int Anzahl_zu_pruefender_Werte 100;

double groesster_Wert_ATR iATR(NULLATR_ZeitrahmenATR_Periode0);

for (
int i=1iAnzahl_zu_pruefender_Wertei++)
   {
    if (
groesster_Wert_ATR iATR(NULLATR_ZeitrahmenATR_Periodei)) groesster_Wert_ATR iATR(NULLATR_ZeitrahmenATR_Periodei);
   }
 
Alert("groesster_Wert_ATR: ",DoubleToString(groesster_Wert_ATR)); 

Ob das auch mit der MQL4-eigenen Funktion geht, die Traderdoc oben angeführt hat, weiss ich nicht - müsste er selbst beantworten..... würde mich auch interessieren ;-)

traderdoc 04.06.17 21:48

Nun, in dem eben genannten Beispiel des iATR wurde ja kein Array benutzt.
Die Funktion ArrayMaximum() würde hier nur funktionieren, wenn vorher die x Werte des ATR in ein Array geschrieben werden und dann ArrayMaximum() daraufhin angewendet wird.
Man könnte allerdings das ArrayMaximum in den Indicator integrieren, sofern man die mq4-Datei besitzt, denn dort werden die ATR-Werte in einem Array abgelegt.

traderdoc


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