Многошаговая адаптивная динамическая стратегия Supertrend с волатильностью

ATR SMA STD TP
Дата создания: 2024-11-29 16:57:19 Последнее изменение: 2024-11-29 16:57:19
Копировать: 0 Количество просмотров: 439
1
Подписаться
1617
Подписчики

Многошаговая адаптивная динамическая стратегия Supertrend с волатильностью

Обзор

Многоступенчатая волатильность автоматически адаптируется к динамическому сверхтренду Стратегия является инновационной торговой системой, объединяющей Вегас-канал и индикатор SuperTrend. Уникальность стратегии заключается в ее способности динамически адаптироваться к волатильности рынка, а также в использовании многоступенчатой тормозной механизмы для оптимизации риско-прибыльности. Стратегия, объединяя волатильный анализ Вегас-канала с функцией отслеживания тенденций SuperTrend, автоматически корректирует свои параметры при изменении рыночных условий, что обеспечивает более точный торговый сигнал.

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

Стратегия основана на трех основных компонентах: расчет Вегас-каналов, обнаружение тенденций и многоступенчатая остановка. Вегас-каналы используют простые движущиеся средние ((SMA) и стандартные отклонения ((STD) для определения диапазона колебаний цен, а индикатор SuperTrend определяет направление тенденции на основе скорректированных значений ATR. Когда рыночная тенденция меняется, система генерирует торговые сигналы.

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

  1. Динамическая адаптивность: стратегия может автоматически адаптироваться к различным рыночным условиям с помощью коэффициентов корректировки волатильности.
  2. Управление рисками: многоступенчатый механизм сдерживания предоставляет систематизированные решения для получения прибыли.
  3. Настраиваемость: предлагается множество параметров для различных стилей торговли.
  4. Всеобъемлющий охват рынка: поддержка многоканальной двусторонней торговли.
  5. Визуальная обратная связь: обеспечивает четкий графический интерфейс для анализа и принятия решений.

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

  1. Чувствительность параметров: различные комбинации параметров могут привести к значительному различию в эффективности стратегии.
  2. Отсталость: существует определенная отсталость в показателях, основанных на скользящих средних.
  3. Риск ложного прорыва: ложные сигналы могут появиться на криптовалютном рынке.
  4. Стоп-настройки на балансе: преждевременная остановка может пропустить большую тенденцию, слишком поздняя остановка может потерять уже прибыльную ставку.

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

  1. Внедрение фильтров рыночной среды, которые позволяют корректировать параметры стратегии в зависимости от различных рыночных условий.
  2. Добавление объемов трафика, повышение надежности сигнала.
  3. Разработка адаптивных механизмов сдерживания, позволяющих корректировать уровень сдерживания в зависимости от динамики рынка.
  4. Интеграция с другими техническими показателями для обеспечения подтверждения сигнала.
  5. Осуществление динамического управления позициями, корректировка размеров сделок в соответствии с рыночными рисками.

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

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

Исходный код стратегии
/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-31 23:59:59
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Multi-Step Vegas SuperTrend - strategy [presentTrading]", shorttitle="Multi-Step Vegas SuperTrend - strategy [presentTrading]", overlay=true, precision=3, commission_value=0.1, commission_type=strategy.commission.percent, slippage=1, currency=currency.USD)

// Input settings allow the user to customize the strategy's parameters.
tradeDirectionChoice = input.string(title="Trade Direction", defval="Both", options=["Long", "Short", "Both"]) // Option to select the trading direction
atrPeriod = input(10, "ATR Period for SuperTrend") // Length of the ATR for volatility measurement
vegasWindow = input(100, "Vegas Window Length") // Length of the moving average for the Vegas Channel
superTrendMultiplier = input(5, "SuperTrend Multiplier Base") // Base multiplier for the SuperTrend calculation
volatilityAdjustment = input.float(5, "Volatility Adjustment Factor") // Factor to adjust the SuperTrend sensitivity to the Vegas Channel width

// User inputs for take profit settings
useTakeProfit = input.bool(true, title="Use Take Profit", group="Take Profit Settings")
takeProfitPercent1 = input.float(3.0, title="Take Profit % Step 1", group="Take Profit Settings")
takeProfitPercent2 = input.float(6.0, title="Take Profit % Step 2", group="Take Profit Settings")
takeProfitPercent3 = input.float(12.0, title="Take Profit % Step 3", group="Take Profit Settings")
takeProfitPercent4 = input.float(21.0, title="Take Profit % Step 4", group="Take Profit Settings")

takeProfitAmount1 = input.float(25, title="Take Profit Amount % Step 1", group="Take Profit Settings")
takeProfitAmount2 = input.float(20, title="Take Profit Amount % Step 2", group="Take Profit Settings")
takeProfitAmount3 = input.float(10, title="Take Profit Amount % Step 3", group="Take Profit Settings")
takeProfitAmount4 = input.float(15, title="Take Profit Amount % Step 4", group="Take Profit Settings")

numberOfSteps = input.int(4, title="Number of Take Profit Steps", minval=1, maxval=4, group="Take Profit Settings")

// Calculate the Vegas Channel using a simple moving average and standard deviation.
vegasMovingAverage = ta.sma(close, vegasWindow)
vegasChannelStdDev = ta.stdev(close, vegasWindow)
vegasChannelUpper = vegasMovingAverage + vegasChannelStdDev
vegasChannelLower = vegasMovingAverage - vegasChannelStdDev

// Adjust the SuperTrend multiplier based on the width of the Vegas Channel.
channelVolatilityWidth = vegasChannelUpper - vegasChannelLower
adjustedMultiplier = superTrendMultiplier + volatilityAdjustment * (channelVolatilityWidth / vegasMovingAverage)

// Calculate the SuperTrend indicator values.
averageTrueRange = ta.atr(atrPeriod)
superTrendUpper = hlc3 - (adjustedMultiplier * averageTrueRange)
superTrendLower = hlc3 + (adjustedMultiplier * averageTrueRange)
var float superTrendPrevUpper = na
var float superTrendPrevLower = na
var int marketTrend = 1

// Update SuperTrend values and determine the current trend direction.
superTrendPrevUpper := nz(superTrendPrevUpper[1], superTrendUpper)
superTrendPrevLower := nz(superTrendPrevLower[1], superTrendLower)
marketTrend := close > superTrendPrevLower ? 1 : close < superTrendPrevUpper ? -1 : nz(marketTrend[1], 1)
superTrendUpper := marketTrend == 1 ? math.max(superTrendUpper, superTrendPrevUpper) : superTrendUpper
superTrendLower := marketTrend == -1 ? math.min(superTrendLower, superTrendPrevLower) : superTrendLower
superTrendPrevUpper := superTrendUpper
superTrendPrevLower := superTrendLower

// Enhanced Visualization
// Plot the SuperTrend and Vegas Channel for visual analysis.
plot(marketTrend == 1 ? superTrendUpper : na, "SuperTrend Upper", color=color.green, linewidth=2)
plot(marketTrend == -1 ? superTrendLower : na, "SuperTrend Lower", color=color.red, linewidth=2)
plot(vegasChannelUpper, "Vegas Upper", color=color.purple, linewidth=1)
plot(vegasChannelLower, "Vegas Lower", color=color.purple, linewidth=1)

// Apply a color to the price bars based on the current market trend.
barcolor(marketTrend == 1 ? color.green : marketTrend == -1 ? color.red : na)

// Detect trend direction changes and plot entry/exit signals.
trendShiftToBullish = marketTrend == 1 and marketTrend[1] == -1
trendShiftToBearish = marketTrend == -1 and marketTrend[1] == 1

plotshape(series=trendShiftToBullish, title="Enter Long", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(series=trendShiftToBearish, title="Enter Short", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")

// Define conditions for entering long or short positions, and execute trades based on these conditions.
enterLongCondition = marketTrend == 1
enterShortCondition = marketTrend == -1

// Check trade direction choice before executing trade entries.
if enterLongCondition and (tradeDirectionChoice == "Long" or tradeDirectionChoice == "Both")
    strategy.entry("Long Position", strategy.long)

if enterShortCondition and (tradeDirectionChoice == "Short" or tradeDirectionChoice == "Both")
    strategy.entry("Short Position", strategy.short)

// Close all positions when the market trend changes.
if marketTrend != marketTrend[1]
    strategy.close_all()

// Multi-Stage Take Profit Logic
if (strategy.position_size > 0)
    entryPrice = strategy.opentrades.entry_price(strategy.opentrades - 1)
    if numberOfSteps >= 1
        strategy.exit("Take Profit 1", from_entry="Long Position", qty_percent=takeProfitAmount1, limit=entryPrice * (1 + takeProfitPercent1 / 100))
    if numberOfSteps >= 2
        strategy.exit("Take Profit 2", from_entry="Long Position", qty_percent=takeProfitAmount2, limit=entryPrice * (1 + takeProfitPercent2 / 100))
    if numberOfSteps >= 3
        strategy.exit("Take Profit 3", from_entry="Long Position", qty_percent=takeProfitAmount3, limit=entryPrice * (1 + takeProfitPercent3 / 100))
    if numberOfSteps >= 4
        strategy.exit("Take Profit 4", from_entry="Long Position", qty_percent=takeProfitAmount4, limit=entryPrice * (1 + takeProfitPercent4 / 100))

if (strategy.position_size < 0)
    entryPrice = strategy.opentrades.entry_price(strategy.opentrades - 1)
    if numberOfSteps >= 1
        strategy.exit("Take Profit 1", from_entry="Short Position", qty_percent=takeProfitAmount1, limit=entryPrice * (1 - takeProfitPercent1 / 100))
    if numberOfSteps >= 2
        strategy.exit("Take Profit 2", from_entry="Short Position", qty_percent=takeProfitAmount2, limit=entryPrice * (1 - takeProfitPercent2 / 100))
    if numberOfSteps >= 3
        strategy.exit("Take Profit 3", from_entry="Short Position", qty_percent=takeProfitAmount3, limit=entryPrice * (1 - takeProfitPercent3 / 100))
    if numberOfSteps >= 4
        strategy.exit("Take Profit 4", from_entry="Short Position", qty_percent=takeProfitAmount4, limit=entryPrice * (1 - takeProfitPercent4 / 100))