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);
@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.
@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.
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.
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.
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
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