
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.
Sinyal dagangan dihasilkan:
Kerosakan penghentian dinamik:
Tempoh pegangan tetap:
EMA Hentikan Kerugian:
Pengesahan jumlah transaksi:
Kerjasama pelbagai petunjuk: menggabungkan EMA, RSI dan jumlah dagangan, menganalisis keadaan pasaran secara menyeluruh, meningkatkan kebolehpercayaan isyarat.
Pengurusan risiko dinamik: penyesuaian stop loss dalam masa nyata mengikut turun naik pasaran, menyesuaikan diri dengan keadaan pasaran yang berbeza.
Tempoh pegangan tetap: mengelakkan risiko yang dibawa oleh pegangan jangka panjang, mengawal masa pendedahan setiap perdagangan.
EMA Hentian Dinamis: Menggunakan garis rata sebagai rintangan sokongan dinamik, memberikan perlindungan hentian yang lebih fleksibel.
Pengesahan jumlah urus niaga: menggunakan jumlah urus niaga untuk mengesahkan kekuatan isyarat dan meningkatkan ketepatan urus niaga.
Pembantu visual: Merakamkan isyarat jual beli dan tahap harga utama pada carta untuk memudahkan analisis dan membuat keputusan.
Risiko pasaran goyah: Dalam pasaran goyah, persilangan EMA mungkin menghasilkan isyarat palsu yang kerap.
Tetap RSI: Tetap RSI mungkin tidak berlaku untuk semua keadaan pasaran.
Sensitiviti penurunan jumlah transaksi: 3 kali penurunan jumlah transaksi purata mungkin terlalu tinggi atau terlalu rendah, perlu disesuaikan dengan pasaran tertentu.
Had masa pegangan tetap: 15 masa pegangan tetap pada garis K boleh menyebabkan penamatan perdagangan yang menguntungkan lebih awal.
Tetapan harga hentian hentian: harga penutupan apabila terdapat jumlah dagangan yang tinggi mungkin tidak cukup dioptimumkan sebagai harga hentian hentian.
Tanda aras RSI yang dinamik: Tanda aras RSI yang overbought dan oversold yang disesuaikan secara automatik mengikut turun naik pasaran.
Mengoptimumkan penurunan jumlah transaksi: Memperkenalkan mekanisme penyesuaian diri, menyesuaikan jumlah transaksi yang memecahkan beberapa kali ganda berdasarkan data sejarah.
Pengurusan masa pegangan yang lebih baik: Mengubah masa pegangan maksimum secara dinamik dengan kekuatan trend dan keuntungan.
Optimumkan penempatan stop loss: pertimbangkan untuk memperkenalkan penunjuk ATR, yang menetapkan harga stop loss mengikut pergerakan pasaran yang tidak menentu.
Menambah penapis trend: memperkenalkan EMA jangka panjang atau penunjuk trend, mengelakkan perdagangan dalam arah yang bertentangan dengan trend utama.
Pengenalan analisis tingkah laku harga: menggabungkan bentuk K-line dan tahap rintangan sokongan untuk meningkatkan ketepatan masuk dan keluar.
Pertimbangkan untuk menambah kawalan penarikan balik: Tetapkan had penarikan balik maksimum, memaksa kedudukan kosong apabila tahap penarikan balik tertentu dicapai.
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.
/*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)