Параметр «Delta» индикатора определяет величину движения цены (в процентах) в противоположную сторону для формирования экстремума.
Пример:
Исходный текст:
Код: Выделить всё
function Initialize()
{
IndicatorName = "ZZ";
PriceStudy = true;
AddInput("Input", Inputs.Candle);
AddSeries("ZZWL", DrawAs.Line, Color.Blue);
AddSeries("Marker", DrawAs.Custom, Color.Red);
AddParameter("Delta", 0.2);
AddGlobalVariable("peakbar", Types.Int, 0);
AddGlobalVariable("troughbar", Types.Int, 0);
AddGlobalVariable("Direction", Types.Int, 0);
AddGlobalVariable("hi", Types.Double, 0);
AddGlobalVariable("lo", Types.Double, 0);
AddGlobalVariable("hibar", Types.Int, 0);
AddGlobalVariable("lobar", Types.Int, 0);
}
function Evaluate()
{
// AlfaDirect 2015. OX
// ZZ (ZigZag)
// Новый минимум, если Close бара вырос от текущего Low на %
// Новый максимум, если Close бара снизился от текущего High на %
if (CurrentIndex < 2)
{
lo = Input.Low[0]; //First min candle for Low
hi = Input.High[0]; //First max candle for High
}
else
{
double delta = 0.01*Delta;
//Detected Local max and Local min
if(Input.High[0] > hi)
{
hi = Input.High[0];
hibar = CurrentIndex;
}
if(Input.Low[0] < lo)
{
lo = Input.Low[0];
lobar = CurrentIndex;
}
if(Direction >= 0)
{
if(Input.Close[0] > (1 + delta)*lo)
{
Direction = -1;
hi = Input.High[0];
hibar = CurrentIndex;
troughbar = lobar;
ZZWL[lobar-CurrentIndex] = lo;
Marker[lobar-CurrentIndex] = lo;
}
}
if(Direction <= 0)
{
if(Input.Close[0] < (1 - delta)*hi)
{
Direction = 1;
lo = Input.Low[0];
lobar = CurrentIndex;
peakbar = hibar;
ZZWL[hibar-CurrentIndex] = hi;
Marker[hibar-CurrentIndex] = hi;
}
}
Marker.DrawCircle();
// Последнее плечо (не зафиксированно)
if (CurrentIndex == MaxIndex)
{
if (troughbar > peakbar)
ZZWL[hibar-CurrentIndex] = hi;
if (troughbar < peakbar)
ZZWL[lobar-CurrentIndex] = lo;
}
}
}