Custom Indicator zeigt übergebene Inputparameter aus EA nicht auf Chart an

 

Hallo in die Runde,

Ich nutze verschiedene Customindikators deren Inputparameter korrekt über die EA gesteuert und übergeben werden.

Dabei sind die Inputparameter in den Indikatoren ohne Wert initialisiert. Die Indikatoren reagieren, da bei unterschiedlichen übergebenen Werten jeweils andere Ergebnisse generiert werden.

Das funktioniert auch alles soweit gut.

Was mich allerdings stört und für die visuelle Analyse hinderlich ist, ist die Tatsache, dass die graphische Anzeige im Chart nicht den Inputparametern entspricht. Die bleibt immer gleich (obwohl das Programm nach den übergebenen Werten rechnet). Es sind auch die Indikatoren, mit  denen gerechnet wird (Name des Indikators, wie übergeben beim Abrufen des Handles), wie ich anhand der Eingabemaske überprüft habe.

Wahrscheinlich liegt es daran, dass ich die gezeigten Werte irgendwann als bzw. mit der benutzten Vorlage gespeichert habe. Ich will aber nicht jedes Mal händisch per Eingabemaske das Erscheinungsbild ändern, das müsste automatisch erfolgen. Bloß wie?

Danke im voraus

 
Ohne den Code kann man nur raten was das Problem ist, aber ich rate mal...
Du initialisierst die iCustom Handles in der OnInit nehme ich an. Die müsstest Du auslagern in eine externe Funktion, welche die Handles mit den generierten Werten neu initialisiert.
Diese kannst Du dann von überall her aufrufen. Du müsstest nur mit Bedingungen begrenzen dass Du nicht bei jedem Tick reinitialisierst.
 

Danke pennyhunter  für die schnelle Anwort:

Da ich den Sinn nicht ganz verstehe und bevor ich alles umbaue: Es müsste doch reichen, wenn ich den Indikator einmal in OnInit() initiatlisiere? Oder? Er arbeitet ja auch korrekt (im Sinne von korrekt rechnen), nur dass er auf dem chart nicht abgebildet wird.

Hier ein paar Codezeilen betr. einem der Indikatoren (parabolic LaGuerre):

int OnInit()
  {
//--- Indicatorhandle Parabolic LaGuerre:
//------------------------------------------------------------------

   InpInd_Handle_LaGuerre= iCustom(_Symbol,_Period,"laguerre",
                                           gamma,
                                           laguerre_low_level,
                                           laguerre_up_level);
   // Abfangen Fehler:
   if(InpInd_Handle_LaGuerre==INVALID_HANDLE)
     {
      Print(Inp_EaComment,": Fehler bei LaGuerre-Handle");
      Print("Handle = ",InpInd_Handle_LaGuerre,"  error = ",GetLastError());
      return(INIT_FAILED);
     }
  
    ArrayInitialize(LaGuerreBuffer,0.0);
    ArraySetAsSeries(LaGuerreBuffer,true);     //

Zu den letzten beiden Codezeilen: Die Indikatorwerte rufe ich in der OnTick()-Schleife mit einer Funktion ab:

//+------------------------------------------------------------------+
//| Holt die aktuellen Indikatorwerte ab                         |
//+------------------------------------------------------------------+
bool GetIndValue()
  {
  return(
          CopyBuffer(InpInd_Handle_SAR,0,0,10,sarBuffer)<=0||
          CopyBuffer(InpInd_Handle_MACD,0,0,3,MacdBuffer)<=0||
          CopyBuffer(InpInd_Handle_MACD,1,0,3,SignalBuffer)<=0||
          CopyBuffer(InpInd_Handle_MACD,2,0,3,HistogramBuffer)<=0||
          CopyBuffer(InpInd_Handle_LaGuerre,0,0,3,LaGuerreBuffer)<=0||
          CopyBuffer(InpInd_Handle_MA_Slow,0,0,3,MA_Slow_Buffer)<=0||
          CopyBuffer(InpInd_Handle_MA_Fast,0,0,3,MA_Fast_Buffer)<=0 ||
          CopyBuffer(InpInd_Handle_AverageSpeed,0,0,3,avr_Buffer)<=0 
          )?false:true;
  }

In der Indikatordatei werden dann die drei Paramter in der richtigen Reihenfolge initiatisiert:


//--- drawing the indicator in a separate window
#property indicator_separate_window
//--- one buffer is used for calculation and drawing of the indicator
#property indicator_buffers 1
//--- only one plot is used
#property indicator_plots   1
//--- drawing of the indicator as a line
#property indicator_type1   DRAW_LINE
//--- Magenta color is used for the indicator line
#property indicator_color1  Magenta
//--- values of indicator's horizontal levels
#property indicator_level2 
#property indicator_level3
#property indicator_level4 
//--- blue color is used as the color of the horizontal level
#property indicator_levelcolor Blue
//--- line style
#property indicator_levelstyle STYLE_DASHDOTDOT
//--- indicator input parameters
input double gamma;
input double laguerre_low_level;
input double laguerre_up_level; 
//--- declaration of dynamic array that further
//--- will be used as indicator buffers
double ExtLineBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+  
void OnInit()
  {
//--- set ExtLineBuffer[] dynamic array as indicator buffer
   SetIndexBuffer(0,ExtLineBuffer,INDICATOR_DATA);
//--- prepare a variable for indicator short name
   string shortname;
   StringConcatenate(shortname,"Laguerre(",gamma,")");
//--- create label to display in Data Window
   PlotIndexSetString(0,PLOT_LABEL,shortname);
//--- creating name for displaying in a separate sub-window and in a tooltip
   IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//--- set accuracy of displaying of the indicator values
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1);
//--- set empty values for the indicator
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
 // Setzt die Levels im seperat window
  
   IndicatorSetInteger(INDICATOR_LEVELS,3);
   IndicatorSetDouble(INDICATOR_LEVELVALUE,0,laguerre_low_level);
   IndicatorSetDouble(INDICATOR_LEVELVALUE,1,0.5);
   IndicatorSetDouble(INDICATOR_LEVELVALUE,2,laguerre_up_level);
 
Kurz noch(ist mir beim Durchlesen aufgefallen): der Indikator wird natürlich abgebildet, aber mit den falschen Werten (und damit in der falschen Form)
 
Brazzelhuber #:
Kurz noch(ist mir beim Durchlesen aufgefallen): der Indikator wird natürlich abgebildet, aber mit den falschen Werten (und damit in der falschen Form)
Also iCustom ruft für eine interne  Verarbeitung durch einen EA einen Indiaktor auf. Er wird nicht auf dem Chart dargestellt, das würde ich manuell machen.
 
Dein erster Post klang so als wolltest Du die Inputs automatisch bei Bedarf durch andere ersetzen. Habe ich das falsch verstanden?
 

@pennyhunter: genau, ich mache viele Tests mit genetischer Optimierung und muss häufig die Inputparameter (auch für die Indikatoren) ändern, da ist es

@ Carl: mühsam, wenn ich jedes Mal händisch die Indikatoren auf dem Chart einstellen muss, um eine optische Kontrolle zu machen.

Man sollte doch annehmen, dass, wenn ich den Indikator selbst in OnInit() erstelle, er sich auch entsprechend den mitgegebenen Werten auf dem Chart darstellt.

Kann es sein, dass es etwas mit der Chart-Vorlage zu tun hat? Weil: Wenn ich den Indikator manuell lösche und dann die Datei, mit der gerechnet wird auf das Chart ziehe, zeigt er mir im shortname, der auch einen Input enthält, 0 an (die Variable im Indikator ist initialisiert, aber ohne Wert, der ja übergeben wird).

Ich weiß, das ist ein Luxusproblem (weil ich es ja händisch machen kann), aber wäre schon schön, wenn es effizienter ginge.

 
Brazzelhuber #:

@pennyhunter: genau, ich mache viele Tests mit genetischer Optimierung und muss häufig die Inputparameter (auch für die Indikatoren) ändern, da ist es

@ Carl: mühsam, wenn ich jedes Mal händisch die Indikatoren auf dem Chart einstellen muss, um eine optische Kontrolle zu machen.

Man sollte doch annehmen, dass, wenn ich den Indikator selbst in OnInit() erstelle, er sich auch entsprechend den mitgegebenen Werten auf dem Chart darstellt.

Kann es sein, dass es etwas mit der Chart-Vorlage zu tun hat? Weil: Wenn ich den Indikator manuell lösche und dann die Datei, mit der gerechnet wird auf das Chart ziehe, zeigt er mir im shortname, der auch einen Input enthält, 0 an (die Variable im Indikator ist initialisiert, aber ohne Wert, der ja übergeben wird).

Ich weiß, das ist ein Luxusproblem (weil ich es ja händisch machen kann), aber wäre schon schön, wenn es effizienter ginge.

tester.tpl oder was meinst Du???
 

nein, ich meine Vorlagen, die man erreicht, wenn man auf dem Mainchart, die rechte Mousetaste drückt und dann zu "Vorlagen" geht (oder sind das die Dateien, die Du meinst?)

Ich benutze übrigens nur das Hauptfenster, nicht das Fenster, dass sich öffnet, wenn man die Option "visuelle Modus mit Anzeige von Charts, Indikatoren und Handel" unter dem Reiter "Einstellungen" aktiviert (weil dort man dort kein cross-hair hat). Aber auch wenn ich das aktiviere, verändern sich die Indikatoren in Tester-Fenster (das durch ein ein sechseckiges grünes Rad angezeigt wird) nicht.

 
Brazzelhuber #:

nein, ich meine Vorlagen, die man erreicht, wenn man auf dem Mainchart, die rechte Mousetaste drückt und dann zu "Vorlagen" geht (oder sind das die Dateien, die Du meinst?)

Ich benutze übrigens nur das Hauptfenster, nicht das Fenster, dass sich öffnet, wenn man die Option "visuelle Modus mit Anzeige von Charts, Indikatoren und Handel" unter dem Reiter "Einstellungen" aktiviert (weil dort man dort kein cross-hair hat). Aber auch wenn ich das aktiviere, verändern sich die Indikatoren in Tester-Fenster (das durch ein ein sechseckiges grünes Rad angezeigt wird) nicht.

https://www.mql5.com/de/forum/243659
Du musst einfach mal präzise sagen was Du eigentlich willst, und nicht so rumschwafeln, dann bekommst Du auch eine Antwort auf Deine Frage. tpl meint Template und ist genau das.
Grund der Beschwerde: