Ссылка на кеш гугла
индюк "Зоны безопасности"
Код: Выделить всё
function Initialize()
{
IndicatorName = "SA"; // Задайте название индикатора и сохраните с данным именем
AddInput("Input", Inputs.Candle);
// Ввод параметров
AddParameter("Period", 20); // Период
AddParameter("K", 2); // Коэффициент
PriceStudy = true;
AddSeries("Upper", DrawAs.Line, Color.Green); // Задаем вид линии для нисходящих трендов
AddSeries("Lower", DrawAs.Line, Color.Red); // Задаем вид линии для восходящих трендов
AddSeries("dlv", DrawAs.Line, Color.Red, false); // Вспомогательный ряд
AddSeries("uplv", DrawAs.Line, Color.Red, false); // Вспомогательный ряд
}
function Evaluate()
{
if (CurrentIndex < 1)
{
Upper = Input.High[0];
Lower = Input.Low[0];
}
else
{
double sum=0;
int kp=0;
// Для восходящих трендов
for (int i=0;i<Period-1;i++)
{
if (Input.Low[-2-i]>Input.Low[-1-i])
{
sum=sum+(Input.Low[-2-i]-Input.Low[-1-i]); // Сумма значений прорывов вниз
kp=kp+1; // Количество прорывов вниз
}
}
dlv=Input.Low[-1]-(double) K*(sum/kp);
if (dlv[-1]>dlv[0]) // Максимальный уровень стоп-лосса за последние 2 дня
Lower=dlv[-1];
else
Lower=dlv[0];
// Для нисходящих трендов
sum=0;
kp=0;
for (int i=0;i<Period-1;i++)
{
if (Input.High[-2-i]<Input.High[-1-i])
{
sum=sum+(Input.High[-1-i]-Input.High[-2-i]); // Сумма значений прорывов вверх
kp=kp+1; // Количество прорывов вверх
}
}
uplv=Input.High[-1]+(double) K*(sum/kp);
if (uplv[-1]<uplv[0]) // Максимальный уровень стоп-лосса за последние 2 дня
Upper=uplv[-1];
else
Upper=uplv[0];
}
}