
Это многоступенчатая мобильная стоп-стратегия, основанная на двойных показателях Supertrend. Эта стратегия использует два параметра, отличающиеся от показателей Supertrend, для определения рыночных тенденций и многолетней торговли в соответствии с направлением тенденции.
Двойной Супертренд: Стратегия использует два параметра, чтобы определить тренд. Супертренд используется для определения двух параметров, чтобы определить тренд.
Многоступенчатый подвижной стоп: стратегия устанавливает 4 регулируемых стоп-цели. Каждая цель имеет соответствующий стоп-процент и пропорцию позиции. Например, первая стоп-цель может быть установлена на 6% прибыли и уравнять 12% позиции, а вторая цель может быть установлена на 12% прибыли и уравнять 8% позиции, и так далее.
Гибкая направленность торговли: стратегии позволяют пользователям выбирать между оптовой, криптовалютной или двусторонней торговлей в соответствии с различными рыночными условиями и предпочтениями торговли.
Динамические остановки: хотя в коде нет четких установок для остановки, стратегия автоматически выровняет позиции, когда индикатор Supertrend переворачивается, что фактически играет роль в динамических остановках.
Оптимизация управления рисками: многоступенчатый механизм мобильных стоп-апп значительно улучшает риск-прибыль соотношения стратегии. Постепенно блокируя прибыль, стратегия может снизить риск отмены, сохраняя при этом пространство для прибыли.
Снижение ложных сигналов: использование двойного индикатора Supertrend значительно снижает влияние ложных сигналов и повышает точность и надежность торгов.
Эластичность: стратегия может гибко корректировать направление торговли и параметры остановки в зависимости от предпочтений пользователей и рыночных условий, применяется для различных типов торговли и временных периодов.
Высокий уровень автоматизации: стратегия полностью автоматизирована, от входа, остановки и выхода из игры не требует никакого вмешательства человека, что значительно снижает эмоциональный эффект и вероятность ошибок в управлении.
Гибкость управления капиталом: с помощью различных стоп-пропорций стратегия позволяет реализовать гибкое управление капиталом, гарантируя быстрое блокирование части прибыли и позволяя оставшимся позициям оставаться прибыльными.
Чувствительность к параметрам: эффективность стратегии в значительной степени зависит от параметров Supertrend и параметров стоп-стоп. Неправильные параметры могут привести к чрезмерной торговле или упущению важных возможностей.
Трендозависимость: как стратегия отслеживания тенденций, в условиях волатильности рынка может происходить частое вхождение и выхождение, что приводит к ненужным торговым издержкам.
Риск скольжения: при быстром движении исполнение многоступенчатых остановок может быть затронуто скольжением, и фактическая цена исполнения может отклоняться от ожиданий.
Риск переоптимизации: стратегии имеют множество регулируемых параметров, которые легко попадают в ловушку переоптимизации, что приводит к значительному отклонению результатов от реальности.
Внедрение фильтров волатильности: учет в сочетании с ATR или другими индикаторами волатильности, снижение частоты торгов в период низкой волатильности, повышение адаптивности стратегии в различных рыночных условиях.
Динамическая настройка параметров: можно использовать адаптивные алгоритмы для динамической настройки параметров Supertrend и остановочных целей, чтобы лучше адаптироваться к изменениям рынка.
Добавление механизмов остановки убытков: хотя Supertrend в обратном порядке предоставляет определенную функцию остановки убытков, можно рассмотреть возможность добавления более гибких механизмов остановки убытков, таких как отслеживание остановки убытков, для дальнейшего контроля риска.
В сочетании с другими техническими показателями: можно рассмотреть возможность внедрения других технических показателей, таких как RSI, MACD, для повышения точности входа и выхода из игры с помощью резонанса с несколькими показателями.
Оптимизация управления капиталом: можно исследовать более сложные стратегии управления капиталом, такие как динамическое изменение размеров позиций в зависимости от прибыльности счета, чтобы лучше сбалансировать риски и доходы.
Оптимизация обратной связи: проведение более полной обратной связи, включающей анализ эффективности в разные периоды времени и в разных рыночных условиях, для выявления наилучших сценариев применения стратегии и параметров.
Основными преимуществами стратегии являются ее отличные возможности управления рисками и чувствительность к тенденциям. Однако пользователям необходимо обращать внимание на параметры и влияние рыночной среды при их применении. С дальнейшей оптимизацией и совершенствованием стратегия имеет потенциал стать надежной и надежной автоматизированной торговой системой.
/*backtest
start: 2024-05-21 00:00:00
end: 2024-06-20 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Strategic Multi-Step Supertrend Trader - Strategy [presentTrading]", overlay=true )
// this strategy utilizes a double Supertrend indicator to determine entry and exit conditions for both long and short trades, with user-configurable take profit levels and trade direction settings.
// The strategy dynamically updates highest and lowest prices during trades and exits positions based on multi-step profit targets or opposing Supertrend signals.
// User inputs for take profit settings
// Grouping Take Profit settings
useTakeProfit = input.bool(true, title="Use Take Profit", group="Take Profit Settings")
takeProfitPercent1 = input.float(6.0, title="Take Profit % Step 1", group="Take Profit Settings")
takeProfitPercent2 = input.float(12.0, title="Take Profit % Step 2", group="Take Profit Settings")
takeProfitPercent3 = input.float(18.0, title="Take Profit % Step 3", group="Take Profit Settings")
takeProfitPercent4 = input.float(50.0, title="Take Profit % Step 4", group="Take Profit Settings")
takeProfitAmount1 = input.float(12, title="Take Profit Amount % Step 1", group="Take Profit Settings")
takeProfitAmount2 = input.float(8, title="Take Profit Amount % Step 2", group="Take Profit Settings")
takeProfitAmount3 = input.float(4, title="Take Profit Amount % Step 3", group="Take Profit Settings")
takeProfitAmount4 = input.float(0, title="Take Profit Amount % Step 4", group="Take Profit Settings")
numberOfSteps = input.int(3, title="Number of Take Profit Steps", minval=1, maxval=4, group="Take Profit Settings")
// Grouping Trade Direction
tradeDirection = input.string("Both", title="Trade Direction", options=["Long", "Short", "Both"], group="Trade Direction")
// Grouping Supertrend settings
atrPeriod1 = input(10, title="ATR Length for Supertrend 1", group="Supertrend Settings")
factor1 = input.float(3.0, title="Factor for Supertrend 1", step=0.01, group="Supertrend Settings")
atrPeriod2 = input(5, title="ATR Length for Supertrend 2", group="Supertrend Settings")
factor2 = input.float(4.0, title="Factor for Supertrend 2", step=0.01, group="Supertrend Settings")
// Function to calculate Supertrend
supertrend(factor, atrPeriod) =>
[a, direction] = ta.supertrend(factor, atrPeriod)
direction
// Calculate Double Supertrend
supertrend1 = supertrend(factor1, atrPeriod1)
supertrend2 = supertrend(factor2, atrPeriod2)
// Entry conditions
longCondition = (supertrend1 < 0 and supertrend2 < 0) and (tradeDirection == "Long" or tradeDirection == "Both")
shortCondition = (supertrend1 > 0 and supertrend2 > 0) and (tradeDirection == "Short" or tradeDirection == "Both")
// Exit conditions
longExitCondition = (supertrend1 > 0 and supertrend2 > 0) and (tradeDirection == "Long" or tradeDirection == "Both")
shortExitCondition = (supertrend1 < 0 and supertrend2 < 0) and (tradeDirection == "Short" or tradeDirection == "Both")
// Variables to store the highest and lowest prices during the trade
var float highestPrice = na
var float lowestPrice = na
// Get the entry price from open trades
entryPrice = strategy.opentrades.entry_price(strategy.opentrades - 1)
// Reset highestPrice or lowestPrice when entering new trades
if (longCondition and strategy.position_size <= 0)
highestPrice := na // Reset the highest price
strategy.entry("My Long Entry Id", strategy.long) // Enter long position
strategy.close("My Short Entry Id", "Short Exit") // Close short position if any
if (shortCondition and strategy.position_size >= 0)
lowestPrice := na // Reset the lowest price
strategy.entry("My Short Entry Id", strategy.short) // Enter short position
strategy.close("My Long Entry Id", "Long Exit") // Close long position if any
// Exit trades based on conditions
if (longExitCondition and strategy.position_size > 0)
strategy.close("My Long Entry Id", "Long Exit") // Exit long position
if (shortExitCondition and strategy.position_size < 0)
strategy.close("My Short Entry Id", "Short Exit") // Exit short position
if (strategy.position_size > 0)
// Update the highest price for long positions
highestPrice := na(highestPrice) ? high : math.max(highestPrice, high)
// Step 1
if (useTakeProfit and numberOfSteps >= 1)
strategy.exit("Take Profit 1", from_entry="My Long Entry Id", qty_percent=takeProfitAmount1, limit=entryPrice * (1 + takeProfitPercent1 / 100))
// Step 2
if (useTakeProfit and numberOfSteps >= 2)
strategy.exit("Take Profit 2", from_entry="My Long Entry Id", qty_percent=takeProfitAmount2, limit=entryPrice * (1 + takeProfitPercent2 / 100))
// Step 3
if (useTakeProfit and numberOfSteps >= 3)
strategy.exit("Take Profit 3", from_entry="My Long Entry Id", qty_percent=takeProfitAmount3, limit=entryPrice * (1 + takeProfitPercent3 / 100))
// Step 4
if (useTakeProfit and numberOfSteps == 4)
strategy.exit("Take Profit 4", from_entry="My Long Entry Id", qty_percent=takeProfitAmount4, limit=entryPrice * (1 + takeProfitPercent4 / 100))
if (strategy.position_size < 0)
// Update the lowest price for short positions
lowestPrice := na(lowestPrice) ? low : math.min(lowestPrice, low)
// Step 1
if (useTakeProfit and numberOfSteps >= 1)
strategy.exit("Take Profit 1", from_entry="My Short Entry Id", qty_percent=takeProfitAmount1, limit=entryPrice * (1 - takeProfitPercent1 / 100))
// Step 2
if (useTakeProfit and numberOfSteps >= 2)
strategy.exit("Take Profit 2", from_entry="My Short Entry Id", qty_percent=takeProfitAmount2, limit=entryPrice * (1 - takeProfitPercent2 / 100))
// Step 3
if (useTakeProfit and numberOfSteps >= 3)
strategy.exit("Take Profit 3", from_entry="My Short Entry Id", qty_percent=takeProfitAmount3, limit=entryPrice * (1 - takeProfitPercent3 / 100))
// Step 4
if (useTakeProfit and numberOfSteps == 4)
strategy.exit("Take Profit 4", from_entry="My Short Entry Id", qty_percent=takeProfitAmount4, limit=entryPrice * (1 - takeProfitPercent4 / 100))