Sumber dimuat naik... memuat...

Strategi Dagangan Dinamis Beradaptasi Indikator Multi-Teknik (MTDAT)

Penulis:ChaoZhang, Tarikh: 2024-11-29 14:54:57
Tag:MACDRSIBBATRSMASD

img

Ringkasan

Strategi ini adalah sistem dagangan komprehensif berdasarkan pelbagai penunjuk teknikal, menggabungkan MACD, RSI, Bollinger Bands, dan ATR untuk menangkap kedua-dua peluang trend dan pembalikan. Strategi ini menggunakan mekanisme stop-loss dan mengambil keuntungan yang dinamik, menyesuaikan parameter dagangan mengikut turun naik pasaran sambil mengawal risiko dengan berkesan. Hasil pengujian belakang menunjukkan pulangan 676.27% selama tempoh ujian tiga bulan, menunjukkan kesesuaian pasaran yang baik.

Prinsip Strategi

Strategi ini menggunakan sistem pengesahan penunjuk teknikal pelbagai lapisan, termasuk:

  1. MACD ((12,26,9) untuk menangkap isyarat perubahan momentum, menjana isyarat beli apabila garis MACD melintasi di atas garis isyarat dan isyarat jual apabila melintasi di bawah
  2. RSI(14) sebagai penapis sekunder, dengan bacaan di bawah 35 dianggap terlalu terjual dan di atas 65 terlalu dibeli
  3. Bollinger Bands ((20,2) untuk mengenal pasti julat turun naik harga, mempertimbangkan pembelian pada sentuhan band bawah dan menjual pada sentuhan band atas
  4. ATR untuk penentuan sasaran stop loss dan keuntungan dinamik, dengan stop loss pada 3x ATR dan sasaran keuntungan pada 5x ATR

Logik perdagangan menggabungkan kedua-dua strategi perdagangan trend dan pembalikan, meningkatkan ketepatan melalui pelbagai pengesahan. Sistem secara automatik menyesuaikan tahap stop-loss dan keuntungan berdasarkan turun naik pasaran masa nyata, mengoptimumkan pengurusan risiko secara dinamik.

Kelebihan Strategi

  1. Sistem pengesahan isyarat berbilang dimensi meningkatkan kebolehpercayaan perdagangan
  2. Skim stop loss dan mengambil keuntungan dinamik disesuaikan dengan keadaan pasaran yang berbeza
  3. Menggabungkan pendekatan perdagangan trend dan pembalikan, meningkatkan peluang perdagangan
  4. Sistem pengurusan risiko automatik mengurangkan kesilapan penilaian manusia
  5. Kadar kemenangan 53.99% dan faktor keuntungan 1.44 menunjukkan kestabilan strategi
  6. Strategi menyokong amaran perdagangan masa nyata untuk operasi yang mudah

Risiko Strategi

  1. Pelbagai penunjuk boleh menyebabkan kelewatan isyarat, peluang yang hilang di pasaran pantas
  2. 56.33% penggunaan maksimum memerlukan toleransi risiko yang signifikan
  3. Perdagangan yang kerap boleh menimbulkan kos transaksi yang tinggi
  4. Strategi boleh menghadapi risiko yang besar di pasaran yang sangat tidak menentu

Cadangan Kawalan Risiko:

  • Pelaksanaan pelan pengurusan wang yang ketat
  • Ujian semula dan pelarasan parameter secara berkala
  • Hentikan perdagangan semasa siaran berita utama
  • Tetapkan had kerugian maksimum harian

Arahan Pengoptimuman Strategi

  1. Pengoptimuman Parameter:

    • Pertimbangkan untuk menggunakan parameter penunjuk tempoh penyesuaian
    • Mengoptimumkan tetapan pengganda ATR untuk meningkatkan nisbah risiko-balasan
  2. Penambahbaikan Sistem Isyarat:

    • Tambah pengesahan penunjuk jumlah
    • Menggabungkan penunjuk sentimen pasaran
  3. Peningkatan Pengurusan Risiko:

    • Melaksanakan saiz kedudukan dinamik
    • Tambah penapis berasaskan masa
  4. Penambahbaikan Teknikal:

    • Tambah penapis turun naik pasaran
    • Mengoptimumkan masa masuk dan keluar

Ringkasan

Strategi ini mencapai hasil perdagangan yang baik melalui gabungan pelbagai penunjuk teknikal dan sistem pengurusan risiko dinamik. Walaupun terdapat risiko penarikan, strategi ini menunjukkan kemampuan beradaptasi dan kestabilan pasaran yang baik melalui kawalan risiko yang ketat dan pengoptimuman berterusan.


/*backtest
start: 2024-11-21 00:00:00
end: 2024-11-28 00:00:00
period: 15m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("XAUUSD STRATEGY 10MIN", overlay=true)

// Spread Adjustment (38-point spread)
spread = 38 * syminfo.mintick       

// MACD Calculation
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)
macdBuy = ta.crossover(macdLine, signalLine)
macdSell = ta.crossunder(macdLine, signalLine)

// RSI Calculation
rsi = ta.rsi(close, 14)
rsiOverbought = rsi > 65
rsiOversold = rsi < 35

// Bollinger Bands Calculation
basis = ta.sma(close, 20)
dev = 2 * ta.stdev(close, 20)
upperBand = basis + dev
lowerBand = basis - dev

// ATR Calculation for Volatility-Based Stop Loss and Take Profit
atr = ta.atr(14)
stopLoss = 3 * atr
takeProfit = 5 * atr

// Variables to track entry price and line
var line entryLine = na
var int tradeNumber = 0
var string tradeType = ""
var string tradeSignalComment = ""

// Buy Condition
buyCondition = (macdBuy or rsiOversold or close < lowerBand)

// Sell Condition
sellCondition = (macdSell or rsiOverbought or close > upperBand)

// Strategy Entry and Alerts
if (buyCondition and strategy.opentrades == 0)  // Open a new buy trade
    // Remove the previous entry line if it exists
    // if not na(entryLine)
    //     line.delete(entryLine)
    
    // Adjust the entry price by adding the spread (ask price)
    buyPrice = close + spread

    // Enter a new buy trade at the ask price, and close it with the bid price
    strategy.entry("Buy", strategy.long, stop=buyPrice - stopLoss, limit=buyPrice + takeProfit, comment="Enter buy $" + str.tostring(buyPrice))
    tradeNumber := tradeNumber + 1  // Increment trade number
    tradeType := "Entry Long"
    tradeSignalComment := "Enter buy trade"
    
    // Plot new dotted entry line for the current trade
    // entryLine := line.new(bar_index, buyPrice, bar_index + 50, buyPrice, width=1, color=color.green, style=line.style_dotted)
    
    // Send alert for the buy entry
    alert("Trade No: " + str.tostring(tradeNumber) + "\n" +
          "Signal: " + tradeType + " - " + tradeSignalComment + "\n" +
          "Date/Time: " + str.format("{0,date,dd-MM-yyyy HH:mm}", time) + "\n" +
          "Price: " + str.tostring(buyPrice), alert.freq_once_per_bar_close)

if (sellCondition and strategy.opentrades == 0)  // Open a new sell trade
    // Remove the previous entry line if it exists
    // if not na(entryLine)
    //     line.delete(entryLine)
    
    // Adjust the entry price by subtracting the spread (bid price)
    sellPrice = close - spread

    // Enter a new sell trade at the bid price, and close it with the ask price
    strategy.entry("Sell", strategy.short, stop=sellPrice + stopLoss, limit=sellPrice - takeProfit, comment="Enter sell $" + str.tostring(sellPrice))
    tradeNumber := tradeNumber + 1  // Increment trade number
    tradeType := "Entry Short"
    tradeSignalComment := "Enter sell trade"
    
    // Plot new dotted entry line for the current trade
    // entryLine := line.new(bar_index, sellPrice, bar_index + 50, sellPrice, width=1, color=color.red, style=line.style_dotted)
    
    // Send alert for the sell entry
    alert("Trade No: " + str.tostring(tradeNumber) + "\n" +
          "Signal: " + tradeType + " - " + tradeSignalComment + "\n" +
          "Date/Time: " + str.format("{0,date,dd-MM-yyyy HH:mm}", time) + "\n" +
          "Price: " + str.tostring(sellPrice), alert.freq_once_per_bar_close)

// Exit conditions and alerts
if (strategy.position_size > 0 and sellCondition)  // Close buy when sell conditions met
    // Adjust the exit price by subtracting the spread (bid price)
    exitPrice = close - spread
    strategy.close("Buy", comment="Exit buy $" + str.tostring(exitPrice))
    
    // Remove the entry line when the trade is closed
    // if not na(entryLine)
    //     line.delete(entryLine)
    
    // Send alert for the buy exit
    tradeType := "Exit Long"
    tradeSignalComment := "Exit buy trade"
    alert("Trade No: " + str.tostring(tradeNumber) + "\n" +
          "Signal: " + tradeType + " - "  + tradeSignalComment + "\n" +
          "Date/Time: " + str.format("{0,date,dd-MM-yyyy HH:mm}", time) + "\n" +
          "Price: " + str.tostring(exitPrice), alert.freq_once_per_bar_close)

if (strategy.position_size < 0 and buyCondition)  // Close sell when buy conditions met
    // Adjust the exit price by adding the spread (ask price)
    exitPrice = close + spread
    strategy.close("Sell", comment="Exit sell $" + str.tostring(exitPrice))
    
    // Remove the entry line when the trade is closed
    // if not na(entryLine)
    //     line.delete(entryLine)
    
    // Send alert for the sell exit
    tradeType := "Exit Short"
    tradeSignalComment := "Exit sell trade"
    alert("Trade No: " + str.tostring(tradeNumber) + "\n" +
          "Signal: " + tradeType + " - " + tradeSignalComment + "\n" +
          "Date/Time: " + str.format("{0,date,dd-MM-yyyy HH:mm}", time) + "\n" +
          "Price: " + str.tostring(exitPrice), alert.freq_once_per_bar_close)

// Plot Indicators
plot(upperBand, title="Upper Bollinger Band", color=color.blue)
plot(lowerBand, title="Lower Bollinger Band", color=color.blue)


Berkaitan

Lebih lanjut