Strategi Dagangan Adaptif Dinamik Penunjuk Berbilang Teknikal (MTDAT)

MACD RSI BB ATR SMA SD
Tarikh penciptaan: 2024-11-29 14:54:57 Akhirnya diubah suai: 2024-11-29 14:54:57
Salin: 0 Bilangan klik: 506
1
fokus pada
1617
Pengikut

Strategi Dagangan Adaptif Dinamik Penunjuk Berbilang Teknikal (MTDAT)

Gambaran keseluruhan

Strategi ini adalah sistem perdagangan komprehensif berdasarkan pelbagai petunjuk teknikal, yang menangkap trend pasaran dan peluang pembalikan dengan menggabungkan beberapa petunjuk teknikal seperti MACD, RSI, Brin Belt dan ATR. Strategi ini menggunakan skema berhenti dan keuntungan yang dinamik, yang dapat menyesuaikan parameter perdagangan mengikut turun naik pasaran, dan mengawal risiko dengan berkesan sambil menjamin keuntungan. Hasil tinjauan semula menunjukkan bahawa strategi ini mencapai kadar keuntungan 676.27% semasa ujian tiga bulan terakhir, menunjukkan kebolehpasaran pasaran yang baik.

Prinsip Strategi

Strategi ini menggunakan sistem pengesahan indikator teknikal berlapis, termasuk:

  1. MACD ((12,26,9) digunakan untuk menangkap isyarat peralihan kuantiti, menghasilkan isyarat beli apabila MACD melintasi garis isyarat, menghasilkan isyarat jual apabila melintasi garis isyarat
  2. RSI ((14) sebagai penapis sekunder, di bawah 35 dianggap sebagai kawasan oversold, di atas 65 dianggap sebagai kawasan overbought
  3. Blink band ((20,2) digunakan untuk mengenal pasti kawasan pergerakan harga, mempertimbangkan untuk membeli apabila harga menyentuh rel bawah, mempertimbangkan untuk menjual apabila ia menyentuh rel atas
  4. ATR digunakan untuk menetapkan tahap stop loss dan profit secara dinamik, dengan stop loss ditetapkan 3 kali ATR, dan profit sasaran ditetapkan 5 kali ATR

Logik dagangan menggabungkan strategi trend-following dan perdagangan reverse untuk meningkatkan ketepatan dagangan melalui pengesahan berganda. Sistem ini secara automatik menyesuaikan tahap stop loss dan keuntungan berdasarkan turun naik pasaran dalam masa nyata, untuk mencapai pengoptimuman dinamik pengurusan risiko.

Kelebihan Strategik

  1. Sistem pengesahan isyarat berbilang dimensi meningkatkan kebolehpercayaan transaksi
  2. Skema Stop Loss Profit Dinamik Sesuai Dengan Keadaan Pasaran Berbeza
  3. Mengintegrasikan pemikiran perdagangan trend dan reversal untuk meningkatkan peluang perdagangan
  4. Sistem pengurusan risiko automatik mengurangkan kesalahan pertimbangan manusia
  5. Kemenangan 53.99% dan faktor keuntungan 1.44 menunjukkan strategi yang stabil
  6. Strategi menyokong peringatan dagangan dalam masa nyata untuk memudahkan pedagang

Risiko Strategik

  1. Multiple indicators boleh menyebabkan isyarat terlewat, kehilangan peluang dalam pasaran yang cepat
  2. Kadar pengeluaran maksimum 56.33% memerlukan ketahanan risiko yang lebih tinggi
  3. Perdagangan yang kerap mungkin membawa kepada kos yang lebih tinggi
  4. Strategi mungkin menghadapi risiko yang lebih besar dalam pasaran yang bergolak

Cadangan kawalan risiko:

  • Menjalankan pelan pengurusan dana yang ketat
  • Semak dan ubah parameter secara berkala
  • Penangguhan perdagangan semasa data penting diumumkan
  • Tetapkan had kerugian maksimum setiap hari

Arah pengoptimuman strategi

  1. Optimasi parameter:

    • Parameter penunjuk untuk dipertimbangkan menggunakan kitaran penyesuaian
    • Mengoptimumkan penyetempatan ATR untuk meningkatkan risiko dan ganjaran
  2. Peningkatan sistem isyarat:

    • Tambahkan pengesahan metrik penukaran
    • Pengenalan penunjuk sentimen pasaran
  3. Pengoptimuman Pengurusan Risiko:

    • Realisasikan pengurusan jawatan yang dinamik
    • Menambah penapis masa
  4. Peningkatan teknologi:

    • Menambah penapis kadar turun naik pasaran
    • Optimumkan penghakiman masa masuk dan keluar

ringkaskan

Strategi ini mencapai kesan perdagangan yang lebih baik melalui gabungan pelbagai petunjuk teknikal dan sistem pengurusan risiko yang dinamik. Walaupun terdapat risiko penarikan balik tertentu, strategi ini menunjukkan adaptasi dan kestabilan pasaran yang baik melalui kawalan risiko yang ketat dan pengoptimuman berterusan.

Kod sumber strategi
/*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)