Ви написали стратегію на 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-стоп та управління позицією?
Покроковий процес:
- Розрахуйте ATR:
atr = ta.atr(14) - Визначте стоп-дистанцію:
stopDistance = atr * 2.0 - Розрахуйте розмір позиції:
riskAmount = strategy.equity * 0.02 - Вхід:
strategy.entry("Long", qty=positionSize) - Вихід:
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 дні. Зв'яжіться з нами, щоб отримати індивідуальний розрахунок вартості та термінів.







