Входящие параметры
Period1 - кол-во баров слева для поиска экстремума (фрактал)
Period2 - кол-во баров справа для поиска экстремума (фрактал)
Skip - Количество баров отступа от последнего видимого бара для анализа
Примеры
Код: Выделить всё
function Initialize()
{
IndicatorName = "Fibo";
AddInput("Input", Inputs.Candle);
AddParameter("Period1", 30);
AddParameter("Period2", 5);
AddParameter("Skip", 0);
PriceStudy = true;
AddSeries("H", DrawAs.Custom, Color.Red);
AddSeries("L", DrawAs.Custom, Color.Green);
AddSeries("Z0", DrawAs.Custom, Color.Black);
AddSeries("Z1", DrawAs.Custom, Color.Black);
AddSeries("U1", DrawAs.Custom, Color.Red);
AddSeries("U2", DrawAs.Custom, Color.Red);
AddSeries("U3", DrawAs.Custom, Color.Red);
AddSeries("U4", DrawAs.Custom, Color.Red);
AddSeries("D1", DrawAs.Custom, Color.Green);
AddSeries("D2", DrawAs.Custom, Color.Green);
AddSeries("D3", DrawAs.Custom, Color.Green);
AddSeries("D4", DrawAs.Custom, Color.Green);
AddGlobalVariable("HIndex", Types.Int, 0);
AddGlobalVariable("LIndex", Types.Int, 0);
}
function Evaluate()
{
// evge 02.11.2018 http://alfadirect4.ru
if (CurrentIndex > Period1 + Period2 + Skip)
{
var xH = true;
var xL = true;
var HPoint = Input.High[Period2 + Skip];
var LPoint = Input.Low[Period2 + Skip];
for (var i = 0; i < Math.Max(Period1, Period2); i++)
{
if (i < Period1 && Input.High[Period2 + i + 1 + Skip] > HPoint) xH = false;
if (i < Period1 && Input.Low[Period2 + i + 1 + Skip] < LPoint) xL = false;
if (i < Period2 && Input.High[i + Skip] > HPoint) xH = false;
if (i < Period2 && Input.Low[i + Skip] < LPoint) xL = false;
if (!xH && !xL) break;
}
if (xH) { H[Skip + Period2] = HPoint; HIndex = CurrentIndex - Period2 - Skip; }
if (xL) { L[Skip + Period2] = LPoint; LIndex = CurrentIndex - Period2 - Skip; }
H.DrawArrowDown();
L.DrawArrowUp();
}
if (HIndex != 0 && LIndex != 0 && CurrentIndex == MaxIndex)
{
var H1 = Input.High[CurrentIndex - HIndex];
var L1 = Input.Low[CurrentIndex - LIndex];
for (int x = 0; x <= Math.Max(CurrentIndex - HIndex, CurrentIndex - LIndex); x++)
{
if (HIndex < LIndex)
{
Z0[x] = L1;
Z1[x] = H1;
U1[x] = L1 + Math.Abs(H1 - L1) * 0.01 * 23.6;
U2[x] = L1 + Math.Abs(H1 - L1) * 0.01 * 38.2;
U3[x] = L1 + Math.Abs(H1 - L1) * 0.01 * 50;
U4[x] = L1 + Math.Abs(H1 - L1) * 0.01 * 61.8;
}
else
{
Z0[x] = H1;
Z1[x] = L1;
D1[x] = H1 - Math.Abs(H1 - L1) * 0.01 * 23.6;
D2[x] = H1 - Math.Abs(H1 - L1) * 0.01 * 38.2;
D3[x] = H1 - Math.Abs(H1 - L1) * 0.01 * 50;
D4[x] = H1 - Math.Abs(H1 - L1) * 0.01 * 61.8;
}
}
}
Z0.DrawLine(); Z1.DrawLine();
U1.DrawLine(); U2.DrawLine(); U3.DrawLine(); U4.DrawLine();
D1.DrawLine(); D2.DrawLine(); D3.DrawLine(); D4.DrawLine();
}
Скачать индикатор