Разработка кастомных стратегий на Pine Script

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1Все 1306 услуг
Разработка кастомных стратегий на Pine Script
Средний
от 1 дня до 3 дней
Часто задаваемые вопросы

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

Этапы блокчейн-разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1288
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1198
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    902
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1122
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    589
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    859

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