Разработка кастомных стратегий на Pine Script
Pine Script — скриптовый язык TradingView для создания индикаторов и стратегий прямо в браузере. Выглядит просто, но написать стратегию, которая не даёт false signals на исторических данных и реально торгует — нетривиальная задача.
Структура Pine Script стратегии
//@version=5
strategy("EMA + RSI Strategy", overlay=true,
initial_capital=10000, commission_value=0.1,
default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// Параметры (настраиваются в интерфейсе TradingView)
emaFast = input.int(9, "Fast EMA", minval=1)
emaSlow = input.int(21, "Slow EMA", minval=1)
rsiPeriod = input.int(14, "RSI Period")
rsiOversold = input.float(30, "RSI Oversold")
rsiOverbought = input.float(70, "RSI Overbought")
// Вычисление индикаторов
emaF = ta.ema(close, emaFast)
emaS = ta.ema(close, emaSlow)
rsi = ta.rsi(close, rsiPeriod)
// Условия входа
longCondition = ta.crossover(emaF, emaS) and rsi < rsiOversold
shortCondition = ta.crossunder(emaF, emaS) and rsi > rsiOverbought
// Входы
if longCondition
strategy.entry("Long", strategy.long)
if shortCondition
strategy.entry("Short", strategy.short)
// Выходы с стоп-лоссом и тейк-профитом
strategy.exit("Long Exit", "Long",
stop=strategy.position_avg_price * 0.97, // -3% стоп
limit=strategy.position_avg_price * 1.06) // +6% тейк
// Визуализация
plot(emaF, "Fast EMA", color=color.blue)
plot(emaS, "Slow EMA", color=color.orange)
bgcolor(longCondition ? color.new(color.green, 90) : na)
Продвинутые техники
Фильтр рыночного режима
// ADX фильтр: торгуем только при наличии тренда
[diPlus, diMinus, adx] = ta.dmi(14, 14)
trendFilter = adx > 25
// Объёмный фильтр: сигнал действителен только при повышенном объёме
avgVolume = ta.sma(volume, 20)
volumeFilter = volume > avgVolume * 1.5
// Комбинируем фильтры
longCondition := longCondition and trendFilter and volumeFilter
Управление позицией (Position Sizing)
// ATR-based стоп: динамический стоп под волатильность
atr = ta.atr(14)
stopDistance = atr * 2.0
// Размер позиции под риск: рискуем не более 2% депозита на сделку
riskAmount = strategy.equity * 0.02
positionSize = riskAmount / stopDistance
if longCondition
strategy.entry("Long", strategy.long, qty=positionSize)
strategy.exit("Long SL/TP", "Long",
stop=close - stopDistance,
limit=close + stopDistance * 2) // RR 1:2
Торговые сессии и time filters
// Торговать только в Лондонскую и Нью-Йоркскую сессии
inLondon = not na(time(timeframe.period, "0800-1600", "Europe/London"))
inNewYork = not na(time(timeframe.period, "0930-1600", "America/New_York"))
tradingTime = inLondon or inNewYork
longCondition := longCondition and tradingTime
Backtesting в TradingView
Ключевые метрики в Strategy Tester:
- Net Profit: абсолютная прибыль за период
- Percent Profitable: % прибыльных сделок (60%+ хорошо для трендовых)
- Profit Factor: сумма выигрышей / сумма проигрышей (> 1.5 приемлемо)
- Max Drawdown: максимальная просадка от пика
- Sharpe Ratio: скорректированная на риск доходность
Look-ahead bias — главная ловушка Pine Script: если использовать security() для получения данных старшего таймфрейма без lookahead=barmerge.lookahead_off, стратегия будет использовать будущие данные на историческом тесте. Результаты будут нереалистично хорошими.
// НЕПРАВИЛЬНО — look-ahead bias:
htf_close = request.security(syminfo.tickerid, "D", close)
// ПРАВИЛЬНО — только закрытые бары:
htf_close = request.security(syminfo.tickerid, "D", close[1],
lookahead=barmerge.lookahead_off)
Алерты для автоматизации
Pine Script стратегию можно подключить к trading bot через TradingView alerts + webhook:
// Создание алертов
alertcondition(longCondition, "Long Signal",
"{{strategy.order.action}} {{ticker}} @ {{close}}")
alertcondition(shortCondition, "Short Signal",
"{{strategy.order.action}} {{ticker}} @ {{close}}")
Webhook URL принимает JSON от TradingView и исполняет ордер через биржевое API. Задержка: обычно 1–5 секунд от сигнала до ордера.
| Тип стратегии | Сложность | Срок разработки |
|---|---|---|
| Простой индикатор (RSI/EMA) | Низкая | 2–4 дня |
| Мультиусловная стратегия | Средняя | 1–2 недели |
| Стратегия с управлением позицией | Средняя | 2–3 недели |
| Сложная мультитаймфреймовая | Высокая | 3–5 недель |
Разработка включает написание стратегии, настройку параметров, backtesting на нескольких инструментах и настройку алертов для автоматического исполнения.







