Частичный Take Profit в Pine Script v5: Пошаговое руководство

Частичный Take Profit в Pine Script v5: Пошаговое руководство Pine Script
Как реализовать логику частичного закрытия позиции (Partial Take Profit) в Pine Script v5 с помощью функции strategy.exit. Готовый код и разбор параметров.
Суть: Для реализации частичного закрытия позиции (Partial Take Profit) в Pine Script v5 используется несколько вызовов функции strategy.exit() с одинаковым идентификатором входа from_entry. Первый вызов закрывает часть позиции с помощью параметра qty_percent, а второй закрывает оставшуюся часть по достижении следующей цели или общего Stop Loss.

Исходный код

Ниже представлен готовый к использованию шаблон торговой стратегии с логикой разделения выхода на два уровня Take Profit (50% на первом уровне и оставшиеся 50% на втором) и общим Stop Loss.

//@version=5
strategy('Partial Take Profit Strategy', overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// Входные параметры
tp1_perc = input.float(1.5, title='Take Profit 1 (%)', minval=0.1)
tp2_perc = input.float(3.0, title='Take Profit 2 (%)', minval=0.1)
sl_perc = input.float(2.0, title='Stop Loss (%)', minval=0.1)
tp1_qty_perc = input.float(50.0, title='TP1 Qty (%)', minval=1, maxval=100)

// Простой индикатор для генерации сигналов (EMA Cross)
fast_ema = ta.ema(close, 9)
slow_ema = ta.ema(close, 21)
entry_cond = ta.crossover(fast_ema, slow_ema)

plot(fast_ema, color=color.blue, title='Fast EMA')
plot(slow_ema, color=color.orange, title='Slow EMA')

// Сохраняем цену входа
var float entry_price = na

if (entry_cond and strategy.position_size == 0)
    strategy.entry('Long', strategy.long)
    entry_price := close

// Логика выходов (активна только при наличии открытой позиции)
if (strategy.position_size > 0)
    tp1_price = entry_price * (1 + tp1_perc / 100)
    tp2_price = entry_price * (1 + tp2_perc / 100)
    sl_price = entry_price * (1 - sl_perc / 100)

    // Первый выход: закрываем часть позиции (например, 50%) по TP1
    strategy.exit('TP1', from_entry='Long', qty_percent=tp1_qty_perc, limit=tp1_price, stop=sl_price)
    
    // Второй выход: закрываем оставшуюся часть по TP2
    strategy.exit('TP2', from_entry='Long', limit=tp2_price, stop=sl_price)

Разбор параметров

Для корректной работы частичного закрытия крайне важно понимать, как взаимодействуют параметры функции strategy.exit:

  • id: Уникальный идентификатор ордера на выход. Каждая цель должна иметь свой уникальный id (например, ‘TP1’ и ‘TP2’), иначе TradingView перезапишет предыдущий ордер.
  • from_entry: Связывает ордер на выход с конкретным входом (в нашем случае ‘Long’). Это критически важно для мульти-позиционных стратегий.
  • qty_percent: Процент от объема позиции, который необходимо закрыть. Для первого тейка мы указываем qty_percent=50. Для финального тейка этот параметр можно опустить, чтобы закрыть 100% оставшейся позиции.
  • limit: Целевая цена (Take Profit), при достижении которой исполнится лимитный ордер.
  • stop: Уровень Stop Loss. Указание одинакового stop в обоих вызовах гарантирует, что вся позиция закроется при неблагоприятном движении рынка.

Как запустить

Чтобы протестировать данную логику на графике TradingView, выполните следующие шаги:

1. Откройте TradingView и перейдите в ‘Pine Editor’ (Редактор Pine) в нижней панели.

2. Скопируйте представленный выше код и вставьте его в редактор, заменив стандартный шаблон.

3. Нажмите кнопку ‘Add to chart’ (Добавить на график).

4. В панели ‘Strategy Tester’ (Тестер стратегий) вы сможете детально проанализировать список сделок и увидеть, как позиция закрывается частями.

Для построения более сложных торговых систем вам может потребоваться продвинутая фильтрация сигналов. Например, вы можете использовать VWMA с кастомными весами через матрицы в Pine Script v5 для определения динамических зон поддержки/сопротивления или анализировать структуру рынка с помощью Скрипта профиля рынка (Market Profile) с разделением на TPO в Pine Script v5.

Также, при работе на реальном счете, критически важно вести логирование всех частичных закрытий. Для автоматизации этого процесса отлично подойдет Интеграция Pine Script v5 с Google Sheets: Webhook для логов сделок, которая позволит отправлять данные о каждой частичной сделке в режиме реального времени.

Оцените статью
FinFluct