Sumber daya yang dimuat... Pemuatan...

Dual Moving Average Cross RSI Momentum Strategy dengan Sistem Optimasi Risiko-Reward

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

img

Gambaran umum

Ini adalah strategi perdagangan kuantitatif yang menggabungkan dua crossover rata-rata bergerak, kondisi overbought / oversold RSI, dan manajemen rasio risiko-imbalan. Strategi ini menentukan arah tren pasar melalui crossover rata-rata bergerak jangka pendek dan jangka panjang sambil menggunakan indikator RSI untuk mengidentifikasi zona overbought / oversold untuk penyaringan sinyal perdagangan yang lebih tepat.

Prinsip Strategi

Strategi ini menggunakan rata-rata bergerak 9 hari dan 21 hari sebagai dasar untuk penentuan tren, dengan indikator RSI zona overbought/oversold (35/65) untuk konfirmasi sinyal. Kondisi entri panjang membutuhkan MA jangka pendek di atas MA jangka panjang dan RSI di wilayah overbought (di bawah 35); entri pendek membutuhkan MA jangka pendek di bawah MA jangka panjang dan RSI di wilayah overbought (di atas 65). Strategi ini menggunakan 1,5 kali nilai ATR untuk jarak stop-loss dan secara otomatis menghitung target keuntungan berdasarkan rasio risiko-balasan 2: 1. Untuk mencegah overtrading, periode pemegang minimal 3 jam diterapkan.

Keuntungan Strategi

  1. Mekanisme konfirmasi beberapa sinyal secara signifikan meningkatkan keandalan perdagangan
  2. Pengaturan stop loss dinamis beradaptasi dengan volatilitas pasar
  3. Bantuan rasio risiko-manfaat tetap dalam profitabilitas stabil jangka panjang
  4. Periode penyimpanan minimum secara efektif mencegah overtrading
  5. Sistem penandaan visual memfasilitasi pemantauan strategi dan analisis backtest
  6. Perubahan warna latar belakang secara intuitif menampilkan status posisi saat ini

Risiko Strategi

  1. Sistem MA ganda dapat menghasilkan sinyal palsu di pasar yang berbeda
  2. Indikator RSI mungkin kehilangan peluang perdagangan dalam tren yang kuat
  3. Rasio risiko-manfaat tetap mungkin kurang fleksibel dalam kondisi pasar tertentu
  4. Penghentian ATR mungkin tidak merespons dengan cukup cepat terhadap lonjakan volatilitas
  5. Periode pemegang minimum dapat menyebabkan peluang stop loss yang hilang

Arah Optimasi Strategi

  1. Memperkenalkan pilihan periode rata-rata bergerak adaptif berdasarkan kondisi pasar
  2. Tambahkan filter kekuatan tren untuk meningkatkan kualitas sinyal
  3. Mengembangkan sistem penyesuaian rasio risiko-manfaat yang dinamis untuk lingkungan pasar yang berbeda
  4. Mengintegrasikan indikator volume untuk meningkatkan keandalan sinyal
  5. Tambahkan modul analisis volatilitas pasar untuk mengoptimalkan waktu perdagangan
  6. Mengintegrasikan algoritma pembelajaran mesin untuk optimasi parameter

Ringkasan

Strategi ini membangun sistem perdagangan yang relatif lengkap melalui koordinasi beberapa indikator teknis. Ini berfokus tidak hanya pada kualitas sinyal masuk tetapi juga pada manajemen risiko dan penetapan target keuntungan. Meskipun ada area untuk optimasi, desain kerangka keseluruhan wajar dengan nilai praktis yang baik dan ruang untuk perluasan. Desain modular juga memberikan kenyamanan untuk optimasi 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 banyak