Strategi Supertrend Dinamis Adaptif Volatilitas Multi-Langkah

ATR SMA STD TP
Tanggal Pembuatan: 2024-11-29 16:57:19 Akhirnya memodifikasi: 2024-11-29 16:57:19
menyalin: 0 Jumlah klik: 439
1
fokus pada
1617
Pengikut

Strategi Supertrend Dinamis Adaptif Volatilitas Multi-Langkah

Ringkasan

Strategi supertrend multi-stage volatility self-adapting dynamic is an innovative trading system that combines the Vegas channel and SuperTrend indicator. Strategi ini unik karena kemampuannya untuk secara dinamis beradaptasi dengan volatilitas pasar, dan menggunakan mekanisme stop-loss multi-stage untuk mengoptimalkan rasio risiko-to-reward. Strategi ini menawarkan sinyal perdagangan yang lebih akurat dengan menggabungkan analisis volatilitas Vegas channel dengan fitur trend tracking SuperTrend, yang secara otomatis menyesuaikan parameternya ketika kondisi pasar berubah.

Prinsip Strategi

Strategi ini didasarkan pada tiga komponen utama: perhitungan saluran Vegas, deteksi tren, dan mekanisme multi-tahap stop. Saluran Vegas menggunakan rata-rata bergerak sederhana (SMA) dan standard deviation (STD) untuk menentukan rentang fluktuasi harga. Indikator SuperTrend menentukan arah tren berdasarkan nilai ATR yang disesuaikan.

Keunggulan Strategis

  1. Adaptivitas dinamis: Strategi dapat secara otomatis beradaptasi dengan kondisi pasar yang berbeda melalui faktor penyesuaian volatilitas.
  2. Manajemen risiko: Sistem multi-step stop-loss memberikan solusi yang sistematis dan menguntungkan.
  3. Kustomisasi: Berbagai pilihan pengaturan parameter yang tersedia untuk memenuhi gaya perdagangan yang berbeda.
  4. Cakupan pasar yang komprehensif: Dukungan perdagangan dua arah multi-saluran.
  5. Umpan balik visual: memberikan antarmuka grafis yang jelas untuk membantu analisis dan pengambilan keputusan.

Risiko Strategis

  1. Sensitivitas parameter: Kombinasi parameter yang berbeda dapat menyebabkan perbedaan dalam kinerja strategi.
  2. Ketinggalan: Ada keterlambatan dalam indikator berdasarkan rata-rata bergerak.
  3. Risiko terobosan palsu: Mungkin ada sinyal yang salah di pasar horizontal.
  4. Stop loss setup trade-off: Stop loss yang terlalu cepat dapat melewatkan tren besar, dan stop loss yang terlalu lambat dapat kehilangan keuntungan.

Arah optimasi strategi

  1. Memperkenalkan filter lingkungan pasar untuk menyesuaikan parameter kebijakan dalam kondisi pasar yang berbeda.
  2. Meningkatkan analisis lalu lintas dan meningkatkan keandalan sinyal.
  3. Mengembangkan mekanisme penangguhan yang dapat disesuaikan, menyesuaikan tingkat penangguhan sesuai dengan pergerakan pasar.
  4. Terintegrasi dengan indikator teknis lainnya untuk memberikan konfirmasi sinyal.
  5. Menerapkan manajemen posisi dinamis, menyesuaikan skala perdagangan sesuai dengan risiko pasar.

Meringkaskan

Strategi overtrend dinamis dengan tingkat fluktuasi multi-tahap mewakili metode perdagangan kuantitatif yang canggih, yang menyediakan pedagang dengan sistem perdagangan yang komprehensif dengan menggabungkan beberapa indikator teknis dan mekanisme penghentian inovatif. Adaptasi dinamis dan fungsi manajemen risiko membuatnya sangat cocok untuk beroperasi di berbagai lingkungan pasar, dan memiliki ruang skalabilitas dan pengoptimalan yang baik. Dengan perbaikan dan pengoptimalan berkelanjutan, strategi ini diharapkan dapat memberikan kinerja perdagangan yang lebih stabil di masa depan.

Kode Sumber Strategi
/*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))