Блог им. 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.
Потом додумал как дальше улучшить результативность и всё же в плюсы систематически выйти.