Strategi perdagangan dinamik komprehensif berbilang penunjuk

EMA RSI SMA TP SL
Tarikh penciptaan: 2024-07-30 17:29:59 Akhirnya diubah suai: 2024-07-30 17:29:59
Salin: 0 Bilangan klik: 521
1
fokus pada
1617
Pengikut

Strategi perdagangan dinamik komprehensif berbilang penunjuk

Gambaran keseluruhan

Strategi ini adalah sistem perdagangan komprehensif berdasarkan beberapa petunjuk teknikal, terutamanya menggunakan purata bergerak indeks ((EMA), indeks yang agak kuat ((RSI) dan jumlah perdagangan untuk menghasilkan isyarat perdagangan dan menguruskan kedudukan. Strategi ini menggunakan EMA untuk menentukan trend pasaran, sambil menggunakan indikator RSI untuk menilai overbought dan oversold, dan digabungkan dengan jumlah perdagangan untuk mengesahkan kekuatan isyarat.

Prinsip Strategi

  1. Sinyal dagangan dihasilkan:

    • Masuk berbilang kepala: EMA89 di atas EMA34 dan RSI lebih besar daripada 30
    • Kemasukan kosong: memakai EMA89 di bawah EMA34 dan RSI kurang daripada 70
  2. Kerosakan penghentian dinamik:

    • Mengemas kini harga hentian apabila jumlah dagangan lebih besar daripada 3 kali jumlah dagangan purata 20 K-Line
    • Harga penutupan yang ditetapkan sebagai harga hentian apabila terdapat jumlah dagangan yang tinggi
  3. Tempoh pegangan tetap:

    • Tidak kira keuntungan atau kerugian, 15 K-Line mesti ditutup selepas dibuka.
  4. EMA Hentikan Kerugian:

    • Menggunakan EMA34 sebagai garis hentian dinamik
  5. Pengesahan jumlah transaksi:

    • Menggunakan keadaan jumlah dagangan tinggi untuk mengesahkan kekuatan isyarat dan mengemas kini harga hentian hentian

Kelebihan Strategik

  1. Kerjasama pelbagai petunjuk: menggabungkan EMA, RSI dan jumlah dagangan, menganalisis keadaan pasaran secara menyeluruh, meningkatkan kebolehpercayaan isyarat.

  2. Pengurusan risiko dinamik: penyesuaian stop loss dalam masa nyata mengikut turun naik pasaran, menyesuaikan diri dengan keadaan pasaran yang berbeza.

  3. Tempoh pegangan tetap: mengelakkan risiko yang dibawa oleh pegangan jangka panjang, mengawal masa pendedahan setiap perdagangan.

  4. EMA Hentian Dinamis: Menggunakan garis rata sebagai rintangan sokongan dinamik, memberikan perlindungan hentian yang lebih fleksibel.

  5. Pengesahan jumlah urus niaga: menggunakan jumlah urus niaga untuk mengesahkan kekuatan isyarat dan meningkatkan ketepatan urus niaga.

  6. Pembantu visual: Merakamkan isyarat jual beli dan tahap harga utama pada carta untuk memudahkan analisis dan membuat keputusan.

Risiko Strategik

  1. Risiko pasaran goyah: Dalam pasaran goyah, persilangan EMA mungkin menghasilkan isyarat palsu yang kerap.

  2. Tetap RSI: Tetap RSI mungkin tidak berlaku untuk semua keadaan pasaran.

  3. Sensitiviti penurunan jumlah transaksi: 3 kali penurunan jumlah transaksi purata mungkin terlalu tinggi atau terlalu rendah, perlu disesuaikan dengan pasaran tertentu.

  4. Had masa pegangan tetap: 15 masa pegangan tetap pada garis K boleh menyebabkan penamatan perdagangan yang menguntungkan lebih awal.

  5. Tetapan harga hentian hentian: harga penutupan apabila terdapat jumlah dagangan yang tinggi mungkin tidak cukup dioptimumkan sebagai harga hentian hentian.

Arah pengoptimuman strategi

  1. Tanda aras RSI yang dinamik: Tanda aras RSI yang overbought dan oversold yang disesuaikan secara automatik mengikut turun naik pasaran.

  2. Mengoptimumkan penurunan jumlah transaksi: Memperkenalkan mekanisme penyesuaian diri, menyesuaikan jumlah transaksi yang memecahkan beberapa kali ganda berdasarkan data sejarah.

  3. Pengurusan masa pegangan yang lebih baik: Mengubah masa pegangan maksimum secara dinamik dengan kekuatan trend dan keuntungan.

  4. Optimumkan penempatan stop loss: pertimbangkan untuk memperkenalkan penunjuk ATR, yang menetapkan harga stop loss mengikut pergerakan pasaran yang tidak menentu.

  5. Menambah penapis trend: memperkenalkan EMA jangka panjang atau penunjuk trend, mengelakkan perdagangan dalam arah yang bertentangan dengan trend utama.

  6. Pengenalan analisis tingkah laku harga: menggabungkan bentuk K-line dan tahap rintangan sokongan untuk meningkatkan ketepatan masuk dan keluar.

  7. Pertimbangkan untuk menambah kawalan penarikan balik: Tetapkan had penarikan balik maksimum, memaksa kedudukan kosong apabila tahap penarikan balik tertentu dicapai.

ringkaskan

Strategi perdagangan dinamik komprehensif berbilang indikator ini, dengan menggabungkan EMA, RSI dan jumlah perdagangan, mewujudkan sistem perdagangan yang komprehensif. Ia bukan sahaja dapat menangkap trend pasaran, tetapi juga dapat menguruskan risiko dengan menghentikan stop loss dan masa pegangan tetap secara dinamik. Keunggulan strategi ini adalah analisis berbilang dimensi dan pengurusan risiko yang fleksibel, tetapi juga menghadapi cabaran yang dibawa oleh perubahan persekitaran pasaran. Dengan mengoptimumkan lagi RSI, kriteria penilaian jumlah perdagangan yang rendah, pengurusan masa pegangan, dan tetapan stop loss, strategi ini berpotensi untuk mencapai prestasi yang lebih baik dalam keadaan pasaran yang berbeza.

Kod sumber strategi
/*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)