Sumber dimuat naik... memuat...

Strategi Dagangan Dinamik Multi-Indikator

Penulis:ChaoZhang, Tarikh: 2024-07-30 17:29:59
Tag:EMARSISMATPSL

img

Ringkasan

Strategi ini adalah sistem dagangan komprehensif berdasarkan pelbagai penunjuk teknikal, terutamanya menggunakan Exponential Moving Averages (EMA), Indeks Kekuatan Relatif (RSI), dan jumlah dagangan untuk menjana isyarat dagangan dan menguruskan kedudukan. Strategi menentukan trend pasaran melalui persilangan EMA, menggunakan penunjuk RSI untuk menilai keadaan overbought dan oversold, dan menggabungkan jumlah dagangan untuk mengesahkan kekuatan isyarat. Di samping itu, strategi ini merangkumi mekanisme mengambil keuntungan dan menghentikan kerugian yang dinamik, serta had masa pegangan tetap untuk mengawal risiko dan mengoptimumkan prestasi dagangan.

Prinsip Strategi

  1. Generasi Isyarat Perdagangan:

    • Long Entry: EMA34 melintasi di atas EMA89, dan RSI lebih besar daripada 30
    • Entry Pendek: EMA34 melintasi di bawah EMA89, dan RSI kurang daripada 70
  2. Pendapatan Dinamik dan Stop Loss:

    • Kemas kini harga mengambil keuntungan dan stop-loss apabila jumlah dagangan lebih daripada 3 kali jumlah purata 20 lilin terakhir
    • Menetapkan harga mengambil keuntungan dan harga henti rugi kepada harga penutupan apabila jumlah yang tinggi berlaku
  3. Tempoh Tetap:

    • Memaksa kedudukan ditutup selepas 15 lilin, tanpa mengira keuntungan atau kerugian
  4. EMA Stop-Loss:

    • Menggunakan EMA34 sebagai garis stop-loss dinamik
  5. Pengesahan jumlah:

    • Menggunakan keadaan jumlah yang tinggi untuk mengesahkan kekuatan isyarat dan mengemas kini harga mengambil keuntungan dan berhenti kerugian

Kelebihan Strategi

  1. Sinergi Multi-Indikator: Menggabungkan EMA, RSI, dan jumlah untuk analisis pasaran yang komprehensif, meningkatkan kebolehpercayaan isyarat.

  2. Pengurusan Risiko Dinamik: Mengatur mengambil keuntungan dan menghentikan kerugian dalam masa nyata berdasarkan turun naik pasaran, menyesuaikan diri dengan persekitaran pasaran yang berbeza.

  3. Tempoh Simpan tetap: Mengelakkan risiko yang berkaitan dengan pegangan jangka panjang, mengawal masa pendedahan untuk setiap perdagangan.

  4. EMA Dynamic Stop-Loss: Menggunakan purata bergerak sebagai sokongan dan rintangan dinamik, menyediakan perlindungan stop-loss yang lebih fleksibel.

  5. Pengesahan Volume: Menggunakan gangguan jumlah untuk mengesahkan kekuatan isyarat, meningkatkan ketepatan perdagangan.

  6. Bantuan Visual: Menyatakan isyarat beli / jual dan tahap harga utama pada carta, memudahkan analisis dan membuat keputusan.

Risiko Strategi

  1. Risiko pasaran yang berbelit-belit: Perpindahan EMA boleh menghasilkan isyarat palsu yang kerap di pasaran yang tidak stabil.

  2. Sempadan RSI tetap: Sempadan RSI yang ditetapkan mungkin tidak sesuai untuk semua keadaan pasaran.

  3. Sensitiviti Sempadan Volume: Sempadan jumlah purata 3x mungkin terlalu tinggi atau rendah, yang memerlukan penyesuaian untuk pasaran tertentu.

  4. Tempoh Pengepungan Tetap: Masa penutupan tetap 15 lilin boleh menamatkan perdagangan yang menguntungkan lebih awal.

  5. Penetapan Harga Take-Profit dan Stop-Loss: Menggunakan harga penutupan pada kejadian jumlah yang tinggi untuk mengambil keuntungan dan stop-loss mungkin tidak optimum.

Arahan Pengoptimuman Strategi

  1. Sempadan RSI Dinamik: Sesuaikan secara automatik ambang RSI overbought/oversold berdasarkan turun naik pasaran.

  2. Mengoptimumkan Sempadan Volume: Memperkenalkan mekanisme penyesuaian untuk menyesuaikan secara dinamik pengganda pecah jumlah berdasarkan data sejarah.

  3. Meningkatkan Pengurusan Masa Tahan: Sesuaikan secara dinamik masa tahan maksimum berdasarkan kekuatan trend dan keuntungan.

  4. Meningkatkan tetapan mengambil keuntungan dan menghentikan kerugian: Pertimbangkan untuk menggabungkan penunjuk ATR untuk menetapkan harga mengambil keuntungan dan menghentikan kerugian secara dinamik berdasarkan turun naik pasaran.

  5. Tambah Penapis Trend: Memperkenalkan EMA jangka panjang atau penunjuk trend untuk mengelakkan perdagangan terhadap trend utama.

  6. Menggabungkan Analisis Tindakan Harga: Gabungkan corak lilin dan tahap sokongan / rintangan untuk meningkatkan ketepatan kemasukan dan keluar.

  7. Pertimbangkan Kawalan Penarikan: Tetapkan had penarikan maksimum, memaksa penutupan kedudukan apabila tahap penarikan tertentu dicapai.

Ringkasan

Strategi perdagangan dinamik pelbagai penunjuk ini mewujudkan sistem dagangan yang komprehensif dengan menggabungkan EMA, RSI, dan jumlah. Ia bukan sahaja menangkap trend pasaran tetapi juga menguruskan risiko melalui mengambil keuntungan / berhenti rugi dinamik dan masa memegang tetap. Kekuatan strategi terletak pada analisis multidimensi dan pengurusan risiko yang fleksibel, tetapi juga menghadapi cabaran dari persekitaran pasaran yang berubah. Dengan mengoptimumkan lagi ambang RSI, kriteria penghakiman jumlah, pengurusan masa memegang, dan pengaturan mengambil keuntungan / berhenti rugi, strategi ini berpotensi untuk melakukan lebih baik dalam pelbagai keadaan pasaran. Akhirnya, strategi ini menyediakan pedagang dengan rangka kerja yang boleh dipercayai yang boleh disesuaikan dan ditingkatkan mengikut gaya perdagangan individu dan ciri pasaran.


/*backtest
start: 2024-06-29 00:00:00
end: 2024-07-29 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("EMA & RSI Strategy", overlay=true)

// Install indicators
ema34 = ta.ema(close, 34)
ema89 = ta.ema(close, 89)
ema54 = ta.ema(close, 54)
ema150 = ta.ema(close, 150)
rsi = ta.rsi(close, 14)

// Draw indicator
plot(ema34, color=color.red, title="EMA 34")
plot(ema89, color=color.blue, title="EMA 89")
//plot(ema54, color=color.green, title="EMA 54")
//plot(ema150, color=color.yellow, title="EMA 150")
hline(50, "RSI 50", color=color.gray)
plot(rsi, title="RSI", color=color.orange, linewidth=2, offset=-1)

// condition long or short
longCondition = ta.crossover(ema34, ema89) and rsi > 30
shortCondition = ta.crossunder(ema34, ema89) and rsi < 70

// Add strategy long
if (longCondition)
    strategy.entry("Long", strategy.long)

// Add strategy short
if (shortCondition)
    strategy.entry("Short", strategy.short)

// Calculate the average volume of previous candles
length = 20 // Number of candles to calculate average volume
avgVolume = ta.sma(volume, length)
highVolumeCondition = volume > 3 * avgVolume

// Determine take profit and stop loss prices when there is high volume
var float takeProfitPriceLong = na
var float stopLossPriceLong = na
var float takeProfitPriceShort = na
var float stopLossPriceShort = na

if (longCondition)
    takeProfitPriceLong := na
    stopLossPriceLong := na

if (shortCondition)
    takeProfitPriceShort := na
    stopLossPriceShort := na

// Update take profit and stop loss prices when volume is high
if (strategy.opentrades.entry_id(0) == "Long" and highVolumeCondition)
    takeProfitPriceLong := close
    stopLossPriceLong := close

if (strategy.opentrades.entry_id(0) == "Short" and highVolumeCondition)
    takeProfitPriceShort := close
    stopLossPriceShort := close

// Execute exit orders for buy and sell orders when there is high volume
if (not na(takeProfitPriceLong))
    strategy.exit("Take Profit Long", from_entry="Long", limit=takeProfitPriceLong, stop=stopLossPriceLong)

if (not na(takeProfitPriceShort))
    strategy.exit("Take Profit Short", from_entry="Short", limit=takeProfitPriceShort, stop=stopLossPriceShort)

// Track the number of candles since the order was opened
var int barsSinceEntryLong = na
var int barsSinceEntryShort = na
var bool longPositionClosed = false
var bool shortPositionClosed = false

if (longCondition)
    barsSinceEntryLong := 0
    longPositionClosed := false
if (shortCondition)
    barsSinceEntryShort := 0
    shortPositionClosed := false

if (strategy.opentrades.entry_id(0) == "Long")
    barsSinceEntryLong := barsSinceEntryLong + 1

if (strategy.opentrades.entry_id(0) == "Short")
    barsSinceEntryShort := barsSinceEntryShort + 1

// Check the conditions to close the order at the 15th candle
if (strategy.opentrades.entry_id(0) == "Long" and barsSinceEntryLong >= 15 and not longPositionClosed)
    strategy.close("Long")
    longPositionClosed := true

if (strategy.opentrades.entry_id(0) == "Short" and barsSinceEntryShort >= 15 and not shortPositionClosed)
    strategy.close("Short")
    shortPositionClosed := true

// Thêm stop loss theo EMA34
if (strategy.opentrades.entry_id(0) == "Long")
    strategy.exit("Stop Loss Long", from_entry="Long", stop=ema34)
if (strategy.opentrades.entry_id(0) == "Short")
    strategy.exit("Stop Loss Short", from_entry="Short", stop=ema34)

// Displays buy/sell signals and price levels on the chart
plotshape(series=longCondition, location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")

// Displays take profit and stop loss prices on the chart
// var line takeProfitLineLong = na
// var line stopLossLineLong = na
// var line takeProfitLineShort = na
// var line stopLossLineShort = na

// if (not na(takeProfitPriceLong)) 
//     if na(takeProfitLineLong)
//         takeProfitLineLong := line.new(x1=bar_index, y1=takeProfitPriceLong, x2=bar_index + 1, y2=takeProfitPriceLong, color=color.blue, width=1, style=line.style_dashed)
//     else
//         line.set_xy1(takeProfitLineLong, x=bar_index, y=takeProfitPriceLong)
//         line.set_xy2(takeProfitLineLong, x=bar_index + 1, y=takeProfitPriceLong)

// if (not na(stopLossPriceLong)) 
//     if na(stopLossLineLong)
//         stopLossLineLong := line.new(x1=bar_index, y1=stopLossPriceLong, x2=bar_index + 1, y2=stopLossPriceLong, color=color.red, width=1, style=line.style_dashed)
//     else
//         line.set_xy1(stopLossLineLong, x=bar_index, y=stopLossPriceLong)
//         line.set_xy2(stopLossLineLong, x=bar_index + 1, y=stopLossPriceLong)

// if (not na(takeProfitPriceShort)) 
//     if na(takeProfitLineShort)
//         takeProfitLineShort := line.new(x1=bar_index, y1=takeProfitPriceShort, x2=bar_index + 1, y2=takeProfitPriceShort, color=color.blue, width=1, style=line.style_dashed)
//     else
//         line.set_xy1(takeProfitLineShort, x=bar_index, y=takeProfitPriceShort)
//         line.set_xy2(takeProfitLineShort, x=bar_index + 1, y=takeProfitPriceShort)

// if (not na(stopLossPriceShort)) 
//     if na(stopLossLineShort)
//         stopLossLineShort := line.new(x1=bar_index, y1=stopLossPriceShort, x2=bar_index + 1, y2=stopLossPriceShort, color=color.red, width=1, style=line.style_dashed)
//     else
//         line.set_xy1(stopLossLineShort, x=bar_index, y=stopLossPriceShort)
//         line.set_xy2(stopLossLineShort, x=bar_index + 1, y=stopLossPriceShort)

// // Shows annotations for take profit and stop loss prices
// if (not na(takeProfitPriceLong))
//     label.new(x=bar_index, y=takeProfitPriceLong, text="TP Long", style=label.style_label_down, color=color.blue, textcolor=color.white)
// if (not na(stopLossPriceLong))
//     label.new(x=bar_index, y=stopLossPriceLong, text="SL Long", style=label.style_label_up, color=color.red, textcolor=color.white)
// if (not na(takeProfitPriceShort))
//     label.new(x=bar_index, y=takeProfitPriceShort, text="TP Short", style=label.style_label_up, color=color.blue, textcolor=color.white)
// if (not na(stopLossPriceShort))
//     label.new(x=bar_index, y=stopLossPriceShort, text="SL Short", style=label.style_label_down, color=color.red, textcolor=color.white)


Berkaitan

Lebih lanjut