Supertrend — многошаговая стратегия фиксации прибыли с двойным срабатыванием

ATR ST TP
Дата создания: 2024-06-21 14:36:35 Последнее изменение: 2024-06-21 14:36:35
Копировать: 1 Количество просмотров: 698
1
Подписаться
1617
Подписчики

Supertrend — многошаговая стратегия фиксации прибыли с двойным срабатыванием

Обзор

Это многоступенчатая мобильная стоп-стратегия, основанная на двойных показателях Supertrend. Эта стратегия использует два параметра, отличающиеся от показателей Supertrend, для определения рыночных тенденций и многолетней торговли в соответствии с направлением тенденции.

Стратегический принцип

  1. Двойной Супертренд: Стратегия использует два параметра, чтобы определить тренд. Супертренд используется для определения двух параметров, чтобы определить тренд.

  2. Многоступенчатый подвижной стоп: стратегия устанавливает 4 регулируемых стоп-цели. Каждая цель имеет соответствующий стоп-процент и пропорцию позиции. Например, первая стоп-цель может быть установлена на 6% прибыли и уравнять 12% позиции, а вторая цель может быть установлена на 12% прибыли и уравнять 8% позиции, и так далее.

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

  4. Динамические остановки: хотя в коде нет четких установок для остановки, стратегия автоматически выровняет позиции, когда индикатор Supertrend переворачивается, что фактически играет роль в динамических остановках.

Стратегические преимущества

  1. Оптимизация управления рисками: многоступенчатый механизм мобильных стоп-апп значительно улучшает риск-прибыль соотношения стратегии. Постепенно блокируя прибыль, стратегия может снизить риск отмены, сохраняя при этом пространство для прибыли.

  2. Снижение ложных сигналов: использование двойного индикатора Supertrend значительно снижает влияние ложных сигналов и повышает точность и надежность торгов.

  3. Эластичность: стратегия может гибко корректировать направление торговли и параметры остановки в зависимости от предпочтений пользователей и рыночных условий, применяется для различных типов торговли и временных периодов.

  4. Высокий уровень автоматизации: стратегия полностью автоматизирована, от входа, остановки и выхода из игры не требует никакого вмешательства человека, что значительно снижает эмоциональный эффект и вероятность ошибок в управлении.

  5. Гибкость управления капиталом: с помощью различных стоп-пропорций стратегия позволяет реализовать гибкое управление капиталом, гарантируя быстрое блокирование части прибыли и позволяя оставшимся позициям оставаться прибыльными.

Стратегический риск

  1. Чувствительность к параметрам: эффективность стратегии в значительной степени зависит от параметров Supertrend и параметров стоп-стоп. Неправильные параметры могут привести к чрезмерной торговле или упущению важных возможностей.

  2. Трендозависимость: как стратегия отслеживания тенденций, в условиях волатильности рынка может происходить частое вхождение и выхождение, что приводит к ненужным торговым издержкам.

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

  4. Риск переоптимизации: стратегии имеют множество регулируемых параметров, которые легко попадают в ловушку переоптимизации, что приводит к значительному отклонению результатов от реальности.

Направление оптимизации стратегии

  1. Внедрение фильтров волатильности: учет в сочетании с ATR или другими индикаторами волатильности, снижение частоты торгов в период низкой волатильности, повышение адаптивности стратегии в различных рыночных условиях.

  2. Динамическая настройка параметров: можно использовать адаптивные алгоритмы для динамической настройки параметров Supertrend и остановочных целей, чтобы лучше адаптироваться к изменениям рынка.

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

  4. В сочетании с другими техническими показателями: можно рассмотреть возможность внедрения других технических показателей, таких как RSI, MACD, для повышения точности входа и выхода из игры с помощью резонанса с несколькими показателями.

  5. Оптимизация управления капиталом: можно исследовать более сложные стратегии управления капиталом, такие как динамическое изменение размеров позиций в зависимости от прибыльности счета, чтобы лучше сбалансировать риски и доходы.

  6. Оптимизация обратной связи: проведение более полной обратной связи, включающей анализ эффективности в разные периоды времени и в разных рыночных условиях, для выявления наилучших сценариев применения стратегии и параметров.

Подвести итог

Основными преимуществами стратегии являются ее отличные возможности управления рисками и чувствительность к тенденциям. Однако пользователям необходимо обращать внимание на параметры и влияние рыночной среды при их применении. С дальнейшей оптимизацией и совершенствованием стратегия имеет потенциал стать надежной и надежной автоматизированной торговой системой.

Исходный код стратегии
/*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))