Strategi Supertrend Dinamik Penyesuaian Pelbagai Langkah

ATR SMA STD TP
Tarikh penciptaan: 2024-11-29 16:57:19 Akhirnya diubah suai: 2024-11-29 16:57:19
Salin: 0 Bilangan klik: 439
1
fokus pada
1617
Pengikut

Strategi Supertrend Dinamik Penyesuaian Pelbagai Langkah

Gambaran keseluruhan

Strategi Supertrend Dinamik dengan Kadar Fluktuasi Berbilang Langkah adalah sistem perdagangan inovatif yang menggabungkan saluran Vegas dan petunjuk SuperTrend. Strategi ini unik kerana keupayaannya untuk menyesuaikan diri secara dinamik dengan turun naik pasaran, dan menggunakan mekanisme penangguhan pelbagai langkah untuk mengoptimumkan nisbah keuntungan risiko. Strategi ini menyediakan isyarat perdagangan yang lebih tepat dengan menggabungkan analisis fluktuasi saluran Vegas dengan ciri penjejakan trend SuperTrend, yang secara automatik menyesuaikan parameternya apabila keadaan pasaran berubah.

Prinsip Strategi

Strategi ini beroperasi berdasarkan tiga komponen utama: Pengiraan saluran Vegas, pengesanan trend dan mekanisme hentian pelbagai langkah. Saluran Vegas menggunakan purata bergerak sederhana (SMA) dan perbezaan piawai (STD) untuk menentukan ruang pergerakan harga, dan indikator SuperTrend menentukan arah trend berdasarkan nilai ATR yang disesuaikan. Apabila trend pasaran berubah, sistem akan menghasilkan isyarat perdagangan.

Kelebihan Strategik

  1. Kebolehan beradaptasi secara dinamik: Strategi dapat menyesuaikan diri secara automatik dengan keadaan pasaran yang berbeza melalui faktor penyesuaian kadar turun naik.
  2. Pengurusan risiko: Mekanisme penangguhan pelbagai langkah menyediakan penyelesaian yang sistematik dan menguntungkan.
  3. Kemudahan penyesuaian: Berbagai pilihan tetapan parameter disediakan untuk memenuhi gaya dagangan yang berbeza.
  4. Pencapaian pasaran yang menyeluruh: Membantu perdagangan dua hala multi-saluran.
  5. Maklum balas visual: menyediakan antara muka grafik yang jelas untuk analisis dan keputusan.

Risiko Strategik

  1. Sensitiviti parameter: Kombinasi parameter yang berbeza boleh menyebabkan perbezaan dalam prestasi strategi.
  2. Ketinggalan: Indikator berdasarkan purata bergerak mempunyai ketinggalan tertentu.
  3. Risiko penembusan palsu: Mungkin memberi isyarat yang salah dalam pasaran horizontal.
  4. Penangguhan setinggan: Penangguhan terlalu awal mungkin terlepas trend besar, penangguhan terlalu lewat mungkin kehilangan keuntungan.

Arah pengoptimuman strategi

  1. Memperkenalkan penapis persekitaran pasaran untuk menyesuaikan parameter strategi dalam keadaan pasaran yang berbeza.
  2. Menambah analisis lalu lintas dan meningkatkan kebolehpercayaan isyarat.
  3. Membangunkan mekanisme penangguhan yang menyesuaikan diri untuk menyesuaikan tahap penangguhan mengikut pergerakan pasaran.
  4. Mengintegrasikan petunjuk teknikal lain untuk memberikan pengesahan isyarat.
  5. Menerapkan pengurusan kedudukan dinamik, menyesuaikan saiz perdagangan mengikut risiko pasaran.

ringkaskan

Strategi overtrend dinamik beradaptasi dengan kadar turun naik berbilang langkah mewakili kaedah perdagangan kuantitatif yang canggih yang menyediakan pedagang dengan sistem perdagangan yang komprehensif dengan menggabungkan pelbagai petunjuk teknikal dan mekanisme penangguhan yang inovatif. Kebolehpasaran dinamik dan fungsi pengurusan risiko menjadikannya sangat sesuai untuk beroperasi dalam pelbagai persekitaran pasaran, dan mempunyai ruang skalabiliti dan pengoptimuman yang baik. Dengan penambahbaikan dan pengoptimuman berterusan, strategi ini dijangka memberikan prestasi perdagangan yang lebih stabil pada masa akan datang.

Kod 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))