strategy.exit с одинаковым from_entry, но уникальными идентификаторами id и параметром qty_percent, определяющим процент закрываемой позиции на каждом уровне.Исходный код
Ниже представлен готовый шаблон торговой стратегии на Pine Script v5. В коде реализован вход по пересечению скользящих средних и каскадный выход по трем уровням тейк-профита с одновременным выставлением общего стоп-лосса. При разработке сложных торговых систем, таких как Расчет и Визуализация Уровней Ликвидации Binance Futures (Kingfisher) в Pine Script v5, критически важно правильно фиксировать прибыль частями.
//@version=5
strategy("Multi-Level Take Profit Strategy", overlay=true, initial_capital=10000)
// Настройки уровней в процентах
tp1_perc = input.float(1.0, title="TP1 %")
tp2_perc = input.float(2.0, title="TP2 %")
tp3_perc = input.float(3.0, title="TP3 %")
sl_perc = input.float(1.5, title="SL %")
// Процент закрытия позиции на каждом уровне
tp1_qty = input.float(30.0, title="TP1 Qty %")
tp2_qty = input.float(30.0, title="TP2 Qty %")
tp3_qty = input.float(40.0, title="TP3 Qty %")
// Простая логика входа (EMA Cross)
fast_ema = ta.ema(close, 9)
slow_ema = ta.ema(close, 21)
entry_cond = ta.crossover(fast_ema, 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)
tp3_price = entry_price * (1 + tp3_perc / 100)
sl_price = entry_price * (1 - sl_perc / 100)
// Выставление ордеров выхода
strategy.exit("Exit_TP1", from_entry="Long", qty_percent=tp1_qty, limit=tp1_price, stop=sl_price)
strategy.exit("Exit_TP2", from_entry="Long", qty_percent=tp2_qty, limit=tp2_price, stop=sl_price)
strategy.exit("Exit_TP3", from_entry="Long", qty_percent=tp3_qty, limit=tp3_price, stop=sl_price)
if strategy.position_size == 0
entry_price := na
// Визуализация уровней на графике
plot(strategy.position_size > 0 ? entry_price * (1 + tp1_perc / 100) : na, color=color.green, style=plot.style_linebr, title="TP1")
plot(strategy.position_size > 0 ? entry_price * (1 + tp2_perc / 100) : na, color=color.green, style=plot.style_linebr, title="TP2")
plot(strategy.position_size > 0 ? entry_price * (1 + tp3_perc / 100) : na, color=color.green, style=plot.style_linebr, title="TP3")
plot(strategy.position_size > 0 ? entry_price * (1 - sl_perc / 100) : na, color=color.red, style=plot.style_linebr, title="SL") Разбор параметров
Для корректной работы каскадного закрытия мы используем следующие ключевые параметры функции strategy.exit:
id: Уникальный идентификатор ордера выхода (например,"Exit_TP1"). Каждый уровень фиксации должен иметь свой уникальный ID, иначе Pine Script перезапишет предыдущий ордер.from_entry: Указывает, к какому именно входному ордеру применяется данное закрытие. В нашем случае это"Long".qty_percent: Процент от текущей открытой позиции, который необходимо закрыть при достижении уровня. Сумма процентов всех уровней должна составлять 100% для полного закрытия позиции.limit: Целевой уровень цены для фиксации прибыли (Take Profit).stop: Уровень ограничения убытков (Stop Loss), который дублируется во всех ордерах для защиты всей позиции.
Как запустить
Иногда для точного входа требуется анализировать младшие таймфреймы. О том, как это сделать, читайте в статье Как обойти лимит 15 минут в request.security_lower_tf в Pine Script v5. А если вы хотите добавить в свою стратегию немного экзотики, посмотрите материал Динамический bgcolor по фазам луны в Pine Script v5.
Чтобы запустить стратегию на платформе TradingView, выполните следующие шаги:
1. Откройте график любого актива на TradingView.
2. В нижней панели выберите вкладку ‘Pine Editor’ (Редактор Pine).
3. Удалите стандартный код и вставьте скопированный выше скрипт.
4. Нажмите кнопку ‘Add to chart’ (Добавить на график) в правом верхнем углу редактора.
5. Перейдите во вкладку ‘Strategy Tester’ (Тестер стратегий), чтобы проанализировать результаты бэктеста.




