Торговые стратегии и индикаторы на Pine Script

- -
- 100%
- +
Поняв принцип его расчета, тщательно настроив его параметры и стратегически интегрировав его с другими инструментами технического анализа, вы сможете использовать Williams %R для более глубокого понимания динамики рынка и улучшения своих торговых решений.
20. Ultimate Oscillator (UO – предельный осциллятор)
Ultimate Oscillator (UO), разработанный Ларри Уильямсом в 1976 году, представляет собой осциллятор импульса, предназначенный для измерения давления покупателей и продавцов на трёх разных таймфреймах (обычно 7, 14 и 28 периодов).
Его уникальная конструкция призвана устранить недостатки других осцилляторов, предотвращая преждевременные сигналы дивергенции и уменьшая «пила», которые часто возникают при использовании одного периода. UO колеблется в диапазоне от 0 до 100, подавая сигналы о перекупленности/перепроданности и, что особенно важно, о сильной дивергенции.
В Pine Script Ultimate Oscillator – это ценный инструмент для трейдеров, которым нужен более надёжный индикатор импульса, отфильтровывающий шум и предоставляющий более надёжные сигналы о потенциальном развороте тренда.
Компоненты и расчет
Расчёт Ultimate Oscillator сложнее, чем расчёт других осцилляторов. Он включает в себя три средневзвешенных значения «давления покупателей» и «истинного диапазона» на коротких, средних и длинных таймфреймах.
Давление покупателей (ДП): `Закрытие – минимум (минимум, закрытие[1])`
Истинный диапазон (TR): `Максимум (High, Close[1]) – Минимум (Low, Close[1])`
Raw Ultimate Oscillator: для каждой из трёх длин (например, 7, 14, 28):Рассчитайте `среднее давление покупателей (СДП) = сумма (BP, длина) / сумма (TR, длина)`
Обычно используются значения 7, 14 и 28. Веса (4, 2, 1) отдают приоритет более коротким периодам, но при этом учитывают информацию о более длинных периодах.Средневзвешенное значение: итоговое значение UO представляет собой средневзвешенную сумму этих трёх средних значений: `UO = ((4 * ABP(длина1)) + (2 * ABP(длина2)) + ABP(длина3)) / (4 + 2 + 1) * 100`
Такой подход с использованием нескольких таймфреймов обеспечивает более сбалансированное представление о динамике рынка.
Базовая реализация Ultimate Oscillator в Pine Script
Pine Script v5 предоставляет удобную встроенную функцию `ta.uo()` для простой реализации.
//@version=5 indicator("My Ultimate Oscillator", overlay=false)
// overlay=false to plot in a separate pane // Inputs for Ultimate Oscillator lengths length1 = input.int(7, title="Length 1 (Short)", minval=1) length2 = input.int(14, title="Length 2 (Medium)", minval=1) length3 = input.int(28, title="Length 3 (Long)", minval=1) // Calculate Ultimate Oscillator using the built-in function uoValue = ta.uo(length1, length2, length3) // Plot the Ultimate Oscillator line plot(uoValue, title="Ultimate Oscillator", color=color.blue, linewidth=2) // Plot horizontal lines for overbought and oversold levels h_overbought = hline(70, "Overbought (70)", color=color.red, linestyle=hline.style_dashed) h_oversold = hline(30, "Oversold (30)", color=color.green, linestyle=hline.style_dashed) hline(50, "Centerline", color=color.gray, linestyle=hline.style_dotted) // Fill background between UO and levels for visual clarity fill(h_overbought, h_oversold, color=color.new(color.gray, 90))
Стандартные уровни: стандартный уровень перекупленности – 70, а уровень перепроданности – 30.
Практический Ultimate Oscillator торговые стратегии1. Условия перекупленности и перепроданности
Как и другие осцилляторы, UO определяет области перекупленности и перепроданности. Однако сигналы UO часто считаются более надёжными из-за расчёта на нескольких таймфреймах.
Сигнал на покупку: UO опускается ниже 30 (перепроданность), а затем разворачивается вверх. Более сильный сигнал возникает, когда UO поднимается выше 30.
Сигнал к продаже: UO поднимается выше 70 (перекупленность), а затем разворачивается вниз. Более сильный сигнал возникает, когда UO опускается ниже 70.
//@version=5 strategy("Ultimate Oscillator Overbought/Oversold Strategy", overlay=true) // Inputs for Ultimate Oscillator length1 = input.int(7, title="Length 1", minval=1) length2 = input.int(14, title="Length 2", minval=1) length3 = input.int(28, title="Length 3", minval=1) overboughtLevel = input.int(70, title="Overbought Level") oversoldLevel = input.int(30, title="Oversold Level") // Calculate Ultimate Oscillator uoValue = ta.uo(length1, length2, length3) // Define conditions for entries and exits // Buy when UO moves below oversold and then crosses back above it longCondition = ta.crossunder(uoValue, oversoldLevel)
// UO goes oversold longExitCondition = ta.crossover(uoValue, oversoldLevel)
// UO exits oversold (potential buy) // Sell when UO moves above overbought and then crosses back below it shortCondition = ta.crossover(uoValue, overboughtLevel)
// UO goes overbought shortExitCondition = ta.crossunder(uoValue, overboughtLevel)
// UO exits overbought (potential sell) // Strategy entries/exits (entry upon exiting extreme zones) if (longExitCondition) strategy.entry("Long", strategy.long) if (shortExitCondition) strategy.entry("Short", strategy.short) // Optional: Plot UO in a separate pane for visualization // plot(uoValue, "UO", color.blue) // hline(overboughtLevel, "Overbought", color.red) // hline(oversoldLevel, "Oversold", color.green)
2. Дивергенция Ultimate Oscillator (ключевая стратегия)
Дивергенция считается наиболее надёжным сигналом, генерируемым Ultimate Oscillator, особенно специфический паттерн «тройная дивергенция», выявленный Ларри Уильямсом. UO разработан таким образом, чтобы уменьшить количество ложных сигналов дивергенции, которые наблюдаются в более простых осцилляторах.
Бычья дивергенция: цена формирует более низкий минимум, а UO – более высокий. Это указывает на ослабление медвежьего импульса. Сильный сигнал бычьей дивергенции часто проявляется в том, что UO формирует более высокий минимум, в то время как цена формирует более низкий минимум, а затем UO поднимается выше зоны перекупленности (обычно 50, а не 70).
Медвежья дивергенция: цена достигает более высокого максимума, а UO – более низкого. Это указывает на ослабление бычьего импульса. Сильный сигнал медвежьей дивергенции часто проявляется в том, что UO достигает более низкого максимума, а цена – более высокого, после чего UO опускается ниже зоны перепроданности (обычно 50, а не 30).
//@version=5 indicator("Ultimate Oscillator Divergence Scanner", overlay=true) // Inputs for Ultimate Oscillator length1 = input.int(7, title="Length 1", minval=1) length2 = input.int(14, title="Length 2", minval=1) length3 = input.int(28, title="Length 3", minval=1) overboughtLevel = input.int(70, title="Overbought Level") oversoldLevel = input.int(30, title="Oversold Level") centerLine = input.int(50, title="Centerline") // Calculate Ultimate Oscillator uoValue = ta.uo(length1, length2, length3) // Plot UO in a separate pane plot(uoValue, "Ultimate Oscillator", color=color.blue) hline(overboughtLevel, "Overbought (70)", color=color.red) hline(oversoldLevel, "Oversold (30)", color=color.green) hline(centerLine, "Centerline (50)", color=color.gray) // Simple divergence detection (conceptual, robust detection requires advanced pivot logic) // This is a simplified example focusing on price vs UO divergence, not specific Williams' patterns. // Bullish Divergence (Price lower low, UO higher low) bullishDivergence = close[2] > close[1] and close[1] > close and uoValue[2] < uoValue[1] and uoValue[1] < uoValue // Bearish Divergence (Price higher high, UO lower high) bearishDivergence = close[2] < close[1] and close[1] < close and uoValue[2] > uoValue[1] and uoValue[1] > uoValue plotshape(bullishDivergence, title="Bullish Divergence", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small) plotshape(bearishDivergence, title="Bearish Divergence", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small) alertcondition(bullishDivergence, "Bullish UO Divergence", "Potential bullish reversal based on Ultimate Oscillator divergence.") alertcondition(bearishDivergence, "Bearish UO Divergence", "Potential bearish reversal based on Ultimate Oscillator divergence.")
3. Неудачи
Пробойные колебания (также называемые «отклонением колебаний») – ещё один ключевой сигнал на Ultimate Oscillator. Они указывают на то, что импульс не был реализован, и часто подтверждают разворот, о котором ранее сигнализировала дивергенция.
Бычий разворот с откатом: UO уходит в зону перепроданности (ниже 30), затем восстанавливается, но остаётся выше предыдущего минимума перепроданности, а затем пробивает предыдущий максимум UO. Это подтверждает бычий импульс.
Медвежий разворот: UO становится перекупленным (выше 70), откатывается, затем растёт, но остаётся ниже предыдущего максимума перекупленности, а затем пробивает предыдущий минимум UO. Это подтверждает медвежий импульс.
Реализация откатов в Pine Script сложнее, поскольку требует точного определения пиков и впадин внутри самого осциллятора, часто в сочетании с ценовым действием. Приведённые выше упрощённые примеры стратегий основаны на прямых сигналах.
Оптимизация производительности Ultimate OscillatorЧтобы максимально эффективно использовать Ultimate Oscillator в Pine Script:
Настройка параметров: длины по умолчанию (7, 14, 28) широко используются и часто дают хороший результат. Однако для очень быстро или медленно движущихся объектов можно поэкспериментировать с немного другими значениями, чтобы три длины сохраняли соотношение 1:2:4 (или аналогичный относительный интервал).
Сосредоточьтесь на дивергенции: UO специально разработан для получения надежных сигналов дивергенции. Отдавайте им предпочтение перед простыми сигналами перекупленности/перепроданности, особенно при поиске крупных разворотов.
В сочетании с фильтрами тренда: несмотря на то, что UO использует несколько таймфреймов для снижения шума, он всё равно является осциллятором. Использование долгосрочного фильтра тренда (например, долгосрочной скользящей средней или облака Ишимоку) может помочь избежать ложных сигналов, противоречащих основному тренду.
Слияние с Price Action: Всегда ищите подтверждение в Price Action. Например, бычий сигнал дивергенции от UO будет сильнее, если он сопровождается бычьей моделью поглощения или прорывом локального сопротивления на ценовом графике.
Настройка уровней для сильных трендов: при очень сильных трендах UO может оставаться на экстремальных уровнях в течение длительного времени. Рассмотрите возможность использования уровней 40/60 в качестве «диапазона тренда» вместо 30/70 для входа/выхода в рамках сильного тренда.
Уникальная конструкция: помните, что преимущество UO заключается в расчете на нескольких таймфреймах, который по своей сути сглаживает шумы без существенного запаздывания, что делает его дивергентные сигналы особенно ценными.
Распространённые ошибки в Ultimate OscillatorСложность расчёта: хотя Pine Script упрощает этот процесс, для более тонкой настройки важно понимать, что такое базовое значение, TR и средневзвешенное значение.
"Пила" в условиях экстремальной консолидации: даже при таком дизайне на очень флэтовых или крайне волатильных рынках без тренда могут возникать нестабильные сигналы UO.
Чрезмерная зависимость от сигналов перекупленности/перепроданности: слепая торговля по простым сигналам перекупленности/перепроданности без дивергенции или других подтверждений может привести к убыткам, особенно при сильных трендах.
Дивергенция может возникнуть раньше срока: несмотря на то, что UO стремится смягчить этот эффект, дивергенция всё равно может возникнуть до того, как разворот проявится в полной мере, что требует терпения и дополнительных подтверждений.
Не является самостоятельным индикатором: Ultimate Oscillator всегда следует использовать в рамках более широкой торговой стратегии, дополняя его другими инструментами технического анализа.
Заключение
Ultimate Oscillator – это сложный и высокоэффективный индикатор импульса в Pine Script для TradingView. Его инновационная конструкция, включающая несколько таймфреймов и взвешенные средние значения, позволяет ему генерировать более надёжные сигналы о перекупленности/перепроданности и, что особенно важно, устойчивые паттерны дивергенции, в отличие от многих однопериодных осцилляторов.
Поняв принцип его уникального расчёта, тщательно настроив его параметры и стратегически интегрировав его в свой комплексный торговый подход, вы сможете использовать Ultimate Oscillator для более глубокого анализа рыночного импульса и улучшения своих торговых решений.
21. Chande Momentum Oscillator (CMO – Осциллятор импульса Чанде)
Осциллятор импульса Чанде (CMO), разработанный Тушаром Чанде, представляет собой технический индикатор импульса, который измеряет разницу между суммой недавних прибылей и суммой недавних убытков, делённую на сумму всех изменений цены за определённый период.
В отличие от других осцилляторов, таких как RSI или стохастик, которые ограничивают свой диапазон, CMO находится в диапазоне от -100 до +100. Такой широкий диапазон позволяет ему напрямую количественно оценивать чистый импульс без искажений, связанных с фиксированным масштабированием, и даёт более чёткое представление о силе тренда и потенциальных точках разворота.
В Pine Script CMO – это ценный инструмент для трейдеров, которые хотят определить основное направление и убедительность ценовых движений, а также классические сигналы перекупленности/перепроданности и дивергенции.
Компоненты и расчет
Для расчёта CMO необходимо отслеживать положительные и отрицательные изменения цен:
Рассчитайте импульс движения вверх и вниз:`SM_Up = сумма (текущее закрытие – предыдущее закрытие)` для положительных изменений за периоды `length`. (Если `текущее закрытие < предыдущее закрытие`, изменение для `SM_Up` равно 0). `SM_Down = Сумма (Предыдущее закрытие – текущее закрытие)` для положительных изменений за периоды `длины`. (Если `Текущее закрытие > Предыдущее закрытие`, изменение равно 0 для `SM_Down`).
Результат умножается на 100, чтобы получить значение в диапазоне от -100 до +100.Формула CMO: `CMO = ((SM_Up – SM_Down) / (SM_Up + SM_Down)) * 100`
Значение CMO, близкое к +100, указывает на сильный восходящий импульс, а значение, близкое к -100, – на сильный нисходящий импульс. Значения, близкие к 0, указывают на низкий импульс или отсутствие тренда.
Базовая реализация осциллятора импульса Чанде в Pine Script
Pine Script v5 предоставляет удобную встроенную функцию `ta.cmo()` для простой реализации.
//@version=5 indicator("My Chande Momentum Oscillator", overlay=false)
// overlay=false to plot in a separate pane // Input for CMO length length = input.int(9, title="CMO Length", minval=1) // Calculate CMO value using the built-in function cmoValue = ta.cmo(close, length) // Plot the CMO line plot(cmoValue, title="CMO", color=color.new(color.blue, 0), linewidth=2) // Plot horizontal lines for overbought and oversold levels h_overbought = hline(50, "Overbought (+50)", color=color.new(color.red, 0), linestyle=hline.style_dashed) h_oversold = hline(-50, "Oversold (-50)", color=color.new(color.green, 0), linestyle=hline.style_dashed) hline(0, "Zero Line", color.gray, linestyle=hline.style_dotted) // Fill background between CMO and levels for visual clarity fill(h_overbought, h_oversold, color=color.new(color.gray, 90))
Стандартные уровни: типичные уровни перекупленности – +50, а уровни перепроданности – -50, хотя их можно корректировать.
Практический осциллятор импульса Чанде Торговые стратегии1. Условия перекупленности и перепроданности
Когда CMO значительно поднимается выше +50, актив считается перекупленным, что указывает на сильный бычий импульс, который может быть близок к исчерпанию. И наоборот, значительное падение ниже -50 указывает на перепроданность, что говорит о сильном медвежьем импульсе, который может быть близок к исчерпанию.
Сигнал к покупке: CMO опускается ниже -50 (перепроданность), а затем снова поднимается выше -50.
Сигнал к продаже: CMO поднимается выше +50 (перекупленность), а затем опускается ниже +50.
//@version=5 strategy("CMO Overbought/Oversold Strategy", overlay=true) // Inputs for CMO length = input.int(9, title="CMO Length", minval=1) overboughtLevel = input.int(50, title="Overbought Level") oversoldLevel = input.int(-50, title="Oversold Level") // Calculate CMO cmoValue = ta.cmo(close, length) // Define conditions for entries and exits // Buy when CMO moves below oversold and then crosses back above it longCondition = ta.crossunder(cmoValue, oversoldLevel)
// CMO goes oversold longExitCondition = ta.crossover(cmoValue, oversoldLevel)
// CMO exits oversold (potential buy) // Sell when CMO moves above overbought and then crosses back below it shortCondition = ta.crossover(cmoValue, overboughtLevel)
// CMO goes overbought shortExitCondition = ta.crossunder(cmoValue, overboughtLevel)
// CMO exits overbought (potential sell) // Strategy entries/exits (entry upon exiting extreme zones) if (longExitCondition) strategy.entry("Long", strategy.long) if (shortExitCondition) strategy.entry("Short", strategy.short) // Optional: Plot CMO in a separate pane for visualization // plot(cmoValue, "CMO", color.blue) // hline(overboughtLevel, "Overbought", color.red) // hline(oversoldLevel, "Oversold", color.green) // hline(0, "Zero Line", color.gray)
2. Пересечение нулевой линии CMO (направление тренда)
Нулевая линия в CMO служит важным индикатором импульсного смещения. Её пересечение указывает на смену краткосрочного тренда.
Бычий импульс: CMO пересекает нулевую линию. Это указывает на то, что бычий импульс преобладает над медвежьим.
Медвежий импульс: CMO пересекает нулевую линию снизу вверх. Это указывает на то, что медвежий импульс преобладает над бычьим.
//@version=5 strategy("CMO Zero Line Crossover Strategy", overlay=true) // Inputs for CMO length = input.int(9, title="CMO Length", minval=1) zeroLine = 0 // Calculate CMO cmoValue = ta.cmo(close, length) // Define conditions for entries longSignal = ta.crossover(cmoValue, zeroLine) shortSignal = ta.crossunder(cmoValue, zeroLine) // Strategy entries/exits if (longSignal) strategy.entry("Long", strategy.long) if (shortSignal) strategy.entry("Short", strategy.short) // Optional: Plot CMO in a separate pane // plot(cmoValue, "CMO", color.blue) // hline(zeroLine, "Zero Line", color.gray)
3. Стратегия дивергенции CMO
Расхождение между ценой и CMO может сигнализировать о потенциальном развороте тренда. Это происходит, когда цена достигает нового максимума/минимума, но CMO не подтверждает его, что указывает на ослабление импульса.
Бычья дивергенция: цена формирует более низкий минимум, но CMO формирует более высокий минимум. Это указывает на ослабление медвежьего импульса и потенциальный разворот вверх.
Медвежья дивергенция: цена достигает более высокого максимума, но CMO достигает более низкого максимума. Это указывает на ослабление бычьего импульса и потенциальный разворот вниз.
//@version=5 indicator("CMO Divergence Scanner", overlay=true) // Inputs for CMO length = input.int(9, title="CMO Length", minval=1) overboughtLevel = input.int(50, title="Overbought Level") oversoldLevel = input.int(-50, title="Oversold Level") centerLine = input.int(0, title="Zero Line") // Calculate CMO cmoValue = ta.cmo(close, length) // Plot CMO in a separate pane plot(cmoValue, "CMO", color.blue) hline(overboughtLevel, "Overbought (+50)", color.red) hline(oversoldLevel, "Oversold (-50)", color.green) hline(centerLine, "Zero Line", color.gray) // Simple divergence detection (conceptual, robust detection requires advanced pivot logic) // This is a simplified example focusing on price vs CMO divergence. // Bullish Divergence (Price lower low, CMO higher low) bullishDivergence = close[2] > close[1] and close[1] > close and cmoValue[2] < cmoValue[1] and cmoValue[1] < cmoValue // Bearish Divergence (Price higher high, CMO lower high) bearishDivergence = close[2] < close[1] and close[1] < close and cmoValue[2] > cmoValue[1] and cmoValue[1] > cmoValue plotshape(bullishDivergence, title="Bullish Divergence", location=location.belowbar, color=color.new(color.green, 0), style=shape.triangleup, size=size.small) plotshape(bearishDivergence, title="Bearish Divergence", location=location.abovebar, color=color.new(color.red, 0), style=shape.triangledown, size=size.small) alertcondition(bullishDivergence, "Bullish CMO Divergence", "Potential bullish reversal based on CMO divergence.") alertcondition(bearishDivergence, "Bearish CMO Divergence", "Potential bearish reversal based on CMO divergence.")
Оптимизация производительности CMO
Чтобы максимально эффективно использовать осциллятор Chande Momentum в Pine Script:
Настройка параметров: параметр `length` (по умолчанию 9 или 20) существенно влияет на чувствительность CMO. Меньшие значения делают его более отзывчивым, но потенциально более «шумным», в то время как большие значения обеспечивают более плавные сигналы, но с большей задержкой. Поэкспериментируйте, чтобы найти оптимальные настройки для вашего актива и таймфрейма.
Настройка экстремальных уровней: для высоковолатильных активов или активов с сильными трендами можно настроить уровни перекупленности/перепроданности (например, +60/-60 или +70/-70), чтобы отфильтровывать только более значительные экстремумы импульса.
В сочетании с фильтрами тренда: хотя CMO может указывать на силу тренда, он всё же является осциллятором. Использование долгосрочного фильтра тренда (например, долгосрочной скользящей средней или облака Ишимоку) может помочь избежать ложных сигналов против основного тренда, особенно когда CMO находится вблизи нулевой линии.
Анализ на нескольких таймфреймах: для большей надёжности подтверждайте сигналы CMO на более высоком таймфрейме, прежде чем действовать в соответствии с сигналами на более низком таймфрейме.
Слияние с Price Action: всегда ищите сигналы CMO, которые подтверждаются поведением цены, например свечными паттернами, пробоями уровней поддержки/сопротивления или графическими паттернами.
Относительно изменений цен: CMO измеряет относительную силу положительных и отрицательных изменений цен. Высокий показатель CMO (около +100 или -100) указывает на высокую уверенность в текущем направлении.
Распространенные подводные Камни CMOЛожные сигналы на рынках с боковым трендом Как и большинство осцилляторов, CMO может генерировать множество ложных сигналов о перекупленности/перепроданности, когда рынок консолидируется в боковом тренде.
Задержка: Несмотря на то, что CMO является индикатором импульса, ему всё же присуща некоторая задержка из-за компонентов усреднения.
Дивергенция может появиться раньше срока: дивергенция – мощный сигнал, но она может указать на потенциальный разворот слишком рано, и тренд может продолжаться ещё некоторое время после появления дивергенции.
Не является самостоятельным индикатором: CMO всегда следует использовать как часть более широкой торговой системы в сочетании с другими индикаторами (например, индикаторами объёма, волатильности) и анализом ценового действия для подтверждения.
Заключение
Осциллятор импульса Чанде (Chande Momentum Oscillator, CMO) – это уникальный и высокоэффективный индикатор импульса в Pine Script для TradingView.
Его особый расчет позволяет четко определить направленность и силу тренда, что делает его полезным для выявления состояний перекупленности/перепроданности, переходов через нулевую линию и потенциальных разворотов через дивергенцию.
Поняв принцип его расчета, тщательно настроив его параметры и стратегически интегрировав его в свой комплексный торговый подход, вы сможете использовать CMO для более глубокого анализа динамики рынка и принятия более эффективных торговых решений.