Пользовательские индикаторы > Динамический трейлинг-стоп на графике

Дополнительные индикаторы от пользователей Альфа-Директ 4. Готовые решения от пользователей.
Аватара пользователя
CamilotTrader
Сообщения: 1
Зарегистрирован: Сегодня, 20:50
Контактная информация:

Динамический трейлинг-стоп на графике

Непрочитанное сообщение CamilotTrader » Сегодня, 21:02

Добрый вечер.
Требуется помощь с индикатором для отображения динамического трейлинг-стопа на графике.
Накидал код но есть ошибки, так как пока не очень разобрался с программированием индикаторов, подскажите в чём проблема. Так сказать наставьте на путь истинный.

Код: Выделить всё

/**Индикатор для отабражения динамического трейлинг-стопа на графике**/

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);
   }
   
}


Вернуться в «Пользовательские индикаторы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 13 гостей