Sumber daya yang dimuat... Pemuatan...

Dual EMA dan Relative Strength Adaptive Trading Strategy

Penulis:ChaoZhang, Tanggal: 2024-12-04 15:29:05
Tag:EMARSIRS

img

Gambaran umum

Strategi ini adalah sistem perdagangan yang komprehensif yang menggabungkan sistem EMA ganda, Indeks Kekuatan Relatif (RSI), dan analisis Kekuatan Relatif (RS). Strategi ini mengkonfirmasi tren melalui persilangan Rata-rata Gerak Eksponensial (EMA) 13 hari dan 21 hari sambil memanfaatkan nilai RSI dan RS relatif terhadap indeks patokan untuk konfirmasi sinyal, menerapkan mekanisme keputusan perdagangan multi-dimensi.

Prinsip Strategi

Strategi ini menggunakan mekanisme konfirmasi sinyal ganda:

  1. Sinyal masuk membutuhkan kondisi berikut:
    • EMA13 melintasi di atas EMA21 atau harga di atas EMA13
    • RSI di atas 60
    • Kekuatan Relatif Positif (RS)
  2. Kondisi keluar termasuk:
    • Harga turun di bawah EMA21
    • RSI di bawah 50
    • RS menjadi negatif.
  3. Kondisi masuk kembali:
    • Harga melintasi di atas EMA13 dan EMA13 di atas EMA21
    • RS tetap positif
    • Atau harga pecah di atas minggu lalu high

Keuntungan Strategi

  1. Konfirmasi beberapa sinyal mengurangi risiko pecah palsu
  2. Integrasi analisis kekuatan relatif secara efektif menyaring kinerja yang kuat
  3. Mengadopsi mekanisme penyesuaian kerangka waktu adaptatif
  4. Sistem kontrol risiko yang komprehensif
  5. Mekanisme masuk kembali yang cerdas
  6. Visualisasi status perdagangan secara real-time

Risiko Strategi

  1. Potensi perdagangan yang sering di pasar yang bergolak
  2. Berbagai indikator dapat menyebabkan sinyal tertinggal
  3. Batas RSI tetap mungkin tidak sesuai dengan semua kondisi pasar
  4. Perhitungan RS tergantung pada akurasi indeks acuan
  5. Stop loss tinggi 52 minggu mungkin terlalu longgar

Arah Optimasi Strategi

  1. Pengenalan ambang batas RSI adaptif
  2. Optimalisasi logika kondisi masuk kembali
  3. Penambahan dimensi analisis volume
  4. Peningkatan mekanisme pengambilan keuntungan dan stop loss
  5. Pelaksanaan filter volatilitas
  6. Optimalisasi periode perhitungan kekuatan relatif

Ringkasan

Strategi ini membangun sistem perdagangan yang komprehensif dengan menggabungkan analisis teknis dan analisis kekuatan relatif. Mekanisme konfirmasi sinyal ganda dan sistem pengendalian risiko membuatnya sangat praktis. Melalui arah optimasi yang disarankan, ada ruang untuk perbaikan lebih lanjut. Implementasi yang sukses mengharuskan pedagang memiliki pemahaman yang mendalam tentang pasar dan melakukan penyesuaian parameter yang sesuai berdasarkan karakteristik instrumen perdagangan tertentu.


/*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)


Berkaitan

Lebih banyak