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

- -
- 100%
- +

В этой книге вы найдете самую полную коллекцию готовых к использованию стратегий написанных на Pine Script.
Независимо от того, изучаете ли вы алгоритмическую торговлю или хотите улучшить существующие свои скрипты и стратегии на платформе TradingView.
Я написал для вас практические примеры кода по четырем направлениям в трейдинге:
1. Стратегии следования за трендом.
2. Системы возврата к среднему значению.
3. Подходы, основанные на объёме.
4. Расширенное распознавание паттернов.
1. Простая скользящая средняя SMA (Simple Moving Average)
Если вы новичок в техническом анализе или в Pine Script от TradingView, то простая скользящая средняя (SMA) станет для вас идеальной отправной точкой. Этот фундаментальный индикатор помогает трейдерам определять тренды, сглаживая ценовые данные за определённый период.
Что такое SMA в Pine Script?Простая скользящая средняя вычисляет среднюю цену за определённое количество баров. В Pine Script можно создать индикаторы SMA всего с помощью нескольких строк кода:
//@version=5 indicator("My SMA Indicator", overlay=true) length = input(14, title="SMA Length") sma = ta.sma(close, length) plot(sma, color=color.blue, linewidth=2)
Совет: функцияta.sma()встроена в Pine Script v5 упрощает реализацию SMA.
Как работает SMA
Формула SMA проста:
SMA = (сумма цен закрытия) / (количество периодов)
Например, 14-дневная SMA суммирует цены закрытия за 14 дней и делит полученную сумму на 14. Это значение отображается на графике в виде линии.
Практические Стратегии SMA
Вот три распространённых способа использования SMA в Pine Script:
1. Определение основного тренда
//@version=5 indicator("SMA Trend", overlay=true) sma50 = ta.sma(close, 50) sma200 = ta.sma(close, 200) plot(sma50, color=color.blue) plot(sma200, color=color.red)
2. Ценовые кроссоверы
//@version=5 strategy("SMA Crossover", overlay=true) fastSMA = ta.sma(close, 9) slowSMA = ta.sma(close, 21) plot(fastSMA, color=color.green) plot(slowSMA, color=color.orange)
Оптимизация Вашего SMA
Используйте input() для настройки длины
Комбинируйте с другими индикаторами, например RSI
Добавляйте оповещения с помощью alertcondition()
Независимо от того, создаёте ли вы свой первый индикатор на Pine Script или совершенствуете свою торговую стратегию, знание SMA необходимо любому разработчику на TradingView.
2. Экспоненциальная скользящая средняя EMA (Exponential Moving Average)
Почему EMA важна в Pine Script
Экспоненциальная скользящая средняя (EMA) – это мощный технический индикатор, который придаёт большее значение последним ценам, что делает его более чувствительным к новой информации, чем простая скользящая средняя (SMA). Поэтому EMA идеально подходит для:
Импульс торговые стратегии
Системы, следующие тенденциям
Раннее обнаружение разворота
Базовая реализация EMA
Вот как создать базовый индикатор EMA в Pine Script v5:
//@version=5 indicator("My EMA Indicator", overlay=true) // User input for EMA length length = input(20, title="EMA Length", minval=1) // Calculate EMA emaValue = ta.ema(close, length) // Plot with customizable color plot(emaValue, color=color.new(color.purple, 0), linewidth=2)
Ключевое отличие: в отличие от SMA, где все цены имеют одинаковый вес, EMA применяет экспоненциально уменьшающиеся веса к более старым ценам, что делает её более чувствительной к недавним изменениям цен.
EMA против SMA: математика в действии
Расчёт EMA состоит из двух этапов:
Коэффициент сглаживания: α = 2/(длина + 1)
Формула EMA: EMA = (Close – предыдущая EMA) × α + предыдущая EMA
Этот рекурсивный расчёт означает, что для поддержания точности EMA требуется меньше исторических данных, чем SMA.
Продвинутые Стратегии EMA
1. Кроссоверная система EMA
//@version=5 strategy("EMA Crossover Strategy", overlay=true) // Inputs fastLength = input(9, "Fast EMA Length") slowLength = input(21, "Slow EMA Length") // Calculate EMAs fastEMA = ta.ema(close, fastLength) slowEMA = ta.ema(close, slowLength) // Plot plot(fastEMA, "Fast EMA", color.green) plot(slowEMA, "Slow EMA", color.red) // Strategy logic longCondition = ta.crossover(fastEMA, slowEMA) shortCondition = ta.crossunder(fastEMA, slowEMA) if (longCondition) strategy.entry("Long", strategy.long) if (shortCondition) strategy.entry("Short", strategy.short)
2. Лента EMA для определения силы тренда
//@version=5 indicator("EMA Ribbon", overlay=true) // Multiple EMAs for trend visualization ema5 = ta.ema(close, 5) ema10 = ta.ema(close, 10) ema20 = ta.ema(close, 20) ema50 = ta.ema(close, 50) // Color based on trend direction ribbonColor = ema5 > ema10 and ema10 > ema20 and ema20 > ema50 ? color.green : ema5 < ema10 and ema10 < ema20 and ema20 < ema50 ? color.red : color.gray // Plot all EMAs with gradient colors plot(ema5, "EMA 5", color.new(color.green, 30), linewidth=2) plot(ema10, "EMA 10", color.new(color.lime, 30), linewidth=2) plot(ema20, "EMA 20", color.new(color.orange, 30), linewidth=2) plot(ema50, "EMA 50", color.new(color.red, 30), linewidth=2) // Background for visual clarity bgcolor(ribbonColor, 90)
Оптимизация производительности EMA
Как извлечь максимум пользы из EMA в Pine Script:
Объединить с объмом: фильтровать сигналы с подтверждением объма
Используйте несколько таймфреймов: подтверждайте тренды на разных таймфреймах
Добавить динамическую настройку: автоматическая настройка периодов EMA в зависимости от волатильности
Пример Динамической длины EMA
//@version=5 indicator("Dynamic EMA", overlay=true) // Base length adjusted by volatility atrLength = input(14, "ATR Length") volatilityFactor = input(1.5, "Volatility Factor") baseLength = input(20, "Base EMA Length") // Calculate dynamic length atrValue = ta.atr(atrLength) // Use a relative change in ATR to adjust length. // Adding a small value to the denominator to prevent division by zero, though ATR is usually positive. // Also, `ta.valuewhen` can return `na` on early bars, so use `nz` for a default. float atrChangeRatio = nz(ta.change(atrValue) / (nz(ta.valuewhen(ta.lowest(atrValue, 50), atrValue, 0)) + 1e-10)) float scaledLengthRaw = baseLength * (1 + atrChangeRatio * volatilityFactor) // Ensure length stays within bounds and is an integer for EMA function dynamicLength = math.max(5, math.min(50, int(scaledLengthRaw))) // Plot dynamic EMA plot(ta.ema(close, dynamicLength), "Dynamic EMA", color.purple)
Распространённые ошибки EMA, которых следует избегать
Предупреждение: экспоненциальные скользящие средние могут давать ложные сигналы на флэтовых рынках. Всегда используйте их в сочетании с другими индикаторами или фильтрами.
Использование EMA без подтверждения
Слишком короткая настройка (чрезмерное ускорение)
Игнорирование общего контекста рынка
Заключение
При правильном использовании EMA является одним из самых универсальных инструментов Pine Script. Поняв его математическую основу и объединив его с другими техническими элементами, вы сможете создать мощные торговые системы, которые будут быстро реагировать на изменения рынка и отсеивать шумы.
3. схождение и расхождение скользящих средних MACD (Moving Average Convergence Divergence)
Схождение и расхождение скользящих средних (MACD) – один из самых популярных и универсальных индикаторов импульса в техническом анализе. Разработанный Джеральдом Аппелем, он показывает соотношение между двумя скользящими средними цены ценной бумаги. Его преимущество заключается в том, что он объединяет в себе характеристики следования за трендом и импульса в одном простом для интерпретации осцилляторе.
В Pine Script можно легко реализовать MACD для определения потенциальных сигналов на покупку/продажу, силы тренда и разворотов.
Компоненты MACD
Индикатор MACD состоит из трёх основных компонентов:
Линия MACD: это разница между двумя экспоненциальными скользящими средними (EMA), обычно 12-периодной EMA и 26-периодной EMA.
Сигнальная линия: 9-периодная EMA самой линии MACD. Она служит триггером для сигналов на покупку/продажу.
Гистограмма MACD: показывает разницу между линией MACD и сигнальной линией. Визуально отображает силу импульса.
Базовая реализация MACD в Pine Script
Pine Script v5 предоставляет встроенную функцию `ta.macd()`, которая значительно упрощает вычисления.
//@version=5 indicator("My MACD Indicator", overlay=false) // Inputs for MACD parameters fastLength = input(12, title="Fast Length") slowLength = input(26, title="Slow Length") signalLength = input(9, title="Signal Length") // Calculate MACD components using the built-in function [macdLine, signalLine, hist] = ta.macd(close, fastLength, slowLength, signalLength) // Plot the MACD Line plot(macdLine, title="MACD Line", color=color.blue, linewidth=2) // Plot the Signal Line plot(signalLine, title="Signal Line", color=color.orange, linewidth=1) // Plot the Histogram // Color the histogram based on its value (positive/negative and increasing/decreasing) histColor = hist >= 0 ? (hist[1] <= hist ? color.new(color.teal, 20) : color.new(color.lime, 20)) : (hist[1] >= hist ? color.new(color.red, 20) : color.new(color.maroon, 20)) plot(hist, title="Histogram", style=plot.style_columns, color=histColor) // Plot a horizontal line at zero for reference hline(0, "Zero Line", color.gray)
Совет: Параметр `overlay=false` в `indicator()` имеет решающее значение для MACD, поскольку это осциллятор, который отображается на отдельной панели под ценовым графиком.
Объяснение принципа расчёта MACD
Хотя функция `ta.macd()` выполняет всю основную работу, понимание базовых вычислений будет полезным:
Быстрая EMA: `emaFast = ta.ema(close, fastLength)`
Медленная EMA: `emaSlow = ta.ema(close, slowLength)`
Линия MACD: `macdLine = emaFast – emaSlow`
Сигнальная линия: `signalLine = ta.ema(macdLine, signalLength)`
Гистограмма MACD: `hist = macdLine – signalLine`
Стандартные параметры: 12, 26 и 9 периодов для быстрой EMA, медленной EMA и сигнальной линии соответственно.
Практический MACD Торговые стратегии1. Стратегия пересечения MACD (сигналы входа/выхода)
Наиболее распространённая стратегия заключается в наблюдении за пересечениями линии MACD и сигнальной линии.
Бычье пересечение: когда линия MACD пересекает сигнальную линию сверху. Это указывает на восходящий импульс и потенциальный сигнал к покупке.
Медвежье пересечение: когда линия MACD пересекает сигнальную линию снизу вверх. Это указывает на нисходящий импульс и потенциальный сигнал к продаже.
//@version=5 strategy("MACD Crossover Strategy", overlay=true) fastLength = input(12, "Fast Length") slowLength = input(26, "Slow Length") signalLength = input(9, "Signal Length") [macdLine, signalLine, hist] = ta.macd(close, fastLength, slowLength, signalLength) // Define conditions for long and short entries longCondition = ta.crossover(macdLine, signalLine) shortCondition = ta.crossunder(macdLine, signalLine) // Execute strategy entries if (longCondition) strategy.entry("Buy", strategy.long) if (shortCondition) strategy.entry("Sell", strategy.short) // Optional: Plot the MACD and Signal lines in a separate pane for visualization // plot(macdLine, "MACD", color.blue) // plot(signalLine, "Signal", color.orange) // plot(hist, "Histogram", style=plot.style.columns, color=hist >= 0 ? color.teal : color.red) // hline(0, "Zero Line", color.gray)
2. Стратегия дивергенции MACD
Дивергенция возникает, когда цена актива движется в направлении, противоположном индикатору MACD. Она часто сигнализирует о потенциальном развороте тренда.
Бычья дивергенция: цена формирует более низкий минимум, но MACD формирует более высокий минимум. Это указывает на ослабление нисходящего импульса и потенциальный разворот вверх.
Медвежья дивергенция: цена достигает более высокого максимума, но MACD достигает более низкого максимума. Это указывает на ослабление восходящего импульса и потенциальный разворот вниз.
//@version5 indicator("MACD Divergence Scanner", overlay=true) fastLength = input(12, "Fast Length") slowLength = input(26, "Slow Length") signalLength = input(9, "Signal Length") [macdLine, signalLine, hist] = ta.macd(close, fastLength, slowLength, signalLength) // Plot MACD and Signal lines for visual confirmation plot(macdLine, "MACD", color.blue) plot(signalLine, "Signal", color.orange) hline(0, "Zero Line", color.gray) // Simple divergence detection logic (conceptual, for advanced scripts this would be more complex) // This is a basic example and might need refinement for actual trading. // Bullish Divergence (MACD Line makes higher low, Price makes lower low) bullishDivergence = false if macdLine[2] < macdLine[1] and macdLine[1] > macdLine and close[2] > close[1] and close[1] < close // Add logic to check for clear pivots and significant divergence // For simplicity, we'll just check for a basic pattern bullishDivergence := true // Bearish Divergence (MACD Line makes lower high, Price makes higher high) bearishDivergence = false if macdLine[2] > macdLine[1] and macdLine[1] < macdLine and close[2] < close[1] and close[1] > close // Similar to bullish divergence, more robust checks needed for production bearishDivergence := true // Plot divergence signals on the price chart 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) // Alert for divergence alertcondition(bullishDivergence, "Bullish Divergence Detected!", "Potential bullish reversal based on MACD divergence.") alertcondition(bearishDivergence, "Bearish Divergence Detected!", "Potential bearish reversal based on MACD divergence.")
Оптимизация MACD в Pine Script
Чтобы повысить эффективность MACD:
Настройте параметры: поэкспериментируйте с параметрами `fastLength`, `slowLength` и `signalLength` для разных активов/таймфреймов. Распространённые варианты: (5,35,5) или (34,144,9).
В сочетании с ценовым действием: ищите свечные паттерны или уровни поддержки/сопротивления, подтверждающие сигналы MACD.
Используйте в сочетании с другими индикаторами: для подтверждения используйте индикаторы объёма, RSI или стохастические осцилляторы.
Фильтрация ложных сигналов: добавьте дополнительные условия, чтобы уменьшить количество «пилы» на нестабильных рынках.
Предупреждение: MACD, как и все индикаторы, может давать ложные сигналы, особенно на высоковолатильных рынках или рынках с боковым трендом. Всегда используйте его как часть более широкого торгового плана.
Распространенные Подводные Камни MACDЗапаздывающий индикатор: поскольку MACD основан на скользящих средних, иногда он может подавать сигналы уже после того, как произошло значительное движение цены.
"Пила": На боковых или нестабильных рынках MACD может генерировать множество ложных пересечений.
Чрезмерная оптимизация: слишком точная настройка параметров на основе исторических данных может привести к снижению эффективности в реальной торговле.
Заключение
Индикатор MACD не зря является краеугольным камнем технического анализа. Его способность отображать как тренд, так и импульс делает его бесценным для трейдеров. Поняв его компоненты, принципы расчёта и различные стратегии, вы сможете использовать Pine Script для эффективной интеграции MACD в свой анализ на TradingView и создания надёжных и информативных торговых систем.
4. SuperTrend (на основе ATR)
Индикатор SuperTrend – это популярная система следования за трендом, которая рисует линию на ценовом графике, динамически меняя её положение относительно цены. Он основан на концепции среднего истинного диапазона (Average True Range, ATR), который измеряет волатильность рынка. Это позволяет SuperTrend адаптироваться к меняющимся рыночным условиям и подавать более надёжные сигналы, чем индикаторы с фиксированным расстоянием от цены.
В Pine Script SuperTrend – это надёжный инструмент для определения трендов, генерации сигналов на покупку/продажу и даже для установки динамических уровней стоп-лосса.
Компоненты и расчет
SuperTrend состоит в основном из двух ключевых компонентов:
Период ATR: период ретроспективного анализа для расчета среднего истинного диапазона (например, 10 периодов).
Множитель (фактор): значение, определяющее расстояние от линии SuperTrend до цены (например, 3).
Индикатор рассчитывает верхнюю и нижнюю базовые полосы, а затем переключается между ними в зависимости от движения цены. Основной расчёт включает в себя:
Расчет ATR: измеряет среднюю волатильность за указанный период.
Базовая верхняя граница: `(максимум + минимум) / 2 + (множитель * ATR)`
Базовая нижняя полоса: `(максимум + минимум) / 2 – (множитель * ATR)`
Финальная линия SuperTrend: линия меняет направление в зависимости от того, пересекает ли цена закрытия базовые полосы, отражая преобладающий тренд. Когда цена закрывается выше верхней полосы, SuperTrend меняет направление и опускается ниже цены; когда цена закрывается ниже нижней полосы, она меняет направление и поднимается выше цены.
Базовая реализация SuperTrend в Pine Script
Pine Script v5 предоставляет удобную встроенную функцию `ta.supertrend()`, которая выполняет все вычисления за вас.
//@version=5 indicator("My SuperTrend Indicator", overlay=true) // Inputs for SuperTrend parameters atrPeriod = input(10, title="ATR Length") factor = input.float(3.0, title="Factor") // Calculate SuperTrend using the built-in function [supertrend, direction] = ta.supertrend(factor, atrPeriod) // Plot the SuperTrend line, coloring it based on its direction plot(supertrend, title="SuperTrend", color=direction < 0 ? color.green : color.red, linewidth=2) // Optional: Plot arrows when the trend changes plotshape(direction == 1 and direction[1] == -1, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small) plotshape(direction == -1 and direction[1] == 1, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
Понимание вывода `direction`: Функция `ta.supertrend()` возвращает два значения: значение линии `supertrend` и значение `direction`. `direction` равно `1` при восходящем тренде (SuperTrend ниже цены) и `-1` при нисходящем тренде (SuperTrend выше цены).
Практические Стратегии развития сверхтренда1. Следование тренду с помощью SuperTrend
SuperTrend отлично справляется с определением трендов и отслеживанием их. Когда линия SuperTrend находится ниже цены, это указывает на восходящий тренд (часто отображается зеленым цветом). Когда она находится выше цены, это указывает на нисходящий тренд (часто отображается красным цветом).
//@version=5 strategy("SuperTrend Trend Following", overlay=true) // Inputs atrPeriod = input(10, title="ATR Length") factor = input.float(3.0, title="Factor") // Calculate SuperTrend [supertrend, direction] = ta.supertrend(factor, atrPeriod) // Entry conditions based on SuperTrend direction change longCondition = ta.crossover(close, supertrend) // Price crosses above SuperTrend shortCondition = ta.crossunder(close, supertrend) // Price crosses below SuperTrend // Strategy entries if (longCondition) strategy.entry("Long", strategy.long) if (shortCondition) strategy.entry("Short", strategy.short) // Plot SuperTrend plot(supertrend, title="SuperTrend", color=direction < 0 ? color.green : color.red, linewidth=2)
2. SuperTrend как динамический стоп-лосс
Одно из самых мощных применений SuperTrend – использование в качестве динамического стоп-лосса. Сама линия индикатора может служить трейлинг-стопом, адаптируясь к волатильности рынка. При длинной позиции зеленая линия SuperTrend (восходящий тренд) выступает в качестве стоп-лосса. При короткой позиции красная линия (нисходящий тренд) выступает в качестве стоп-лосса.
//@version=5 strategy("SuperTrend Dynamic Stop-Loss", overlay=true) // Inputs atrPeriod = input(10, title="ATR Length") factor = input.float(3.0, title="Factor") // Calculate SuperTrend [supertrend, direction] = ta.supertrend(factor, atrPeriod) // Entry conditions (example: simple moving average crossover for entries) fastMA = ta.ema(close, 20) slowMA = ta.ema(close, 50) longEntry = ta.crossover(fastMA, slowMA) shortEntry = ta.crossunder(fastMA, slowMA) // Long strategy if (longEntry) strategy.entry("Buy", strategy.long) // Short strategy if (shortEntry) strategy.entry("Sell", strategy.short) // Dynamic Stop Loss based on SuperTrend // If in a long position, close if price crosses below SuperTrend if (strategy.position_size > 0) strategy.exit("Long Exit", from_entry="Buy", stop=supertrend) // If in a short position, close if price crosses above SuperTrend if (strategy.position_size < 0) strategy.exit("Short Exit", from_entry="Sell", stop=supertrend) // Plot SuperTrend plot(supertrend, title="SuperTrend", color=direction < 0 ? color.green : color.red, linewidth=2)
Оптимизация производительности в рамках СуперТрендаЧтобы максимально повысить эффективность SuperTrend:
Настройка параметров: поэкспериментируйте с параметрами `atrPeriod` и `factor` для разных таймфреймов и активов. Чем короче период ATR, тем выше чувствительность; чем меньше коэффициент, тем ближе линия к цене.
Анализ на нескольких таймфреймах: используйте SuperTrend на более высоком таймфрейме для подтверждения общего тренда и на более низком таймфрейме для получения сигналов входа/выхода.
В сочетании с объёмом: ищите подтверждение объёма в сигналах SuperTrend. Разворот тренда, сопровождающийся значительным объёмом, часто является более сильным сигналом.
Слияние с уровнями поддержки/сопротивления: сигналы SuperTrend, совпадающие с ключевыми уровнями поддержки или сопротивления, могут быть более надёжными.
Важно: период ATR и множитель имеют решающее значение. Если они слишком малы, вы столкнётесь с «пила-трейлингом», а если слишком велики, сигналы будут приходить слишком поздно. Найдите баланс, который подходит вашему стилю торговли и активу.
Распространенные подводные камни СуперТрендаРезкие изменения на колеблющихся рынках: СуперТренд лучше всего работает на трендовых рынках. На неустойчивых или боковых рынках он может генерировать множество ложных сигналов.
Запаздывающий индикатор: как и другие индикаторы, следующие за трендом, SuperTrend иногда может запаздывать, особенно во время резких разворотов.
Не является самостоятельным индикатором: использование только SuperTrend без дополнительного подтверждения со стороны других индикаторов или ценового действия может привести к неудовлетворительным результатам.
Чрезмерная оптимизация: чрезмерная настройка параметров на основе исторических данных может не повлиять на производительность в будущем.
Заключение
Индикатор SuperTrend – это исключительный инструмент для трейдеров, которые ищут динамичный способ определения трендов в Pine Script с поправкой на волатильность. Интуитивно понятные визуальные сигналы и возможность использования в качестве механизма стоп-лосса делают его ценным дополнением к любой стратегии в TradingView. Поняв принцип его работы на основе ATR и грамотно сочетая его с другими аналитическими инструментами, вы сможете использовать все возможности SuperTrend для более эффективной работы на рынке.
5. Parabolic SAR (стоп-лосс и реверс)
Индикатор Parabolic Stop and Reverse (SAR), разработанный Дж. Уэллсом Уайлдером-младшим, представляет собой торговый инструмент, основанный на времени и цене, который используется для определения направления движения актива и точки, в которой следует разместить стоп-лосс или тейк-профит. Он часто отображается в виде серии точек над или под ценовыми полосами, указывающих на текущее направление тренда.