Блог им. empenoso
Понимание силы тренда помогает трейдерам оценить устойчивость движения цены и находить оптимальные точки входа и выхода. Идея индикатора взята из комментария Ийона Тихого (https://smart-lab.ru/mobile/topic/1119895/#comment17905643): он предложил измерять силу тренда через относительное отклонение цены от средней. Формула проста: разница между ценой и средней, деленная на среднюю. Это позволяет оценить тренд независимо от абсолютных значений цены.
В тексте привожу открытый исходный код индикатора для того, чтобы любой человек мог проверить его в своём TradingView.
Индикатор силы тренда показывает, насколько цена отклоняется от своего среднего значения. Он рассчитывается по формуле:
Сила тренда = (Цена – Средняя) / Средняя × 100
Где:
Цена – текущая цена актива (например, цена закрытия свечи).
Средняя – значение скользящей средней (например, 21-периодная экспоненциальная средняя EMA).
Абсолютное отклонение цены от средней меняется в зависимости от уровня цены актива. Например, отклонение в 10 рублей на акции стоимостью 100 рублей и 1000 рублей будет восприниматься по-разному. Деление на среднюю нормализует это значение, позволяя объективно сравнивать силу тренда на разных инструментах и таймфреймах.
Вместо сравнения цены со средней можно использовать разницу между быстрой и медленной скользящей средней. Тогда формула примет вид:
Сила тренда = (Быстрая средняя – Медленная средняя) / Медленная средняя × 100
Этот вариант сглаживает резкие колебания цены и позволяет анализировать тренд без учета краткосрочного шума.
Базовая версия индикатора измеряет силу тренда через разницу между текущей ценой и скользящей средней.
Исходный код Pine Script. RAW версия чтобы скопировать с Гитхаба без ошибок: https://raw.githubusercontent.com/empenoso/tradingview-pine-collection/refs/heads/main/The%20Power%20of%20Trend_v1.js :
<code>// https://smart-lab.ru/mobile/topic/1119895/#comment17905643 // Михаил Шардин, https://shardin.name/?utm_source=tradingview //@version=5 indicator("Сила Тренда", shorttitle="ТрендСила", overlay=false, precision=4) // Входные параметры length = input.int(21, title="Период средней", minval=1) maType = input.string("EMA", title="Тип средней", options=["SMA", "EMA", "WMA", "SMMA", "RMA", "DEMA", "TEMA", "HMA"]) src = input(close, title="Источник цены") showLabels = input(true, title="Показывать метки на графике?") // Расчет скользящей средней maValue = switch maType "SMA" => ta.sma(src, length) "EMA" => ta.ema(src, length) "WMA" => ta.wma(src, length) "RMA" => ta.rma(src, length) "DEMA" => ta.ema(ta.ema(src, length), length) "TEMA" => ta.ema(ta.ema(ta.ema(src, length), length), length) "HMA" => ta.hma(src, length) // Расчет силы тренда trendStrength = (src - maValue) / maValue * 100 // Умножаем на 100 для процентов // Визуализация plot(trendStrength, title="Сила тренда", color=color.new(color.blue, 0), linewidth=2) // Нулевая линия hline(0, "Нулевая линия", color=color.new(color.black, 50), linestyle=hline.style_dotted) // Вывод значений в таблицу var table infoTable = table.new(position.bottom_right, 1, 1) if barstate.islast table.cell(infoTable, 0, 0, "Сила тренда: " + str.tostring(trendStrength, "#.##%"), bgcolor=color.new(trendStrength > 0 ? color.green : color.red, 90), text_color=color.white)</code>
Этот индикатор прост в использовании и позволяет визуально оценивать силу тренда на любом активе. В следующем разделе разберем его усовершенствованную версию, которая учитывает два периода средней.
В ходе обсуждения с автором идеи были предложены улучшения базовой версии индикатора.
Исходный код Pine Script. RAW-версия кода на GitHub для копирования без ошибок: https://raw.githubusercontent.com/empenoso/tradingview-pine-collection/refs/heads/main/The%20Power%20of%20Trend_v2.js :
<code>// https://smart-lab.ru/mobile/topic/1119895/#comment18037622 // Михаил Шардин, https://shardin.name/?utm_source=tradingview //@version=5 indicator("Усовершенствованная Сила Тренда", shorttitle="ТрендСила Pro", overlay=false, precision=4) // Входные параметры fastLength = input.int(9, title="Быстрый период", minval=1) slowLength = input.int(21, title="Медленный период", minval=1) maType = input.string("EMA", title="Тип средней", options=["SMA", "EMA", "WMA", "HMA"]) showHistogram = input(true, title="Показывать гистограмму?") showZeroLine = input(true, title="Показывать нулевую линию?") // Расчет скользящих средних ma(source, length, type) => switch type "SMA" => ta.sma(source, length) "EMA" => ta.ema(source, length) "WMA" => ta.wma(source, length) "HMA" => ta.hma(source, length) fastMA = ma(close, fastLength, maType) slowMA = ma(close, slowLength, maType) // Улучшенный расчет силы тренда (относительное отклонение быстрой MA от медленной) trendStrength = (fastMA - slowMA) / slowMA * 100 // В процентах // Визуализация plot(showHistogram ? trendStrength : na, title="Сила тренда", style=plot.style_columns, color=trendStrength >= 0 ? color.new(color.green, 20) : color.new(color.red, 20)) plot(trendStrength, title="Линия силы", color=color.new(color.blue, 0), linewidth=2) // Нулевая линия hline(0, "Нулевая линия", color=color.new(color.black, 50), linestyle=hline.style_dotted) // Информационная панель var table infoTable = table.new(position.bottom_right, 1, 1) if barstate.islast table.cell(infoTable, 0, 0, "Сила тренда: " + str.tostring(trendStrength, "#.##%") + "\nFast MA: " + str.tostring(fastMA, format.volume) + "\nSlow MA: " + str.tostring(slowMA, format.volume), bgcolor=color.new(color.gray, 90), text_color=color.black)</code>
Этот вариант индикатора лучше определяет моменты усиления тренда, так как учитывает сглаженные данные, а не просто колебания цены относительно одной средней.
Пошаговая инструкция:
Базовый и усовершенствованный варианты индикатора помогают оценить силу тренда.
Интерпретация:
Дальнейшие улучшения:
Автор: Михаил Шардин
🔗 Моя онлайн-визитка
📢 Telegram «Умный Дом Инвестора»
31 марта 2025 г.
* отклонение от среднего имеет некоторое распределение
* когда значение отклонения слишком большое или слишком маленькое — повышается вероятность того, что следующий день будет в сторону приближения к среднему
* в первом приближении распределение можно считать нормальным и отклонения измерять в сигмах
По мне, так это вариант осциллятора. Можно, если поднапрячь зрение, увидеть не силу тренда, а зоны перепроданности и перекупленности.
Впрочем, все простое придумано до нас. И основная часть сложного тоже.
У меня почему то индикатор появился не полностью, только нижняя часть.
Без обьемов. В чем может быть причина?
Или нужно отдельно индикатор Обьема ставить на график.
Аналогичные идеи приводят к несложным выводам:
Как совершенно верно заметил выше amberfoxman, нужно найти такие значения текущего отклонения, при входе на которых затем получите статистический плюс при чем-то обоснованном выходе. Например, аналогичном показателе в противоположную сторону. Обычно это 2-4% отклонения. Причём для каждого инструмента диапазон свой.
Эффект от подхода — около половины отданных при этом сумм комиссий. То есть, если при случайном входе вы статистически проигрываете комиссию, то тут станете проигрывать полкомиссии.
Проверял такое в 2015-2018.
Потом додумал как дальше улучшить результативность и всё же в плюсы систематически выйти.