Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 09.07.17
Kronenchakra Kronenchakra ist offline
Gesperrter Benutzer
 
Registriert seit: Feb 2016
Ort: 2100 Österreich
Beiträge: 313
Kronenchakra befindet sich auf einem aufstrebenden Ast
Standard Maximale Kerzengröße feststellen

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.
Angehängte Dateien
Dateityp: mq5 MaxCandle.mq5 (4,2 KB, 5x aufgerufen)

Geändert von Kronenchakra (09.07.17 um 20:44 Uhr) Grund: Datei angehängt