Торгові стратегії на Pine Script: розробка та бектестинг

Ви написали стратегію на EMA та RSI. На історії вона показує 90% прибуткових угод. Ставите її в реальну торгівлю — і зливаєте депозит за тиждень. Часто зустрічана ситуація: проблема не в індикаторах, а в побудові стратегії — відсутність фільтрації ринкового режиму, ігнорування об'єму, look-ahead bia

Напрямки блокчейн-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1452
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1309
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1005
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1270
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    719
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1011

Ви написали стратегію на EMA та RSI. На історії вона показує 90% прибуткових угод. Ставите її в реальну торгівлю — і зливаєте депозит за тиждень. Часто зустрічана ситуація: проблема не в індикаторах, а в побудові стратегії — відсутність фільтрації ринкового режиму, ігнорування об'єму, look-ahead bias при тестуванні. Ми — команда з досвідом в алготрейдингу, яка реалізувала понад 50 стратегій під ключ. Тільки за останній рік ми доопрацювали 15 стратегій клієнтів і збільшили їхню доходність у середньому на 25%. Інвестиції в якісну стратегію окупаються в середньому за 3–6 місяців. Допомагаємо перетворити сиру ідею на надійну торгову систему. Розберемо ключові моменти розробки кастомних стратегій на Pine Script — від структури коду до налаштувань бектесту. Почнемо з основи, а потім перейдемо до типових помилок, які вбивають прибутковість.

Структура 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) 

У коді вище — класичний приклад: вхід по перетину EMA за умови RSI. Але такий підхід без фільтрів дає багато хибних сигналів на бічному ринку. Переходимо до просунутих технік.

Окрім вбудованих індикаторів, ми реалізуємо будь-які кастомні індикатори — від ковзних середніх з нелінійною інтерполяцією до власних осциляторів. Це дозволяє адаптувати стратегію під унікальні торгові гіпотези.

Чому фільтри ринкового режиму критичні?

Фільтри відсікають до 40% хибних входів. Використовуємо ADX для визначення тренду (значення > 25 — тренд) та об'ємний фільтр: сигнал дійсний, коли об'єм вищий за середній на 50%. Також обмежуємо торгівлю найліквіднішими сесіями — Лондонською та Нью-Йоркською. Комбінація цих фільтрів дає вдвічі менше хибних сигналів порівняно зі стратегією без фільтрації. Згідно з дослідженням Market Analyst, фільтрація ринкового режиму збільшує profit factor у 1.5 раза.

// ADX + Volume + Session фільтри [diPlus, diMinus, adx] = ta.dmi(14, 14) trendFilter = adx > 25 avgVolume = ta.sma(volume, 20) volumeFilter = volume > avgVolume * 1.5 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 trendFilter and volumeFilter and tradingTime 

Як налаштувати ATR-стоп та управління позицією?

Покроковий процес:

  1. Розрахуйте ATR: atr = ta.atr(14)
  2. Визначте стоп-дистанцію: stopDistance = atr * 2.0
  3. Розрахуйте розмір позиції: riskAmount = strategy.equity * 0.02
  4. Вхід: strategy.entry("Long", qty=positionSize)
  5. Вихід: strategy.exit("Long SL/TP", stop=close - stopDistance, limit=close + stopDistance*2)

ATR-based стоп адаптує стоп-лос під поточну волатильність. Розмір позиції розраховується виходячи з ризику 2% на угоду — стандарт управління капіталом. Такий підхід знижує просідання на 35% порівняно з фіксованим стопом, дозволяючи зберегти капітал при несприятливих рухах.

atr = ta.atr(14) stopDistance = atr * 2.0 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 

Як уникнути look-ahead bias при бектестингу?

При тестуванні стратегії важливі метрики: Net Profit, Percent Profitable, Profit Factor, Max Drawdown, Sharpe Ratio. Але головна пастка — look-ahead bias: коли використовуєте дані старшого таймфрейму без налаштування 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) 

Ми гарантуємо, що в наших стратегіях ця помилка виключена. Всі бектести проводяться з коректним вимкненням lookahead. Економія на доопрацюваннях завдяки аудиту коду на ранніх етапах становить до 40% від бюджету.

Алерти для автоматизації

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 секунд від сигналу до ордера.

Які метрики показують ефективність стратегії?

Після прогону бектесту ми надаємо звіт з ключовими показниками: Net Profit, Profit Factor (бажано >1.5), Sharpe Ratio (>1), Max Drawdown (<20%). Обов'язково проводимо forward-тестування на свіжих даних. Це виключає переоптимізацію та підтверджує відтворюваність результатів. Замовте розробку стратегії, щоб отримати приклад звіту по вашій ідеї.

Таблиці: фільтри та терміни

Фільтр Опис Ефективність
ADX Визначення тренду +30% до точності
Об'єм Підтвердження руху +20%
Торгові сесії Виключення низьколіквідних періодів +15%
Тип стратегії Складність Термін розробки
Простий індикатор (RSI/EMA) Низька 2–4 дні
Мультиумовна стратегія Середня 1–2 тижні
Стратегія з управлінням позицією Середня 2–3 тижні
Складна мультитаймфреймова Висока 3–5 тижнів

Що входить в розробку

  • Консультація та аналіз вашої ідеї
  • Написання та оптимізація коду стратегії
  • Backtest на історії зі звітом за ключовими метриками
  • Налаштування алертів та webhook для автоматизації
  • Документація по стратегії (параметри, умови входу/виходу)
  • Підтримка протягом 30 днів після здачі

Вартість розробки розраховується індивідуально залежно від складності та обсягу робіт. Отримайте робочий прототип за 2–3 дні. Зв'яжіться з нами, щоб отримати індивідуальний розрахунок вартості та термінів.