Strategi Adaptif Hibrida Kekuatan Relatif dan Rata-rata Pergerakan Ganda

EMA RSI RS
Tanggal Pembuatan: 2024-12-04 15:29:05 Akhirnya memodifikasi: 2024-12-04 15:29:05
menyalin: 0 Jumlah klik: 414
1
fokus pada
1617
Pengikut

Strategi Adaptif Hibrida Kekuatan Relatif dan Rata-rata Pergerakan Ganda

Ringkasan

Strategi ini adalah sistem perdagangan komprehensif yang menggabungkan sistem dua garis rata, analisis indikator relatif kuat dan lemah (RSI) dan kekuatan relatif (RS). Strategi ini mengkonfirmasi tren melalui konfirmasi silang rata-rata bergerak indeks pada tanggal 13 dan 21 (EMA), sekaligus mengkonfirmasi sinyal perdagangan yang menggabungkan RSI dan nilai RS relatif terhadap indeks acuan.

Prinsip Strategi

Strategi ini menggunakan mekanisme multiple signal confirmation:

  1. Sinyal masuk harus memenuhi persyaratan berikut:
    • EMA13 memakai EMA21 atau harga lebih tinggi dari EMA13
    • RSI lebih besar dari 60
    • Relatif intensitas (RS) adalah positif
  2. Kondisi untuk keluar termasuk:
    • Harga turun di bawah EMA21
    • RSI di bawah 50
    • RS berubah menjadi negatif
  3. Syarat untuk masuk kembali:
    • Harga di atas memakai EMA13 dan EMA13 lebih besar dari EMA21
    • RS tetap negatif
    • Atau harga mencapai puncaknya minggu lalu.

Keunggulan Strategis

  1. Mekanisme pengesahan sinyal ganda mengurangi risiko penembusan palsu
  2. Analisis intensitas relatif untuk memilih varietas yang kuat
  3. Adaptasi mekanisme penyesuaian siklus waktu
  4. Sistem pengendalian risiko yang baik
  5. Mekanisme masuk kembali yang cerdas
  6. Memberikan visualisasi status transaksi secara real-time

Risiko Strategis

  1. Pasar yang bergoyang dapat menyebabkan perdagangan yang sering terjadi
  2. Bergantung pada beberapa indikator dapat menyebabkan sinyal terlambat
  3. Nilai RSI tetap mungkin tidak cocok untuk semua kondisi pasar
  4. Akurasi perhitungan intensitas relatif bergantung pada indeks acuan
  5. Stop loss pada 52 minggu mungkin terlalu longgar

Arah optimasi strategi

  1. Masukkan ambang batas RSI yang disesuaikan
  2. Logika penilaian untuk optimalisasi persyaratan masuk kembali
  3. Menambahkan dimensi analisis volume transaksi
  4. Meningkatkan mekanisme stop profit dan stop loss
  5. Menambahkan filter tingkat fluktuasi
  6. Optimalkan siklus perhitungan intensitas relatif

Meringkaskan

Strategi ini membangun sistem perdagangan yang komprehensif dengan menggabungkan analisis teknis dan analisis intensitas relatif. Mekanisme konfirmasi sinyal ganda dan sistem kontrol risiko membuatnya sangat praktis. Dengan arah optimasi yang disarankan, strategi ini masih memiliki ruang untuk peningkatan lebih lanjut.

Kode Sumber Strategi
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-03 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("EMA 13 & 21 Entry Exit", overlay=true)

// Define the EMAs
ema13 = ta.ema(close, 13)
ema21 = ta.ema(close, 21)

// Define the RSI
rsi = ta.rsi(close, 14)

// Calculate the closing price relative to Nifty 50
//nifty50 = request.security("NSE:NIFTY", timeframe.period, close)
//closeRelative = close / nifty50

// Define a base period (e.g., 123) and adjust it based on the timeframe
//basePeriod = 123

// Calculate the effective period based on the timeframe
//effectivePeriod = basePeriod * (timeframe.isintraday ? (60 / timeframe.multiplier) : 1)

// Calculate the EMA
//rs = ta.ema(closeRelative, effectivePeriod)

// Define the Relative Strength with respect to NIFTY 50
nifty50 = request.security("swap", "D", close)
rs = ta.ema(close / nifty50, 55 )

// Define the previous 2-week low and last week's high
twoWeekLow = ta.lowest(low, 10)  // 10 trading days roughly equal to 2 weeks
lastWeekHigh = ta.highest(high, 5)  // 5 trading days roughly equal to 1 week
fiftytwoWeekhigh = ta.highest(high, 52*5) // 252 tradingdays roughly equal to 52 week.

// Long condition: EMA 21 crossing above EMA 55, price above EMA 21, RSI > 50, and RS > 0
longCondition = ta.crossover(ema13, ema21) or close > ema13 and rsi > 60 and rs > 0

// Exit condition: Price closing below EMA 55 or below the previous 2-week low
exitCondition = close < ema21 or rsi < 50 or rs < 0 //or close < fiftytwoWeekhigh*0.80

// Re-entry condition: Price crossing above EMA 21 after an exit, EMA 21 > EMA 55, and RS > 1
reEntryCondition = ta.crossover(close, ema13) and ema13 > ema21 and rs > 0

// Re-entry condition if trailing stop loss is hit: Price crossing above last week's high
reEntryAfterSL = ta.crossover(close, lastWeekHigh)

// Plot the EMAs
plot(ema13 ,color=color.green, title="EMA 13",linewidth = 2)
plot(ema21, color=color.red, title="EMA 21",linewidth = 2)


// Plot buy and sell signals
plotshape(series=longCondition, location=location.abovebar, color=color.rgb(50, 243, 130), style=shape.flag, title="Buy Signal")
plotshape(series=exitCondition, location=location.belowbar, color=color.red, style=shape.xcross, title="Sell Signal")
plotshape(series=reEntryCondition or reEntryAfterSL, location=location.belowbar, color=color.blue, style=shape.labelup, title="Re-entry Signal")
//plotshape(series = fiftytwoWeekhigh,location=location.abovebar, color=color.blue,style=shape.flag, title="52WH")

// Plot background color for RS > 0
//bgcolor(rs > 0 ? color.new(color.green, 90) : na, title="RS Positive Background")
// Plot the previous 2-week low and last week's high
// plot(twoWeekLow, color=color.orange, title="2-Week Low")
// plot(lastWeekHigh, color=color.purple, title="Last Week High")

// Strategy logic
if (longCondition or reEntryCondition or reEntryAfterSL)
    strategy.entry("Long", strategy.long)

if (exitCondition)
    strategy.close("Long")

 // Calculate Stop Loss (SL) and Profit
var float entryPrice = na
var float stopLoss = na
var float profit = na

if (strategy.opentrades > 0)
    entryPrice := strategy.opentrades.entry_price(strategy.opentrades - 1)
    stopLoss := fiftytwoWeekhigh * 0.80
    profit := (close - entryPrice) / entryPrice * 100

// Display the strategy table
var table strategyTable = table.new(position.top_right, 4, 2, border_width = 1)

// Make the table movable
tableX = input.int(0, title="Table X Position")
tableY = input.int(0, title="Table Y Position")

// Add size options for the table
tableSize = input.string("small", title="Table Size", options=["tiny", "small", "large"])

// Adjust table size based on user input
tableWidth = tableSize == "tiny" ? 2 : tableSize == "small" ? 4 : 6
tableHeight = tableSize == "tiny" ? 1 : tableSize == "small" ? 2 : 3

// Create the table with the specified size
//table = table.new(position.top_right, tableWidth, tableHeight, border_width = 1)

// Position the table based on user input
// table.cell(strategyTable, tableX, tableY, "Entry Price",  bgcolor=#18eef9)
// table.cell(strategyTable, tableX, tableY + 1, str.tostring(entryPrice, format.mintick), bgcolor=#18eef9)
// table.cell(strategyTable, tableX + 1, tableY, "Stop Loss (20%)", bgcolor=color.red)
// table.cell(strategyTable, tableX + 1, tableY + 1, str.tostring(stopLoss, format.mintick), bgcolor=color.red)
// table.cell(strategyTable, tableX + 2, tableY, "Profit (%)", bgcolor=color.green)
// table.cell(strategyTable, tableX + 2, tableY + 1, str.tostring(profit, format.percent), bgcolor=color.green)