Hallo zusammen,
ich habe einen einfachen Indikator mit 6 Indikator Buffern erstellt.
Wenn ich diesen Indikator im Strategietester ausführe (mit historischen Daten) werden die Indikator Buffer angezeigt (Pic1. JPG --> gelbe Kreise mit 1,2,3 und graue Rauten).
Wenn ich nun den Indikator in einen EA einbaue:
werden die Index Buffer nicht mehr im Chart angezeigt (Pic2.JPG). Woran kann das liegen? Der Indikator arbeitet aber ansonsten korrekt.
Wird der EA einem Trading Chart hinzugefügt, werden auch dort die Index Buffer korrekt angezeigt. Nur Im Strategietester erscheinen sie nicht.
(Die Linen, die in den Charts zu sehen sind, werden nicht über die Index Buffer erzeugt, sondern über separate Objekte eingefügt.)
Viele Grüße,
Thomas
Separate Objekte sind für einen EA nicht sinnvoll.
Der EA sollte allerdings die buffer auslesen können!
Die dynamische initialisierung der buffer habe ich hier bereits mehrmals gepostet.
Und wenn du mehr code hier postest kann dir besser geholfen werden.
Schau Dir mal dieses Beispiel an: https://www.mql5.com/en/articles/91
Der EA verwendet einen Indikator mit mehreren Puffern. Übrigens Du verwendest 7 Puffer: 0..6 = 7
- www.mql5.com
Separate Objekte sind für einen EA nicht sinnvoll.
Der EA sollte allerdings die buffer auslesen können!
Die dynamische initialisierung der buffer habe ich hier bereits mehrmals gepostet.
Und wenn du mehr code hier postest kann dir besser geholfen werden.
Hallo Otto,
danke für die Hinweise:
- Separate Objekte sind für einen EA nicht sinnvoll. --> was ist der Nachteil von Separaten Objekten? (Diese werden bei mir im Indikator erzeugt)
- Den EA kann ich auslesen, dass ist nicht das Problem. Die Buffer Inhalte werden im Strategietester nur nicht als grafische Elemente im Chart angezeigt
Hier noch mehr Code aus dem Indikator:
//--- input parameters input int InpToleranz; #property indicator_buffers 7 //---- indicator buffers double ABuffer[]; double BBuffer[]; double CBuffer[]; double ExtUpperBuffer[]; double ExtLowerBuffer[]; double ABCDLineBuffer[]; double ABCDTradeInfo_SL[]; double ABCDTradeInfo_TP[]; //--- 10 pixels upper from high price int ExtArrowShift=-10; int ABCDArrowShift=-20; //--- Globale Variablen int SpreadFaktor = 2; // Faktor, um der der Abstand zwischen A und B größer sein muss als der Spread, damit sinvoll gehandelt werden kann. double MaxAC = 0.5; // maximales Verhältinis des Rückgangs in der Konsolidierungsphase - Verhältnis der Strecken (B-C) zu (B-A) //bool runOK = false; int tempA = 0; int tempB = 0; int tempC = 0; int tempD = 0; int countC = 0; // Anzahl der gefundenen C-Punkte --> auszuführende Trades double SLDistanz = 0.1; // Abstand des zu setzenden StopLos (C - Prozentwert der Strecke BC --> C-((B-C)*SLDistanz) = StopLoss ) int lastBar = 0; ... //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,ExtUpperBuffer,INDICATOR_DATA); SetIndexBuffer(1,ExtLowerBuffer,INDICATOR_DATA); SetIndexBuffer(2,ABuffer,INDICATOR_DATA); SetIndexBuffer(3,BBuffer,INDICATOR_DATA); SetIndexBuffer(4,CBuffer,INDICATOR_DATA); SetIndexBuffer(5,ABCDTradeInfo_SL,INDICATOR_CALCULATIONS); SetIndexBuffer(6,ABCDTradeInfo_TP,INDICATOR_CALCULATIONS); IndicatorSetInteger(INDICATOR_DIGITS,_Digits); //---- sets first bar from what index will be drawn // Symbolen der Schrift Wingdings, die mit dem Objekt OBJ_ARROW verwendet werden: https://www.mql5.com/de/docs/constants/objectconstants/wingdings PlotIndexSetInteger(0,PLOT_ARROW,119); PlotIndexSetInteger(1,PLOT_ARROW,119); PlotIndexSetInteger(2,PLOT_ARROW,140); PlotIndexSetInteger(3,PLOT_ARROW,141); PlotIndexSetInteger(4,PLOT_ARROW,142);- //---- arrow shifts when drawing PlotIndexSetInteger(0,PLOT_ARROW_SHIFT,ExtArrowShift); PlotIndexSetInteger(1,PLOT_ARROW_SHIFT,-ExtArrowShift); PlotIndexSetInteger(2,PLOT_ARROW_SHIFT,-ABCDArrowShift); PlotIndexSetInteger(3,PLOT_ARROW_SHIFT,ABCDArrowShift); PlotIndexSetInteger(4,PLOT_ARROW_SHIFT,-ABCDArrowShift); //---- sets drawing line empty value-- PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE); PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE); PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE); PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,EMPTY_VALUE); PlotIndexSetDouble(4,PLOT_EMPTY_VALUE,EMPTY_VALUE); //---- sets drawing Color PlotIndexSetInteger(2,PLOT_LINE_COLOR,clrOrange); PlotIndexSetInteger(3,PLOT_LINE_COLOR,clrOrange); PlotIndexSetInteger(4,PLOT_LINE_COLOR,clrOrange); Print ("--- Indikator ----------------------------------"); Print ("Symbol: " + _Symbol); Print ("Period: " + _Period); //EventSetTimer(10); //---- sets first bar from what index will be drawn //---- initialization done return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| 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[]) { int i; int limit; int bars=Bars(_Symbol,_Period); //--- sind genügend Bars vorhanden? if(rates_total<10) return(0); if (bars >lastBar) { lastBar = bars; if(prev_calculated<7) { limit=3; //--- clean up arrays ArrayInitialize(ABuffer,EMPTY_VALUE); ArrayInitialize(BBuffer,EMPTY_VALUE); ArrayInitialize(CBuffer,EMPTY_VALUE); ArrayInitialize(ExtUpperBuffer,EMPTY_VALUE); ArrayInitialize(ExtLowerBuffer,EMPTY_VALUE); ArrayInitialize(ABCDLineBuffer,EMPTY_VALUE); } else limit=rates_total-5; ...
Hier noch die OnInit aus dem EA:
//+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- hCI=iCustom(NULL,0,"ThG_Test\\ThG-ind_ABCD_t\\ThG-ind_ABCD_t"); int err = ChartIndicatorAdd(0,0,hCI); //Show Custom Indicator //EventSetTimer(20); SendMsg("Init EA: ", MQL5InfoString(MQL5_PROGRAM_NAME)); //Sende Message mit Name des EA, wenn EA gestartet wird. //--- return(INIT_SUCCEEDED); }
Kann es eftl. auch an den Settings des Strategietesters liegen?

- www.mql5.com
Schau Dir mal dieses Beispiel an: https://www.mql5.com/en/articles/91
Der EA verwendet einen Indikator mit mehreren Puffern. Übrigens Du verwendest 7 Puffer: 0..6 = 7Klar 7 ;-)
Danke für den Tip. Ich schaue mir das Beispiel an...

- www.mql5.com
Versuch mal diese Funktion: https://www.mql5.com/de/docs/common/testerhideindicators
Hallo zusammen,
ich habe einen einfachen Indikator mit 6 Indikator Buffern erstellt.
Wenn ich diesen Indikator im Strategietester ausführe (mit historischen Daten) werden die Indikator Buffer angezeigt (Pic1. JPG --> gelbe Kreise mit 1,2,3 und graue Rauten).
Wenn ich nun den Indikator in einen EA einbaue:
werden die Index Buffer nicht mehr im Chart angezeigt (Pic2.JPG). Woran kann das liegen? Der Indikator arbeitet aber ansonsten korrekt.
Wird der EA einem Trading Chart hinzugefügt, werden auch dort die Index Buffer korrekt angezeigt. Nur Im Strategietester erscheinen sie nicht.
(Die Linen, die in den Charts zu sehen sind, werden nicht über die Index Buffer erzeugt, sondern über separate Objekte eingefügt.)
Viele Grüße,
Thomas
Das ist das normale Verhalten. iCustom () ruft einen Indikator im Hintergrund auf und wird nicht visuell auf das Diagramm angewendet. Sie können entweder ChartIndicatorAdd () oder eine Vorlage verwenden (siehe Dokumentation).
Ganz so stimmt das nicht, es stimmt im Terminal, aber nicht im Backtest. Im Backtest wird der Indikator sehr wohl im Strategietester und im Chart angezeigt
Das ist das normale Verhalten. iCustom () ruft einen Indikator im Hintergrund auf und wird nicht visuell auf das Diagramm angewendet. Sie können entweder ChartIndicatorAdd () oder eine Vorlage verwenden (siehe Dokumentation).
ChartIndicatorAdd() habe ich explizit schon aufgerufen (siehe Post #3 zweiter Code Abgschnitt):
//+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- hCI=iCustom(NULL,0,"ThG_Test\\ThG-ind_ABCD_t\\ThG-ind_ABCD_t"); int err = ChartIndicatorAdd(0,0,hCI); //Show Custom Indicator //EventSetTimer(20); SendMsg("Init EA: ", MQL5InfoString(MQL5_PROGRAM_NAME)); //Sende Message mit Name des EA, wenn EA gestartet wird. //--- return(INIT_SUCCEEDED); }
Fuktioniert aber trotzdem nicht.
Mittlerweile glaube ich, dass es an einer Kleinigkeit scheitert oder an einem Setting meines Metatraders oder MetaEditor/Strategietesters.
Ich habe mal die Dateien des Indikators und des EA hier angehängt.
So, jetzt habe ich meinen EA von iCustom auf IndicatorCreate umgestellt und siehe da, jetzt funktioniert es.Ich weiß zwar nicht warum, aber immerhin.
Mein Code sieht nun so aus:
#property tester_indicator "ThG_Expert_ABCD.mq5" ... //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- MqlParam params[]; ArrayResize(params,1); params[0].type = TYPE_STRING; params[0].string_value = "ThG_Test\\ThG-ind_ABCD_t\\ThG-ind_ABCD_t"; //hCI=iCustom(NULL,0,"ThG_Test\\ThG-ind_ABCD_t\\ThG-ind_ABCD_t"); //int err = ChartIndicatorAdd(NULL,0,hCI); //Show Custom Indicator hCI=IndicatorCreate(NULL,0,IND_CUSTOM,1,params); //EventSetTimer(20); SendMsg("Init EA: ", MQL5InfoString(MQL5_PROGRAM_NAME)); //Sende Message mit Name des EA, wenn EA gestartet wird. Print("--- Expert ----------------------------------"); Print("Symbol: " + (string)_Symbol); Print("Period: " + (string)_Period); Print("MQL_VISUAL_MODE: " + (string)MQLInfoInteger(MQL_VISUAL_MODE)); Print("MQL_DEBUG: " + (string)MQLInfoInteger(MQL_DEBUG)); //--- return(INIT_SUCCEEDED); }
Was ist eigentlich der Unterschied zwischen iCustom und IndicatorCreate?

- 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 zusammen,
ich habe einen einfachen Indikator mit 6 Indikator Buffern erstellt.
Wenn ich diesen Indikator im Strategietester ausführe (mit historischen Daten) werden die Indikator Buffer angezeigt (Pic1. JPG --> gelbe Kreise mit 1,2,3 und graue Rauten).
Wenn ich nun den Indikator in einen EA einbaue:
werden die Index Buffer nicht mehr im Chart angezeigt (Pic2.JPG). Woran kann das liegen? Der Indikator arbeitet aber ansonsten korrekt.
Wird der EA einem Trading Chart hinzugefügt, werden auch dort die Index Buffer korrekt angezeigt. Nur Im Strategietester erscheinen sie nicht.
(Die Linen, die in den Charts zu sehen sind, werden nicht über die Index Buffer erzeugt, sondern über separate Objekte eingefügt.)
Viele Grüße,
Thomas