Sumber dimuat naik... memuat...

Strategi SuperTrend Dinamik Berbilang Langkah yang Disesuaikan dengan Volatiliti

Penulis:ChaoZhang, Tarikh: 2024-11-29 16:57:19
Tag:ATRSMAPenyakit STDTP

img

Ringkasan

Multi-Step Volatility-Adjusted Dynamic SuperTrend Strategy adalah sistem perdagangan inovatif yang menggabungkan penunjuk Saluran Vegas dan SuperTrend. Keunikan strategi ini terletak pada keupayaannya untuk menyesuaikan diri secara dinamik dengan turun naik pasaran dan mekanisme mengambil keuntungan pelbagai langkah untuk mengoptimumkan nisbah risiko-balasan. Dengan menggabungkan analisis turun naik Saluran Vegas dengan keupayaan mengikuti trend SuperTrend, strategi itu secara automatik menyesuaikan parameternya apabila keadaan pasaran berubah, memberikan isyarat perdagangan yang lebih tepat.

Prinsip Strategi

Strategi ini beroperasi pada tiga komponen utama: pengiraan Saluran Vegas, pengesanan trend, dan mekanisme mengambil keuntungan pelbagai langkah. Saluran Vegas menggunakan Purata Bergerak Sederhana (SMA) dan Penyimpangan Standar (STD) untuk menentukan julat turun naik harga, sementara penunjuk SuperTrend menentukan arah trend berdasarkan nilai ATR yang disesuaikan. Isyarat perdagangan dihasilkan apabila trend pasaran berubah. Mekanisme mengambil keuntungan pelbagai langkah membolehkan keluar separa pada tahap harga yang berbeza, satu kaedah yang mengunci keuntungan dan membolehkan kedudukan yang tersisa untuk menangkap potensi keuntungan. Keunikan strategi terletak pada faktor penyesuaian turun naiknya, yang secara dinamik menyesuaikan pengganda SuperTrend berdasarkan lebar Saluran Vegas.

Kelebihan Strategi

  1. Kebolehsesuaian Dinamis: Strategi itu menyesuaikan diri secara automatik dengan keadaan pasaran yang berbeza melalui faktor penyesuaian turun naik.
  2. Pengurusan Risiko: Mekanisme mengambil keuntungan pelbagai langkah menyediakan pendekatan yang sistematik untuk merealisasikan keuntungan.
  3. Kebolehsesuaian: Menawarkan pelbagai tetapan parameter untuk menampung gaya perdagangan yang berbeza.
  4. Liputan pasaran yang komprehensif: Menyokong perdagangan panjang dan pendek.
  5. Umpan Balik Visual: Menyediakan antara muka grafik yang jelas untuk analisis dan pengambilan keputusan.

Risiko Strategi

  1. Sensitiviti Parameter: Gabungan parameter yang berbeza boleh menyebabkan variasi prestasi yang ketara.
  2. Lag: Penunjuk berdasarkan purata bergerak mempunyai lag semulajadi.
  3. Risiko pecah palsu: Boleh menghasilkan isyarat palsu di pasaran yang berbeza.
  4. Perdagangan Keuntungan: Keuntungan awal mungkin terlepas daripada trend utama, keuntungan lewat berisiko kehilangan keuntungan terkumpul.

Arahan Pengoptimuman Strategi

  1. Memperkenalkan penapis persekitaran pasaran untuk menyesuaikan parameter strategi di bawah keadaan pasaran yang berbeza.
  2. Tambah analisis jumlah untuk meningkatkan kebolehpercayaan isyarat.
  3. Membangunkan mekanisme mengambil keuntungan yang beradaptasi yang menyesuaikan tahap keuntungan secara dinamik berdasarkan turun naik pasaran.
  4. Mengintegrasikan penunjuk teknikal tambahan untuk pengesahan isyarat.
  5. Melaksanakan saiz kedudukan dinamik berdasarkan risiko pasaran.

Ringkasan

Multi-Step Volatility-Adjusted Dynamic SuperTrend Strategy mewakili pendekatan perdagangan kuantitatif yang maju, menggabungkan pelbagai penunjuk teknikal dan mekanisme mengambil keuntungan inovatif untuk menyediakan pedagang dengan sistem perdagangan yang komprehensif. Kebolehsesuaian dinamik dan ciri pengurusan risiko menjadikannya sangat sesuai untuk operasi dalam pelbagai persekitaran pasaran, dengan skalabiliti dan potensi pengoptimuman yang baik. Melalui peningkatan dan pengoptimuman berterusan, strategi menunjukkan janji untuk memberikan prestasi perdagangan yang lebih stabil pada masa akan datang.


/*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))


Berkaitan

Lebih lanjut