Erst das Handle, dann CopyBuffer ... dann hat man alle Werte die man angefragt hat
Neue Kerze: siehe unten.
Schau, was es an Alma-Versionen gibt ...
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:
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.
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_buffers4#property indicator_plots2//--- plot ALMA#property indicator_label1"ALMA"#property indicator_type1DRAW_COLOR_LINE#property indicator_color1 Silver,DeepSkyBlue,OrangeRed
#property indicator_style1STYLE_SOLID#property indicator_width12//--- 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_type2DRAW_LINE#property indicator_color2clrAquamarine#property indicator_style2STYLE_DASH#property indicator_width22//--- plot Calculations#property indicator_type3INDICATOR_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 mappingSetIndexBuffer(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 plotPlotIndexSetInteger(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.
//+------------------------------------------------------------------+//| get CopyBuffer Error text description |//+------------------------------------------------------------------+string getCopyBufferErrortxt(int reasonCode)
{
string text="";
//---switch(reasonCode)
{
caseERR_SUCCESS:
text="Die Operation wurde erfolgreich ausgeführt";
break;
caseERR_INTERNAL_ERROR:
text="Unerwarteter interner Fehler ";
break;
caseERR_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.
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.
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.
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!
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.
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.
Da der Indikator auf Grund der höheren Timeframe manchmal Probleme hat zu starten, habe ich das hier eingefügt.
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.
Gratuliere, tolle Leistung, gutes Ergebnis, viel Erfolg!
Danke, eben noch einen Fehler entdeckt,
in dieser Datei korrigiert.