Sumber dimuat naik... memuat...

Dual Moving Average Cross RSI Momentum Strategy dengan Sistem Pengoptimuman Risiko-Penghargaan

Penulis:ChaoZhang, Tarikh: 2024-11-12 16:00:58
Tag:SMARSIATRRR

img

Ringkasan

Ini adalah strategi perdagangan kuantitatif yang menggabungkan dua persimpangan purata bergerak, keadaan overbought / oversold RSI, dan pengurusan nisbah risiko-balasan. Strategi menentukan arah trend pasaran melalui persimpangan purata bergerak jangka pendek dan jangka panjang sambil menggunakan penunjuk RSI untuk mengenal pasti zon overbought / oversold untuk penapisan isyarat perdagangan yang lebih tepat. Ia juga mengintegrasikan tetapan stop-loss dinamik berasaskan ATR dan sistem pengurusan sasaran keuntungan nisbah risiko-balasan tetap.

Prinsip Strategi

Strategi ini menggunakan purata bergerak 9 hari dan 21 hari sebagai asas untuk penentuan trend, dengan penunjuk RSI zon overbought / oversold (35/65) untuk pengesahan isyarat. Syarat kemasukan panjang memerlukan MA jangka pendek di atas MA jangka panjang dan RSI di wilayah yang terlalu banyak dijual (di bawah 35); kemasukan pendek memerlukan MA jangka pendek di bawah MA jangka panjang dan RSI di wilayah yang terlalu banyak dibeli (di atas 65). Strategi ini menggunakan 1.5 kali nilai jarak ATR untuk stop-loss dan secara automatik mengira sasaran keuntungan berdasarkan nisbah risiko-balasan 2: 1. Untuk mengelakkan overtrading, tempoh pegangan minimum 3 jam dilaksanakan.

Kelebihan Strategi

  1. Mekanisme pengesahan isyarat berbilang meningkatkan kebolehpercayaan perdagangan dengan ketara
  2. Tetapan stop-loss dinamik disesuaikan dengan turun naik pasaran
  3. Bantuan nisbah risiko-balasan tetap dalam keuntungan stabil jangka panjang
  4. Tempoh penyimpanan minimum berkesan menghalang perdagangan berlebihan
  5. Sistem penandaan visual memudahkan pemantauan strategi dan analisis backtest
  6. Perubahan warna latar belakang secara intuitif memaparkan status kedudukan semasa

Risiko Strategi

  1. Sistem MA berganda boleh menghasilkan isyarat palsu di pasaran yang berbeza
  2. Penunjuk RSI mungkin terlepas peluang perdagangan dalam trend yang kuat
  3. Nisbah risiko-balasan tetap mungkin kurang fleksibel dalam keadaan pasaran tertentu
  4. Hentian ATR mungkin tidak bertindak balas dengan cepat kepada lonjakan turun naik
  5. Tempoh pegangan minimum boleh menyebabkan peluang stop-loss yang hilang

Arahan Pengoptimuman Strategi

  1. Memperkenalkan pilihan tempoh purata bergerak adaptif berdasarkan keadaan pasaran
  2. Tambah penapis kekuatan trend untuk meningkatkan kualiti isyarat
  3. Membangunkan sistem penyesuaian nisbah risiko-balasan yang dinamik untuk persekitaran pasaran yang berbeza
  4. Mengintegrasikan penunjuk jumlah untuk meningkatkan kebolehpercayaan isyarat
  5. Tambah modul analisis turun naik pasaran untuk mengoptimumkan masa perdagangan
  6. Menggabungkan algoritma pembelajaran mesin untuk pengoptimuman parameter

Ringkasan

Strategi ini membina sistem dagangan yang agak lengkap melalui penyelarasan beberapa penunjuk teknikal. Ia tidak hanya memberi tumpuan kepada kualiti isyarat kemasukan tetapi juga pada pengurusan risiko dan penetapan sasaran keuntungan. Walaupun terdapat bidang untuk pengoptimuman, reka bentuk kerangka keseluruhan adalah munasabah dengan nilai praktikal yang baik dan ruang untuk pengembangan. Reka bentuk modular juga menyediakan kemudahan untuk pengoptimuman berikutnya.


/*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("JakeJohn", overlay=true)

// Input parameters
smaShortLength = input(9, title="Short SMA Length")
smaLongLength = input(21, title="Long SMA Length")
lengthRSI = input(14, title="RSI Length")
rsiOverbought = input(65, title="RSI Overbought Level")
rsiOversold = input(35, title="RSI Oversold Level")
riskRewardRatio = input(2, title="Risk/Reward Ratio") // 2:1
atrMultiplier = input(1.5, title="ATR Multiplier") // Multiplier for ATR to set stop loss

// Calculate indicators
smaShort = ta.sma(close, smaShortLength)
smaLong = ta.sma(close, smaLongLength)
rsi = ta.rsi(close, lengthRSI)
atr = ta.atr(14)

// Entry conditions
longCondition = (smaShort > smaLong) and (rsi < rsiOversold) // Buy when short SMA is above long SMA and RSI is oversold
shortCondition = (smaShort < smaLong) and (rsi > rsiOverbought) // Sell when short SMA is below long SMA and RSI is overbought

// Variables for trade management
var float entryPrice = na
var float takeProfit = na
var int entryBarIndex = na

// Entry logic for long trades
if (longCondition and (strategy.position_size == 0))
    entryPrice := close
    takeProfit := entryPrice + (entryPrice - (entryPrice - (atr * atrMultiplier))) * riskRewardRatio
    strategy.entry("Buy", strategy.long)
    entryBarIndex := bar_index // Record the entry bar index
    label.new(bar_index, high, "BUY", style=label.style_label_up, color=color.green, textcolor=color.white, size=size.small)

// Entry logic for short trades
if (shortCondition and (strategy.position_size == 0))
    entryPrice := close
    takeProfit := entryPrice - (entryPrice - (entryPrice + (atr * atrMultiplier))) * riskRewardRatio
    strategy.entry("Sell", strategy.short)
    entryBarIndex := bar_index // Record the entry bar index
    label.new(bar_index, low, "SELL", style=label.style_label_down, color=color.red, textcolor=color.white, size=size.small)

// Manage trade duration and exit after a minimum of 3 hours
if (strategy.position_size != 0)
    // Check if the trade has been open for at least 3 hours (180 minutes)
    if (bar_index - entryBarIndex >= 180) // 3 hours in 1-minute bars
        if (strategy.position_size > 0)
            strategy.exit("Take Profit Long", from_entry="Buy", limit=takeProfit)
        else
            strategy.exit("Take Profit Short", from_entry="Sell", limit=takeProfit)

// Background colors for active trades
var color tradeColor = na
if (strategy.position_size > 0)
    tradeColor := color.new(color.green, 90) // Light green for long trades
else if (strategy.position_size < 0)
    tradeColor := color.new(color.red, 90) // Light red for short trades
else
    tradeColor := na // No color when no trade is active

bgcolor(tradeColor, title="Trade Background")

// Plotting position tools
if (strategy.position_size > 0)
    // Plot long position tool
    strategy.exit("TP Long", limit=takeProfit)
    
if (strategy.position_size < 0)
    // Plot short position tool
    strategy.exit("TP Short", limit=takeProfit)

// Plotting indicators
plot(smaShort, color=color.green, title="Short SMA", linewidth=2)
plot(smaLong, color=color.red, title="Long SMA", linewidth=2)

// Visual enhancements for RSI
hline(rsiOverbought, "Overbought", color=color.red)
hline(rsiOversold, "Oversold", color=color.green)
plot(rsi, color=color.blue, title="RSI", linewidth=2)

// Ensure there's at least one plot function
plot(close, color=color.black, title="Close Price", display=display.none) // Hidden plot for compliance


Berkaitan

Lebih lanjut