Code:
#property indicator_minimum 0
#property indicator_maximum 100
... sind nur für Indikatoren in einem Unterfenster, im Chart macht das keinen Sinn (alles Mögliche hat schließlich Werte, die weit über 100 hinaus gehen).
_HighestCandle und _LowestCandle geben Dir die Nummer der Kerze an, die den Höchst- und Tiefstwert haben.
Die Prozent willst Du aber nicht von den Kerzennummern wissen, sondern vom Abstand Höchst zu Tiefst. Also:
Code:
////double _Range = (_HighestCandle - _LowestCandle);
double _Range = (bufferGanzOben[i] - bufferGanzUnten[i]);
double _EinProz = (_Range / 100);
double _Prozent = (_EinProz * Prozent);
//Print(__FUNCTION__,
// " _Range=",DoubleToStr(_Range,_Digits),
// " _EinProz=",DoubleToStr(_EinProz,_Digits),
// " _Prozent=",DoubleToStr(_Prozent,_Digits)
// );
Die Höchst- und Tiefstwerte hast Du schon in Buffern gespeichert, dann kannst Du die Bufferwerte auch zum Weiterrechnen nehmen.
Diese Zeilen sind gleich, also überflüssig:
Code:
int _HighestCandle = iHighest(Symbol(), PERIOD_CURRENT, MODE_HIGH, _CandlesOnChart, 0);
int _HighCandle = iHighest(Symbol(), PERIOD_CURRENT, MODE_HIGH, _CandlesOnChart, 0);
int _LowestCandle = iLowest(Symbol(), PERIOD_CURRENT, MODE_LOW, _CandlesOnChart, 0);
int _LowCandle = iLowest(Symbol(), PERIOD_CURRENT, MODE_LOW, _CandlesOnChart, 0);
Also:
Code:
////int _HighCandle = iHighest(Symbol(), PERIOD_CURRENT, MODE_HIGH, _CandlesOnChart, 0);
////bufferObenMinAbstand[i] = High[_HighCandle] + _Prozent;
////int _LowCandle = iLowest(Symbol(), PERIOD_CURRENT, MODE_LOW, _CandlesOnChart, 0);
////bufferUntenPlAbstand[i] = Low[_LowCandle] - _Prozent;
bufferObenMinAbstand[i] = bufferGanzOben[i] - _Prozent;
bufferUntenPlAbstand[i] = bufferGanzUnten[i] + _Prozent;
Noch etwas, wenn der Indikator entfernt wird, bleibt Dein Text stehen. Aber wer den Raum verläßt, sollte kein Chaos hinterlassen. Also fehlt ein OnDeinit. Dazu mußt Du Deinen Objekten ein eindeutiges
Präfix geben, damit wirklich nur die Hinterlassenschaften dieses Indikators entfernt werden und nicht in einem Rundumschlag alles, was ein Objekt ist. Also:
Code:
double bufferUntenPlAbstand[];
string PFX="MeinIndi_"; //Präfix für all unsere Objekte
//+------------------------------------------------------------------------------- OnInit Funktion ---+
//+------------------------------------------------------------------------------- OnDeinit Funktion ---+
//+-------------------------------------------------------------------------------------------------------+
void OnDeinit(const int reason)
{
// === delete all created objects with our indicator name in it
for(int i=0; i<ObjectsTotal(); i++)
{
string obj_name=ObjectName(i);
if( StringFind(obj_name,PFX,0)==0 ) //Objekt beginnt mit PFX
ObjectDelete(obj_name);
}
}
und dann in OnCalculate alle "Display" durch PFX+"Display" ersetzen.
Und noch was: Du hast eine Benutzereingabe, die wahrscheinlich festlegen soll, über wie viele Kerzen die Höchst- und Tiefstwerte ermittelt werden. In Deiner Berechnung nimmst Du aber nur die im Chart sichtbaren Kerzen. Darüber solltest Du nachdenken.
Bei mir wird alles korrekt in Dax, EurUsd angezeigt.
Das war's erst mal. Hoffe, das hilft Dir weiter.
AVT