Слушай я не могу здесь прямо написать ? Что если н...
创建于:2025年4月26日
创建于:2025年4月26日
Слушай я не могу здесь прямо написать ?
Что если новый хай пивот выше предыдущего и новый лой выше предыдущего то рисовать линию внешнего тренда от лоя до конечного хай пока последний лой не пробьет предыдущий
Ниже — один из способов «зашить» описанное правило в Pine Script v5, чтобы линия внешнего тренда появлялась только тогда, когда формируются последовательные более высокие pivot-high и pivot-low, и исчезала, если очередной low опускается ниже предыдущего.
pinescript// ─────────────────────────────────────────────────────────── // External Trend-Line (v5) — рисует линию от первого лоя // к последнему хай-пивоту, пока лои остаются повышающимися // ─────────────────────────────────────────────────────────── indicator("External Trend Line", overlay = true, max_lines_count = 2) // Настройка «чувствительности» пивотов (3-3 ≈ swing-high/low из 3 баров) left = input.int(3, "Left bars", minval = 1) right = input.int(3, "Right bars", minval = 1) // Находим пивоты ph = ta.pivothigh(high, left, right) // вернёт цену хай-пивота pl = ta.pivotlow (low, left, right) // вернёт цену лой-пивота // Храним актуальные экстремумы и линию var float rootLow = na // самый первый “опорный” low var float lastHigh = na // последний более высокий high var float lastLow = na // последний более высокий low var line extLine = na // сама линия тренда // ── обновляем, когда появляется новый pivot-low if not na(pl) // первый пивот → сразу становится rootLow / lastLow if na(rootLow) rootLow := pl lastLow := pl // если low выше предыдущего → восходящая структура подтверждена else if pl > lastLow lastLow := pl // low пробил предыдущий → структура сломалась, сбрасываем всё else line.delete(extLine) rootLow := na lastLow := na lastHigh := na extLine := na // ── обновляем, когда появляется новый pivot-high if not na(ph) and not na(rootLow) // high выше предыдущего → восходящая структура держится if na(lastHigh) or ph > lastHigh lastHigh := ph // если линия ещё не создана — рисуем её от rootLow к текущему high if na(extLine) extLine := line.new( x1 = ta.valuewhen(pl == rootLow, bar_index, 0), y1 = rootLow, x2 = bar_index, y2 = ph, extend = extend.right, color = color.teal, width = 2) // иначе просто двигаем правый край к новому high else line.set_xy2(extLine, bar_index, ph)
Поиск пивотов
ta.pivothigh/low
ищут swing-экстремумы. Параметры left/right задают, сколько свечей должно быть по обе стороны экстремума, чтобы он считался пивотом. Увеличьте их — получите «грубее» тренд, уменьшите — «детальнее».
Строим «восходящую цепочку»
Обновляем линию
Параметр | Что меняет |
---|---|
left/right | Чувствительность swing-поиска. |
Цвет, ширина, extend | Вызовы line.new /line.set_xy2 . |
Логику «слом тренда» | Сейчас сброс при любой свечке с low < lastLow; можно заменить на «close ниже» или добавить фильтр по ATR и т.п. |
Попробуйте запустить скрипт на любом графике и поиграться с параметрами — сразу станет видно, как линия появляется, растягивается и исчезает при нарушении последовательности.
Если понадобится более сложная логика — например, поддержка нисходящего тренда или отметки на истории, где именно каждая цепочка началась/закончилась, — дайте знать, подскажу, как расширить код. Удачи!
Слушай я не могу здесь прямо написать ?
Что если новый хай пивот выше предыдущего и новый лой выше предыдущего то рисовать линию внешнего тренда от лоя до конечного хай пока последний лой не пробьет предыдущий
Конечно можно — прямо здесь в чате.
Сформулирую идею ещё раз «на пальцах» и дам лаконичный пример на Pine Script v5:
Следим за пивотами
Как только оба условия выполнились первый раз
– запоминаем самый первый pivot-low как «точку A»
– запоминаем текущий (последний) pivot-high как «точку B»
– рисуем линию A → B, продлевая её вправо.
Обновления
pinescriptindicator("External TrendLine (简)", overlay = true) l = input.int(3, "Pivot left/right") ph = ta.pivothigh(high, l, l) pl = ta.pivotlow (low, l, l) var float rootLow = na var float lastLow = na var float lastHigh = na var line extLine = na // ── pivot-low if not na(pl) if na(rootLow) // первый low rootLow := pl lastLow := pl else if pl > lastLow // low выше предыдущего → ок lastLow := pl else // low пробил вниз → сброс line.delete(extLine) rootLow := na lastLow := na lastHigh := na extLine := na // ── pivot-high if not na(ph) and not na(rootLow) if na(lastHigh) or ph > lastHigh // high выше → обновляем lastHigh := ph if na(extLine) // ещё нет линии → создаём extLine := line.new( ta.valuewhen(pl == rootLow, bar_index, 0), rootLow, bar_index, ph, extend = extend.right, color = color.aqua, width = 2) else // линия есть → двигаем правый конец line.set_xy2(extLine, bar_index, ph)
Это ровно то, что я присылал раньше, только без комментариев и лишних настроек.
Скопируйте в TradingView, нажмите «Add to chart» — должно работать.
Если задача была другая (например, хотите тот же алгоритм, но нисходящую линию, или нужно выводить ценники и метки — уточните). Пишите прямо текстом, без формальностей 🙂