Vertikale Linie Fehler bei Indicator Object Create

Einloggen oder registrieren, um einen Kommentar zu schreiben
amando
2886
amando  

Ich habe da mal eine Vertikale Linie in den Chart gezeichnet, diese soll 5 Perioden vor dem aktuellen chart sein.

jetzt geh ich her und Lege mir diesen Indicator auf den Chart

Das Funktionier z.B bei EURUSD immer, in jedem Timeframe, die Linie ist 5 Perioden vor dem chart

wenn ich jetzt aber auf den Dax gehe,

dann hab ich das am Tageschart 10 Perioden davor

und am 4H Chart 28 Perioden davor,


und ab dem 1h Chart abwärts ist das nicht mehr sichtbar

der Code ist relativ einfach hab mal einen Indi gebastelt der nix anderes macht

int OnInit()
  {

   VLineCreate(0,"VLinefürChart",0,TimeCurrent()+ 5*PeriodSeconds(PERIOD_CURRENT),clrRed);



   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

   ObjectDelete(0,"VLinefürChart");

  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool VLineCreate(const long            chart_ID=0,        // ID des Charts
                 const string          name="VLine",      // Linienname
                 const int             sub_window=0,      // Nummer des Unterfensters
                 datetime              time=0,            // Linienzeit
                 const color           clr=clrRed,        // Linienfarbe
                 const ENUM_LINE_STYLE style=STYLE_SOLID, // Linienstil
                 const int             width=1,           // Linienbreite
                 const bool            back=true,        // Im Hintergrund
                 const bool            selection=false,    // Wählen um zu bewegen
                 const bool            ray=true,          // Fortsetzung der Linie nach unten
                 const bool            hidden=true,       // Ausgeblendet in der Objektliste
                 const long            z_order=0)         // Priorität auf Mausklick
  {
//--- wenn die Zeit der Linie nicht angegeben ist, wird sie auf den letzten Balken liegen
   if(!time)
      time=TimeCurrent();

   ResetLastError();

   if(!ObjectCreate(chart_ID,name,OBJ_VLINE,sub_window,time,0)
      && GetLastError() != 5040)
     {
      Print(__FUNCTION__,
            ": Vertikale Linie konnte nicht erstellt werden! Fehlercode = "+name,GetLastError());
      return(false);
     }

   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_RAY,ray);
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);

   return(true);
  }
//+-------------------------------------------------------------


ist das wieder mal ein fehler von Metaquotes? oder darf ich die Periode so nicht vorgeben?



danke

amando
2886
amando  

ich hab da noch was dazu gefunden,

bitte was ist das? Charts kann man ja nur um einen Festen Wert einrücken

ChartSetDouble(0,CHART_SHIFT_SIZE,Wert);
Otto Pauser
2167
Otto Pauser  

Ich hab mir das jetzt angesehen. Habe eine bewährte HLine.mqh auf eine VLine.mqh adaptiert.

Hab a bisserl gebraucht um zu behirnen daß die horizontale Koordinate ja datetime ist und nicht double wie der Preis.

Noch dazu bin ich auf eine blöden Fehler in der HLine.mqh draufgekommen. Nicht schlimm, aber doch schlecht.

Amando, du darfst nicht von der CurrentTime() ausgehen sondern von der Zeit der aktuellen Kerze.

#property indicator_chart_window
#property indicator_plots 0

#include <Tools\VLine.mqh>

datetime dt[1];
datetime lineTime;

int OnInit()
{

   return(INIT_SUCCEEDED);
}

int OnCalculate(const int rates_total,const int prev_calculated,const int begin,const double &price[])
{
   CopyTime(_Symbol,_Period,0,1,dt);
   lineTime=dt[0]+5*PeriodSeconds(PERIOD_CURRENT);
   VLine.Draw("VLinefürChart",lineTime);
   return(rates_total);
}

Schmeiss dir die angehängten mqh in den Ordner MQL5\Include\Tools. Und gib sie ja nicht weiter ;) Steckt viel Erfahrung und Hirnschmalz drin!

Die haben auch den Vorteil, daß der aktuelle Wert 'gecached' wird, und beim Optimieren überhaupt das Zeichnen ausgeschaltet wird!

Auf verschiedenen Instrumenten und Timeframes habe ich es nicht ausprobiert.

Dateien:
VLine.mqh 19 kb
HLine.mqh 19 kb
amando
2886
amando  
Otto Pauser:

Ich hab mir das jetzt angesehen. Habe eine bewährte HLine.mqh auf eine VLine.mqh adaptiert.

Hab a bisserl gebraucht um zu behirnen daß die horizontale Koordinate ja datetime ist und nicht double wie der Preis.

Noch dazu bin ich auf eine blöden Fehler in der HLine.mqh draufgekommen. Nicht schlimm, aber doch schlecht.

Amando, du darfst nicht von der CurrentTime() ausgehen sondern von der Zeit der aktuellen Kerze.

Schmeiss dir die angehängten mqh in den Ordner MQL5\Include\Tools. Und gib sie ja nicht weiter ;) Steckt viel Erfahrung und Hirnschmalz drin!

Die haben auch den Vorteil, daß der aktuelle Wert 'gecached' wird, und beim Optimieren überhaupt das Zeichnen ausgeschaltet wird!

Auf verschiedenen Instrumenten und Timeframes habe ich es nicht ausprobiert.


Danke, das Funktioniert

hast Du so ein Include auch für die TrendLine fertig?

Otto Pauser
2167
Otto Pauser  
amando:


Danke, das Funktioniert

hast Du so ein Include auch für die TrendLine fertig?

Hab ich leider nicht, aber evtl. hilft das weiter: https://www.mql5.com/de/code/19640
Mit vier Klicks einen bogenförmigen Kanal zeichnen
Mit vier Klicks einen bogenförmigen Kanal zeichnen
  • www.mql5.com
Diese Implementierung wurde mehr als Schulungsmaterial und als Versuch unternommen, die Entwickler von MetaTrader 5 zu inspirieren, ein solches Tool zu dem Standardsatz von MetaTrader-5-Objekten hinzuzufügen. Es ist nicht in Form einer Klasse implementiert, Speichern und Übergeben von Parametern bei Änderung des Zeitrahmens, keine zusätzlichen...
amando
2886
amando  
Otto Pauser:
Hab ich leider nicht, aber evtl. hilft das weiter: https://www.mql5.com/de/code/19640

Kein problem, war eigentlich gedacht, da ja eine trendline auch einen anfangs und endpunkt haben kann, nach rechts oder links weiterzeichnen ist ja nur optional 😂

Alain Verleyen
40370
Alain Verleyen  
amando :

ich hab da noch was dazu gefunden,

bitte was ist das? Charts kann man ja nur um einen Festen Wert einrücken

Es ist der gleiche Code wie bei der MT5-Benutzeroberfläche.
Einloggen oder registrieren, um einen Kommentar zu schreiben