Розробка кастомних стратегій на 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)
Алерти для автоматизації
Pin 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 на кількох інструментах та настройку алертів для автоматичного виконання.







