Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Codeschnipsel (http://www.expert-advisor.com/forum/forumdisplay.php?f=292)
-   -   Maximale Kerzengröße feststellen (http://www.expert-advisor.com/forum/showthread.php?t=5742)

Kronenchakra 09.07.17 20:38

Maximale Kerzengröße feststellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Das Thema mit den Spikes hat mich nicht losgelassen,
also habe ich ein anderes Testprogramm erstellt, das ohne den Metatester auskommt.
Es ist als Script programmiert, und misst die Maximalhöhe aller Kerzen eines Symbols.
Eingabewerte sind Timeframe und ein Grenzwert der minimalen Kerzenhöhe ab der Protokolliert werden soll.
Ausgabe ist Zeitpunkt und Größe der neu gefundenen Maximalkerze.
Code:

//+------------------------------------------------------------------+
//|                                                    MaxCandle.mqh |
//|                                Copyright © 2017 Ing. Otto Pauser |
//+------------------------------------------------------------------+
#property copyright  "Copyright © 2017 Ing. Otto Pauser"
#property description "Testscript um die Maximalgröße von Kerzen in der Historie festzustellen\n"
#property description "Maximalgröße der Kerzen = high - low"

#property script_show_inputs;

input ENUM_TIMEFRAMES timeframe = PERIOD_M5;          // Select Timeframe
input int            grenzwert = 100;                // Grenzwert für Überprüfung (points)

/*
  nach guter alter Pascaltradition, zuerst die Deklaration der Variablen
  das bewährt sich beim debuggen, der Debugger mäkelt sonst 'Unknown identifier'
  wenn der Cursor auf der Zeile der Forschleife steht, und das nervt.
  Die Deklaration könnte natürlich auch lokal, innerhalb der OnStart() stehen.
*/

double  aDif, aMax;
MqlRates rates[];
int      bars, copy, bar;
double  fakt = MathPow(10,_Digits);                  // Faktor zur Umrechnung des Kurses in Points

void OnStart()
{
  bars = Bars(_Symbol, timeframe);                  // Anzahl der Bars in diesem Timeframe

  if(grenzwert>=0)
      aMax=grenzwert;                                // Maximum auf Grenzwert setzen
  copy = CopyRates(_Symbol,timeframe,0,bars,rates);  // MqlRates in das dyn. Array kopieren
  if(copy!=bars)                                    // Errorcheck
      {
        Alert("*ERROR* in function CopyRates()");
        return;
      }
  for(bar=0; bar<bars; bar++)                        // Schleife über alle MqlRates
      {
        aDif=(rates[bar].high-rates[bar].low)*fakt;  // Differenz high-low in points
        if(aDif>aMax)                                // auf neues Maximum prüfen
            {
              aMax=aDif;
              Print("Neues Maximum am ",rates[bar].time, " ",DoubleToString(aMax,0));
            }
     
      }
  Print(bars," Kerzen in ",EnumToString(timeframe)," überprüft.");
}

Viel Erfolg beim Umbauen für andere Prüfzwecke.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:34 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