|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
SetIndexShift mit neg. Wert geht nicht
Bei positiven Werten ist alles ok, sobald ich aber einen neg. Wert eintrage, wird nichts mehr angzeigt. So sieht der Code aus (CANDSHIFT ist Benutzereingabe):
in OnInit: Code:
SetIndexBuffer(0,candleHigh ,INDICATOR_DATA); SetIndexBuffer(1,candleLow ,INDICATOR_DATA); SetIndexBuffer(2,candleOpen ,INDICATOR_DATA); for(int i=0; i<3; i++) { SetIndexShift(i,CANDSHIFT); } Code:
if(_Period<=PERIOD_D1) { double Half=CalcHalf(); // ================================= Painting of Bar double OpenVal = iOpen(NULL,PERIOD_D1,0); candleOpen [0] = OpenVal; candleHigh [0] = OpenVal + Half; candleLow [0] = OpenVal - Half; SetIndexLabel(0,"xHalf "+DoubleToStr(Half,_Digits)); SetIndexLabel(1,"xHalf "+DoubleToStr(Half,_Digits)); } Woran liegt es, daß ich hier keinen negativen Wert für CANDSHIFT verwenden kann? AVT |
|
|||
Ohne wirklich Ahnung zu haben:
Vermutlich weil die Loop des Geräts so oder so mit Bar 0 anfängt. Und SetIndexDraw() oder wies heißt wohl auch bei 0 anfängt. https://docs.mql4.com/customind/setindexdrawbegin Wie man das ändern kann, weiß ich nicht. Man kann ja MAs mit MA-Chartshift auf Bars legen, die negativ sind. Schau Dir vielleicht mal die Codes von MA-Indis an. |
|
|||
Da ist gar kein Loop in OnCalculate. AVT
|
|
|||
Bei meinen Indikatoren kann ich da einen ngativen Wert eingeben und damit die Werte nach links schieben.
Bei mir würde da aber auch kein SetIndexBuffer(0,candleHigh ,INDICATOR_DATA); stehen, sondern SetIndexBuffer(0,candleHigh); Ob das eine Rolle spielt, probier es aus. Ich finde auch zu INDICATOR_DATA in der Referenz keine Erklärung, ebenso wenig zu ENUM_INDEXBUFFER_TYPE. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Zitat:
Da muß ich noch mal überlegen, ob ich das irgendwie ändern kann, oder ob das grundsätzlich nur rechts-Shift funktioniert. AVT |
|
|||
Lad vielleicht mal den ganzen Code hoch.
|
|
|||
Wozu das denn? Da ist wirklich kein Loop drin.
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
So, den Zaun habe ich auch abgerissen. Danke noch mal @traderdoc. Hatte nebenbei gesagt, noch nie Probleme mit INDICATOR_DATA und _CALCULATIONS Spezifikation dahinter (nutze ich eigentlich nur, wenn Hilfsbuffer drin sind, um ne Unterscheidung zu machen, aber gut, fliegt im MT4 raus). AVT |
|
|||
Lösung
Nach dem Hinweis von traderdoc sieht die Lösung in OnInit nun so aus:
Code:
SetIndexBuffer(0,candleHigh); SetIndexBuffer(1,candleLow); SetIndexBuffer(2,candleOpen); if(CANDSHIFT>=0) { for (int i=0; i<3; i++) { SetIndexDrawBegin(i,Bars-1); SetIndexShift(i,CANDSHIFT); } } else { for (int i=0; i<3; i++) { SetIndexDrawBegin(i,Bars-1+CANDSHIFT); SetIndexShift(i,CANDSHIFT); } } AVT |
Lesezeichen |
|
|