Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Tools

Tools Tools für Metatrader 4.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3781
Beiträge: 36751
Benutzer: 5.988
Aktive Benutzer: 486
Links: 80
Wir begrüßen unseren neuesten Benutzer: Geccco
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 4 Stunden
- Geccco
vor 10 Stunden
- forexadven...
vor 10 Stunden
- mikedyke
vor 22 Stunden
- dmaha
vor 3 Tagen
- Take2

Onlineuser
'Wer ist online' anzeigen Benutzer: 2
Gäste: 53
Gesamt: 55
Team: 0
Team:  
Benutzer:  AndrewBa, Domke01
Freunde anzeigen

Empfehlungen

Werbung

Like Tree3Likes
  • 1 Post By ping
  • 1 Post By Kronenchakra
  • 1 Post By Kronenchakra
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 30.04.17
Benutzerbild von ping
Mitglied
 
Registriert seit: Feb 2017
Beiträge: 31
ping befindet sich auf einem aufstrebenden Ast
Standard Stundenvolatilität

Hi,

Wer wissen möchte, bei welchem Instrument, zu welcher Tageszeit, in welchem Timeframe, welche Durchschnittsvolatilität sich aus der Charthistorie ergibt, der findet diese in diesem Indikator.

--- Freeware ---

Zeigt die Durchschnittsvolatilität (der gesamten Charthistorie) für den ausgewählten Zeitraum (M1 bis MN)
aufgeschlüsselt auf die Tagesstunden an.


PHP-Code:
#property version "1.00"
#property copyright "copyright © 2017  tggits"
#property description "e-mail: tggits@web.de           homepage: tggits.weebly.com"
#property description "\n\n---  Freeware  ---\n"
#property description "Zeigt die Durchschnittsvolatilität (der gesamten Charthistorie) für den"
#property description "ausgewählten Zeitraum (M1 bis MN) aufgeschlüsselt auf die Tagesstunden an."
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_minimum 0
#property strict
extern int   Bz=0;            // Brokerzeitoffset [Stunden] [z.B -1 oder 2]
extern color Fa=C'50,90,200'// Farbe des Indikator
string       Tx="Std ";
double       P1[],Std[24][2];
int          i;
void init()
ChartSetInteger(0,CHART_HEIGHT_IN_PIXELS,ChartWindowFind(),310);
  
ChartSetInteger(0,CHART_HEIGHT_IN_PIXELS,ChartWindowFind(),0);
  
SetIndexBuffer(0,P1);
  
SetIndexEmptyValue(0,0.0);
  
SetIndexStyle(0,DRAW_HISTOGRAM,0,0,Fa);
  
SetIndexLabel(0,NULL); 
  for(
i=0;i<Bars;i++)
  { 
Std[TimeHour(Time[i]-Bz*3600)][0]+=High[i]-Low[i];
    
Std[TimeHour(Time[i]-Bz*3600)][1]++;
  }
  
i=0;
}
void start()
{ if(
i==0)
    for(
i=0;i<24;i++)
    { if(
Std[i][1]<1)
        
Std[i][1]=1;
      
P1[23-i]=Std[i][0]/Std[i][1];
      
ObjectCreate(0,Tx+(string)i,OBJ_LABEL,ChartWindowFind(),0,0);
      
ObjectSet(Tx+(string)i,OBJPROP_CORNER,4);
      
ObjectSet(Tx+(string)i,OBJPROP_XDISTANCE,5);
      
ObjectSet(Tx+(string)i,OBJPROP_YDISTANCE,16+i*12);
      
ObjectSet(Tx+(string)i,OBJPROP_HIDDEN,true);
      
ObjectSet(Tx+(string)i,OBJPROP_SELECTABLE,false);
      
ObjectSetString(0,Tx+(string)i,OBJPROP_TOOLTIP,"\n");
      if(
i<10)
        
ObjectSetText(Tx+(string)i,"Stunde 0"+(string)i+":   "+DoubleToStr(Std[i][0]/Std[i][1],Digits),8,"Tahoma",Fa);
      else
        
ObjectSetText(Tx+(string)i,"Stunde "+(string)i+":   "+DoubleToStr(Std[i][0]/Std[i][1],Digits),8,"Tahoma",Fa);
    }

Die Software wurde mit der Version 4.00 Build 1065 erstellt. Eine Abwärtskompatibilität ist bis Version 4.00 Build 970 gegeben.
Stundenvolatilität ist als Indikator programmiert und somit in den Ordner ...MQL4\Indicators zu verschieben.

ciao ping - tggits
Angehängte Grafiken
Dateityp: png Stundenvolatilität.png (98,6 KB, 11x aufgerufen)
Angehängte Dateien
Dateityp: ex4 Stundenvolatilität.ex4 (11,6 KB, 1x aufgerufen)
Dateityp: mq4 Stundenvolatilität.mq4 (3,8 KB, 7x aufgerufen)
Kronenchakra likes this.
__________________
In Wirklichkeit ist die Realität ganz anders!
  #2 (permalink)  
Alt 01.05.17
Benutzerbild von Kronenchakra
Mitglied
 
Registriert seit: Feb 2016
Ort: 2100 Österreich
Beiträge: 291
Kronenchakra befindet sich auf einem aufstrebenden Ast
Standard

Super Idee!
Und endlich jemand der auch freizügig Code postet.
Danke Ping

Ich greife die Idee auf und versuche das in MQL5 zu übersetzen.

Was ähnliches schwebt mit auch für den Spread vor.
Auf die Minute genau, sind es nicht so viele Daten, 60min * 24std = 1440 Arraygröße.
Auf eine gewisse Zeit rückblickend, ließe sich das dynamisch anpassen.
Ist sicher auch eine Entscheidungshilfe sowohl für EAs als auch traditionär, ob traden oder nicht.
Falls was sinnvolles rauskommt, poste ich es unter den Codeschnipseln.

Grüße Otto
ping likes this.
__________________
Das Gras wächst nicht schneller wenn man daran zieht
  #3 (permalink)  
Alt 02.05.17
Benutzerbild von Kronenchakra
Mitglied
 
Registriert seit: Feb 2016
Ort: 2100 Österreich
Beiträge: 291
Kronenchakra befindet sich auf einem aufstrebenden Ast
Standard

Die Migration von MQL4 zu MQL5 gibt oft Rätsel auf.
Vorab es ist gelungen, hat aber länger gedauert als angenommen.
Je tiefer ich in diese Materie eindringe, desto mehr denke ich mir: "Was hat sich Metaquotes denn da dabei wieder gedacht" (mal ganz vorsichtig ausgedrückt, vermutlich NICHTS)

Es beginnt ja schon mit false(False) und true(True), DoubleToStr(..) usw.
Was wäre denn schon dabei gewesen das doppelt zu definieren (alles muss man selber machen)
Code:
#define False false
#define True true
#define DoubleToStr DoubleToString
Das sind die leichtesten Übungen (könnte man natürlich auch mit Textersetzen machen).
-----------------------------------------
Folgende Unterschiede sind leider nicht so einfach auszugleichen:

1. Den Text im Indikatorfenster in MQL5 verschwinden zu lassen.
In MQL4:
Code:
SetIndexLabel  (0,NULL);
2. Die Höhe des Indikatorfensters in MQL5 voreinzustellen und diese kann vom Anwender immer noch verändert werden
Code:
ChartSetInteger(0,CHART_HEIGHT_IN_PIXELS,ChartWindowFind(),315);
ChartSetInteger(0,CHART_HEIGHT_IN_PIXELS,ChartWindowFind(),0);
Geht in MQL5 nicht, das Fenster schrumpft auf 0 zusammen und ist dort fix.
Nach der ersten Zeile ist es zwar 315 hoch, aber dort angenagelt (softwaremäßig kann man es ändern, aber nicht durch ziehen)

3. Die Präkompilerdirektive '#property strict' hat einen Einfluss darauf ob die Kommentare bei input bzw extern angezeigt werden.
Lässt man es weg, werden die Variablennamen angezeigt.
Das hat mit 'strict' imho aber absolut nix zu tun.

So, jetzt hab ich mir wieder meinen Frust von der Seele geschrieben.
Falls jemand Abhilfe für Punkt 1 oder 2 hat, bitte posten!!!

Hier die etwas gepimpte Stundenvolatilität für MQL4+MQL5. Ich hoffe ich hab keine Bugs eingebaut.
Code:
#property version "1.00"
#property copyright "copyright © 2017 tggits"
#property description "e-mail: tggits@web.de           homepage: tggits.weebly.com"
#property description "\n---  Freeware  ---\n"
#property description "Zeigt die Durchschnittsvolatilität (der gesamten Charthistorie) für den"
#property description "ausgewählten Timeframe (M1 bis H1) aufgeschlüsselt auf die Tagesstunden an.\n"
#property description "Für MQL4/MQL5 adaptiert von Otto Pauser alias Kronenchakra"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots 1         // gibt sonst Warnung in MQL5
#property strict                    // MQL4 benötigt das wegen den Inputkommentaren egal ob mit input oder extern

input int   inpDelta=0;             // Brokerzeitoffset [Stunden] [z.B -1 oder 2]
input color inpColor=clrSilver;     // Farbe des Indikators
input int   inpWidth=2;             // Linienbreite Histogramm

double      PlotBuf[],              // der Plotbuffer
            Vola [24];              // die aufsummiert Volatilität
int         Count[24];              // Zähler der Anzahl an Volawerten

#define DoubleToStr DoubleToString  // Kompatibilität

int OnInit()
{ 
   SetIndexBuffer     (0,PlotBuf,INDICATOR_DATA);                    // Buffermapping
   IndicatorSetDouble (INDICATOR_MINIMUM,0.0);
   IndicatorSetString (INDICATOR_SHORTNAME,"Stundenvolatilität");
   PlotIndexSetDouble (0,PLOT_EMPTY_VALUE,NULL);                     // MQL4 - SetIndexEmptyValue(0,0.0);
   
   ChartSetInteger(0,CHART_HEIGHT_IN_PIXELS,ChartWindowFind(),315);
#ifdef __MQL4__
   ChartSetInteger(0,CHART_HEIGHT_IN_PIXELS,ChartWindowFind(),0);    // das funktioniert nur in MQL4
   SetIndexStyle  (0,DRAW_HISTOGRAM,0,inpWidth,inpColor);            // Histogramm Stil, Breite, Farbe
   SetIndexLabel  (0,NULL);                                          // unterdrückt unnötige Zahlen im Indikatorfenster
#else
   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,  DRAW_HISTOGRAM);           // im MQL5 werden die Eigenschaften einzeln eingestellt
   PlotIndexSetInteger(0,PLOT_LINE_STYLE, STYLE_SOLID);
   PlotIndexSetInteger(0,PLOT_LINE_WIDTH, inpWidth);
   PlotIndexSetInteger(0,PLOT_LINE_COLOR, inpColor);
#endif

   ArraySetAsSeries(PlotBuf, true);
   return(INIT_SUCCEEDED);
}

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime& time[],
                const double& open[],
                const double& high[],
                const double& low[],
                const double& close[],
                const long& tick_volume[],
                const long& volume[],
                const int& spread[])
{
   int hour, i; string name; double vola;
   //int mult = pow(10,_Digits);
   
   if(prev_calculated==0)                          // nur einmal ausführen
      {
         ArrayInitialize(PlotBuf,NULL);
         for(i=0; i<rates_total; i++)              // Schleife über alle Kerzen
            {
               hour=CalcHour(time[i],inpDelta);    // Stunde berechnen
               Vola [hour]+=high[i]-low[i];        // Vola aufsummieren
               Count[hour]++;                      // Zähler incrementieren
            }

         for(i=0; i<24; i++)                       // Ergebnisse ausgeben
            {
               vola=(Vola[i]/Count[i]);            // vola berechnen
               //vola=(Vola[i]/Count[i])*mult;     // vola in points berechnen
               PlotBuf[23-i]=vola;                 // in Plotbuffer eintragen

               name="Stunde "+((i<10)?"0":"")+IntegerToString(i);          // Namen des Textobjects zusammenstellen

               ObjectCreate    (0,name,OBJ_LABEL,ChartWindowFind(),0,0);   // Textobjekt erzeugen und Werte setzen
               ObjectSetInteger(0,name,OBJPROP_CORNER,4);
               ObjectSetInteger(0,name,OBJPROP_XDISTANCE,5);
               ObjectSetInteger(0,name,OBJPROP_YDISTANCE,16+i*12);
               ObjectSetInteger(0,name,OBJPROP_COLOR,inpColor);
               ObjectSetInteger(0,name,OBJPROP_HIDDEN,true);
               ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);
               ObjectSetString (0,name,OBJPROP_TOOLTIP,"\n");
               ObjectSetString (0,name,OBJPROP_TEXT,name+":   "+DoubleToString(vola,_Digits));
            }
    }
   return(rates_total);
}

int CalcHour(datetime date, int delta)
{
   MqlDateTime tm;
   TimeToStruct(date,tm);
   if(tm.hour< 0) tm.hour+=23;
   if(tm.hour>23) tm.hour-=23;
   return(tm.hour);
}
Noch eine kleine Anmerkung zum Programm:
Dieses stellt die durchschnittliche Größe der einzelnen Kerzen dar, nicht die Kursschwankungen innerhalb der Stunde, das könnte man aber leicht adaptieren.
Nochmals Besten Dank an ping für die Idee und den Originalcode.

Ich progge mir jetzt ähnliches für den Spread auf Minutenbasis, bin schon gespannt auf die Durchschnittswerte.

Grüße Otto
Angehängte Dateien
Dateityp: mq5 Stundenvolatilität.mq5 (9,0 KB, 0x aufgerufen)
Dateityp: mq4 Stundenvolatilität.mq4 (9,0 KB, 1x aufgerufen)
traderdoc likes this.
__________________
Das Gras wächst nicht schneller wenn man daran zieht
Thema geschlossen

Lesezeichen

Stichworte
durchschnittsvolatilität, indikator, metatrader tools, programmierung, programmierung metatrader, tool


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 +2. Es ist jetzt 09:10 Uhr.



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.
-----------------------------------------------------------------------------------------------------------------------------