MQL5: ALMA Indikator durch einfache EMA-200 Linie erweitert - Plot wird nicht mehr angezeigt. - Seite 2

 
  1. Erst das Handle, dann CopyBuffer ... dann hat man alle Werte die man angefragt hat
  2. Neue Kerze: siehe unten.
  3. Schau, was es an Alma-Versionen gibt ...
  4. Schau Dir MTF-Indikatoren an (s.u.)

Wieso machst Du Dir alles so schwer?

Klick entweder hier auf CopyBuffer oder stell den Kursor im Editor auf CopyBuffer und drück F1 und schau Dir das Beispiel an, wie dort in OnCalculate() die Werte des EMA abgerufen werden.

Ist der Indikator "ALMA_v2" 're-painting', dann würde ich ihn nicht verwenden, wenn nicht genügt es, den aktuellen Balken zu aktualisieren (Preise, EMA, Alma, ..) und bei einer neuen Bar die letzten beiden Balken, so wie es das Beispiel vormacht.

Wegen multi-timeframe google einfach mal nach "site:mql5.com multi timeframe indicator", da gibt es gleich zB, dies hier: https://www.mql5.com/de/articles/2837. Übrigens, wenn in der MQ-Url /en/ steht kann man das durch /de/ ersetzen, um die in deutsch übersetzte Version zu bekommen).

Bedenke, es gibt fast nichts, was nicht schon für MQ programmiert wurde, suchen und kopieren ist da meist schneller.

Googln nach "site:mql5.com multi timeframe Alma" bringt zB:

https://www.mql5.com/de/code/mt5/indicators/best

https://www.mql5.com/en/search#!keyword=alma&module=mql5_module_codebase

Man muss ja nicht gleich alles kopieren, schauen, wie es andere machen und dann die Teile kopieren, die man braucht.

MTF indicators as the technical analysis tool
MTF indicators as the technical analysis tool
  • www.mql5.com
Most of traders agree that the current market state analysis starts with the evaluation of higher chart timeframes. The analysis is performed downwards to lower timeframes until the one, at which deals are performed. This analysis method seems to be a mandatory part of professional approach for successful trading. In this article, we will discuss multi-timeframe indicators and their creation ways, as well as we will provide MQL5 code examples. In addition to the general evaluation of advantages and disadvantages, we will propose a new indicator approach using the MTF mode.
 
Ja, Danke für deinen Input.
Nun, ich bin eben bei meiner Suche nach genau dem was ich möchte nicht fündig geworden. Sonst kopier ich eh immer schnell alles.

Ich habe einen Fehler bereits selbst gefunden. 
Es lag einfach an einem fehlerhaften CopyBuffer. Wie gesagt, ein Knopf im Hirn. Akribisches Backtesten wie von Dir vorgeschlagen hat geholfen. ;-)

Jetzt hänge ich im letzten Schritt wieder am Color_Index... da funktioniert noch was nicht so wie es soll.. aber ich komme alleine weiter.
VIELEN DANK.

Wenn es fertig ist, stelle ich Euch den Code dann hier als Attachment rein. Vielleicht profitieren ja noch andere von meinen Erkenntnissen hier.
 
Dies ist ein guter Artikel über Mehrfarben-Puffer/Indikatoren: https://www.mql5.com/de/articles/13824
Farbpuffer in Multi-Symbol-Multi-Perioden-Indikatoren
Farbpuffer in Multi-Symbol-Multi-Perioden-Indikatoren
  • www.mql5.com
In diesem Artikel werden wir die Struktur des Indikatorpuffers bei Multi-Symbol- und Multi-Perioden-Indikatoren untersuchen und die Darstellung farbiger Puffer dieser Indikatoren auf dem Chart organisieren.
 

FALL GELÖST!
Ich dokumentiere die Erkenntnisse hier, falls jemand auch Probleme hatte kann er hier vielleicht eine Lösung finden.


1.) Das #property Initialisieren war falsch. Ich hatte übersehen, dass für den Multicolor Indikator ein DRAW_COLOR_LINE Parameter gewählt werden muss.
2.) den Typ2 braucht man nicht mit Color Index parametrisieren. Das ist unnötig.
3.) mit label2 geht es dann einfach in der Reihenfolge weiter... die #property parameter zählen von 1...n durch - aber nur für die sichtbaren Linien!


#property indicator_buffers 4
#property indicator_plots   2

//--- plot ALMA
#property indicator_label1  "ALMA"
#property indicator_type1   DRAW_COLOR_LINE
#property indicator_color1  Silver,DeepSkyBlue,OrangeRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2

//--- Color Index
//#property indicator_type2   INDICATOR_COLOR_INDEX
// ob man das hier braucht weiß ich nicht. Es funktioniert jetzt jedenfalls.

//--- plot EMA
#property indicator_label2  "EMA"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrAquamarine
#property indicator_style2  STYLE_DASH
#property indicator_width2  2

//--- plot Calculations
#property indicator_type3   INDICATOR_CALCULATIONS

in der OnInit Function muss klarerweise der Color Index immer direkt auf den Indikator-Puffer folgen.

beim Wählen der Kurzbezeichnung wird auch wieder nach dem Plot durchnummeriert - nicht nach dem Puffer. 

//--- indicator buffers mapping
   SetIndexBuffer(0,ALMABuffer,INDICATOR_DATA);
   SetIndexBuffer(1,trend, INDICATOR_COLOR_INDEX);
   SetIndexBuffer(2,EMABuffer,INDICATOR_DATA);
   SetIndexBuffer(3,price,INDICATOR_CALCULATIONS);

//Specify the number of color indexes, used in the graphic plot
   PlotIndexSetInteger(0,PLOT_COLOR_INDEXES,3);

//---
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,Length+1);
// PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,Length+1);
//---
//   PlotIndexSetInteger(0,PLOT_SHIFT,Shift);
//   PlotIndexSetInteger(3,PLOT_SHIFT,Shift);
//---
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---
//   string short_name = "ALMA_v2["+timeframeToString(TimeFrame)+"]("+priceToString(Price)+","+(string)Length+","+(string)Sigma+","+(string)Offset+")";
   string short_name = "ALMA_v2";
   IndicatorSetString(INDICATOR_SHORTNAME,short_name);
   if(!PlotIndexSetString(0,PLOT_LABEL,"ALMA_v2["+timeframeToString(tf)+"]"))
     {
      Print("Plotlabel Error: " + IntegerToString(GetLastError()));
     }
   if(!PlotIndexSetString(1,PLOT_LABEL,"EMA_["+IntegerToString(inpEMAPer)+"]"))
     {
      Print("Plotlabel Error: " + IntegerToString(GetLastError()));
     }


Weitere Code Tweaks:

   ArraySetAsSeries(EMABuffer,true);
dies läuft nun parallel mit der TIME Series und somit funktioniert auch das SHIFT.

Meine Methodik um die ganzen CopyBuffer Errors zu finden und zu identifizieren. Ich habe aus der Hilfe die ganze Tabelle rauskopiert und mit MS-Excel Funktionen den Code so zusammengeschrieben dass eine Switch Tabelle draus wurde.
Sehr sehr hilfreich. 
Ihr könnt Euch den entsprechenden Code-Teil aus dem beigefügten MQL File gerne rauskopieren.

         if(!ArrayCopy(price,price,Shift,0,WHOLE_ARRAY))
           {
            Print(getCopyBufferErrortxt(GetLastError())+" Line: " + IntegerToString(__LINE__));
           }
//+------------------------------------------------------------------+
//| get CopyBuffer Error text description                            |
//+------------------------------------------------------------------+
string getCopyBufferErrortxt(int reasonCode)
  {
   string text="";
//---
   switch(reasonCode)
     {
      case ERR_SUCCESS:
         text="Die Operation wurde erfolgreich ausgeführt";
         break;
      case ERR_INTERNAL_ERROR:
         text="Unerwarteter interner Fehler ";
         break;
      case ERR_WRONG_INTERNAL_PARAMETER:
         text="Fehlerwert beim internen Aufruf des Client-Terminals";
         break;
// ........  und so weiter und so fort.
//..........
      default:
         text="Another reason";
     }
//---
   return text;
  }
//+------------------------------------------------------------------+

Da der Indikator auf Grund der höheren Timeframe manchmal Probleme hat zu starten, habe ich das hier eingefügt.
      if(ALMABuffer[10] == 0.0)

         return 0;


bzw... onCalculate (also bei jedem Tick) das ganze nochmal wenn der Puffer eindeutig leer ist.
Das hat sich bewährt, jetzt erscheint jedenfalls sofort eine Kurve am Bildschirm, ohne refresh oder Ach und Krach. ;-)

---------------------
Ich habe statt EMA  nun einen TEMA eingesetzt.
man könnte das natürlich wesentlich modularer Aufbauen indem man mehrere Switch-Cases auf den handle setzt. Aber für den Anfang reicht es mal so.

Dateien:
XAUUSDM15.png  65 kb
ALMA-EMA.mq5  107 kb
 
Gratuliere, tolle Leistung, gutes Ergebnis, viel Erfolg!
 
Carl Schreiber #:
Gratuliere, tolle Leistung, gutes Ergebnis, viel Erfolg!

Danke, eben noch einen Fehler entdeckt,
in dieser Datei korrigiert.

Dateien:
ALMA-EMA.mq5  107 kb
 
Überleg Dir, ob Du das in der Codebase veröffentlichen willst? Hier im Forum wäre es gut versteckt.
Grund der Beschwerde: