Требуется помощь с индикатором для отображения динамического трейлинг-стопа на графике.
Накидал код но есть ошибки, так как пока не очень разобрался с программированием индикаторов, подскажите в чём проблема. Так сказать наставьте на путь истинный.
Код: Выделить всё
/**Индикатор для отабражения динамического трейлинг-стопа на графике**/
function Initialize()
{
// Наименование индикатора
IndicatorName = "DinamicStop";
PriceStudy = true;
// Входные данные
AddInput("Input", Inputs.Candle);
// Основная серия для отображения трейлинг-стопа
AddSeries("trailingStop", DrawAs.Line, Color.Red, LineStyles.Dot, 2);
// Дополнительные параметры для отображения трейлинг-стопа:
AddParameter("Color", Color.Red, "Цвет линии трейлинг-стопа");
AddParameter("Style", LineStyles.Solid, "Стиль линии");
AddParameter("Width", 2, "Толщина линии");
AddParameter("ShowLabel", true, "Отображать ценовую метку"); // Опционально
// Уровни (можно расширять, если нужно)
AddLevel(0, Color.Red, LineStyles.Dot, 2, "trailingStop"); // Уровень для трейлинга
}
function Evaluate()
{
// Получаем текущую цену (Например Close)
double currentPrice = Input.Close[0];
// Получаем значение трейлинг-стопа из стратегии (если доступно)
double trailingStopPrice = GetGlobalVariable("trailingStopPrice");
// Если нет данных или это не последний бар - выходим
if (CurrentIndex != MaxIndex || double.IsNaN(trailingStopPrice))
{
return; // Обновляем только на последнем баре
}
// Защита от некорректных значений
if (double.IsInfinity(trailingStopPrice) || trailingStopPrice <= 0)
{
trailingStopPrice = currentPrice * 0.98; // Задаём дефолтный стоп (например -2%)
}
// Обновляем линию трейлинг-стопа
trailingStop = trailingStopPrice; // Передаём в серию
// обновляем уровень если нужно
Levels[0].Level = trailingStopPrice;
Levels[0].Color = Color;
Levels[0].Style = Style;
// Опционально: добавляем ценовую метку
if (ShowLabel)
{
// Удаляем старую метку, если есть
ChartObjects.Remove("TrailingStopLabel");
// Создаём новую метку
PriceLabel label = new PriceLabel(0, trailingStopPrice, "Трейлинг-стоп", Color, PriceLabelLocation.Low);
label.Name = "TrailingStopLabel";
ChartObjects.Add(label);
}
}