
Strategi perdagangan trend-tracking bersepadu berbilang indikator adalah sistem perdagangan kuantitatif yang menggunakan pelbagai petunjuk teknikal untuk menentukan arah dan kekuatan trend pasaran. Strategi ini menggabungkan pelbagai petunjuk seperti purata bergerak, indeks kekuatan relatif (RSI), indeks arah rata-rata (ADX), dan indikator keseimbangan jumlah transaksi (OBV), dan menggabungkan analisis bentuk K-line dan penapisan masa perdagangan, memastikan peluang perdagangan yang menang dalam pasaran trend yang kuat melalui penyaringan keadaan bertingkat.
Strategi ini berdasarkan kepada prinsip-prinsip utama berikut:
Sistem Pengiktirafan TrendMenggunakan hubungan silang dan kedudukan EMA cepat ((50 kitaran) dan EMA perlahan ((200 kitaran) untuk menentukan arah trend utama pasaran. Apabila EMA cepat berada di atas EMA perlahan, ia mengesahkan trend naik; sebaliknya, ia mengesahkan trend menurun.
Pengukuran intensiti: Mengukur kekuatan trend dengan indikator ADX tersuai, hanya berdagang apabila nilai ADX lebih besar daripada nilai had yang ditetapkan (default 20) untuk mengelakkan pasaran yang lemah atau goyah.
Mekanisme pengesahan pelbagai peringkatKami telah merancang sistem isyarat pintar yang dinamakan “aiStrength”, yang menilai lima faktor utama pasaran secara menyeluruh:
Pengesahan bentuk K: Pengenalan tambahan bentuk menelan, bentuk K-garis khas seperti bintang salib dan garis acuan, sebagai isyarat pengesahan pembalikan atau lanjutan trend.
Pengesahan pesanan: Memerlukan jumlah transaksi melebihi 1.5 kali ganda daripada purata transaksi dalam 20 kitaran untuk memastikan kehadiran pasaran yang mencukupi untuk menyokong perubahan harga.
Penunjuk jauh dari pengenalan: Mengesan perbezaan harga antara RSI dan ADX sebagai isyarat amaran awal bahawa trend mungkin berbalik.
Penapisan pasaran yang bergolak: Mengenali dan mengelakkan pasaran yang bergolak melalui analisis gabungan antara julat pergerakan harga dengan ADX dan RSI.
Optimumkan masa dagangan: Terhad kepada perdagangan dalam masa tertentu ((14:00-23:00 dalam zon waktu UTC + 7), sesuai dengan masa pasaran utama yang aktif, meningkatkan kualiti isyarat.
Pengurusan risiko dinamikBerasaskan pada ATR yang dinamika untuk menetapkan paras berhenti dan hentikan, dan menggunakan mekanisme perlindungan hentikan yang dikesan. Nisbah risiko-kebalasan untuk beberapa kali keuntungan ditetapkan sebagai 2.0, dan perlindungan hentikan yang dikesan 1.5 kali ganda ATR juga menguntungkan.
Analisis pasaran pelbagai dimensiDengan mengintegrasikan pelbagai petunjuk seperti purata bergerak, RSI, ADX, OBV, dan sebagainya, analisis keadaan pasaran dari pelbagai sudut dapat mengurangkan risiko penipuan yang mungkin disebabkan oleh satu petunjuk.
Kebolehan menyesuaikan diriStrategi menggunakan seting stop loss berasaskan ATR, yang dapat menyesuaikan diri secara automatik dengan turun naik pasaran yang berbeza, dan tetap berkesan dalam keadaan turun naik dan turun naik.
Sistem penapisan ketinggianDengan penyaringan pelbagai syarat ((arah trend, pengesahan kekuatan, pengesahan kuantiti transaksi, bentuk K-line, masa perdagangan, dan lain-lain), banyak isyarat berkualiti rendah telah disaring dengan berkesan, meningkatkan kebolehpercayaan isyarat perdagangan dengan ketara.
Pengiktirafan Pintar Pasaran BergolakStrategi ini mempunyai mekanisme pengenalan pasaran yang bergolak dan mengelakkan perdagangan apabila pasaran berada dalam keadaan yang jelas, mengurangkan risiko kerugian dalam persekitaran yang tidak menentu.
Perlindungan keuntungan dinamik: Aplikasi Tracking Stop Loss berasaskan ATR, dapat mengunci keuntungan yang telah dibuat dengan berkesan, mengimbangi risiko dan ganjaran, sambil mengekalkan ruang yang mencukupi.
Gabungan bentuk dengan indikator: Menggabungkan bentuk garis K dalam analisis teknikal tradisional (swallowing, cross-star, acute line) dengan penunjuk teknikal moden, mengambil panjang masing-masing, saling mengesahkan.
Menyingkirkan sistem amaran awalDengan mengesan perbezaan antara harga dan RSI, ADX, dan mengesan lebih awal potensi trend lemah atau isyarat pembalikan yang akan datang, meningkatkan kebolehpastian strategi.
Optimumkan masa daganganBerfokus pada perdagangan pada masa pasaran aktif, mengelakkan pergerakan rendah dan ketidakstabilan, meningkatkan kecekapan perdagangan.
Resonansi penunjuk ketergantungan yang berlebihanStrategi yang memerlukan pengesahan pelbagai petunjuk pada masa yang sama untuk menghasilkan isyarat, walaupun meningkatkan kualiti isyarat, tetapi boleh menyebabkan kehilangan beberapa peluang perdagangan yang berkesan, terutamanya di pasaran cepat.
Cabaran pengoptimuman parameterStrategi melibatkan pelbagai parameter yang ditetapkan (seperti panjang EMA, kitaran RSI, ADX, dan lain-lain), dan kombinasi parameter yang berbeza mungkin diperlukan dalam keadaan pasaran yang berbeza, meningkatkan kerumitan pengoptimuman parameter.
Frekuensi dagangan tidak stabilOleh kerana syarat kemasukan yang ketat, pada tahap pasaran tertentu, mungkin tidak ada isyarat dagangan untuk jangka masa yang lama, yang mempengaruhi kecekapan penggunaan dana. Penyelesaian adalah dengan mempertimbangkan untuk menambah varieti pasaran yang boleh diperdagangkan atau melonggarkan beberapa syarat dengan sewajarnya.
Risiko penarikan balikWalaupun menggunakan tetapan stop loss berasaskan ATR, dalam keadaan pasaran yang melampau (seperti melompat atau melintas), stop loss sebenar mungkin tergelincir dengan teruk, menyebabkan kerugian melebihi jangkaan. Ia disyorkan untuk menambah langkah-langkah kawalan risiko tambahan seperti pengurusan kedudukan keseluruhan dan had maksimum kerugian harian.
Kesilapan dalam menilai keadaan pasaranMekanisme mengenal pasti pasaran goyah dalam strategi, walaupun berkesan, boleh membuat kesalahan dalam beberapa keadaan pasaran yang rumit, salah memfilter peluang perdagangan yang berharga atau salah memasuki pasaran yang tidak sesuai.
Risiko kerumitan algoritmaLogik strategi lebih rumit, penilaian berbilang syarat boleh menyebabkan kesilapan prosedur atau konflik logik, dan kestabilan strategi perlu dijamin melalui pengujian semula dan pemantauan langsung yang ketat.
Risiko terlalu serasiOleh kerana strategi ini menggunakan pelbagai petunjuk dan syarat, terdapat risiko terlalu banyak data sejarah yang mungkin menyebabkan prestasi masa depan yang kurang daripada yang diharapkan. Ia disyorkan untuk diuji dengan baik dalam tempoh masa dan keadaan pasaran yang berbeza.
Penyesuaian parameter: Strategi semasa menggunakan tetapan parameter tetap, boleh mempertimbangkan untuk memperkenalkan mekanisme penyesuaian parameter penyesuaian, menyesuaikan panjang EMA, nilai RSI, nilai ADX, dan lain-lain parameter mengikut dinamik turun naik pasaran dan kekuatan trend, untuk meningkatkan penyesuaian strategi dalam keadaan pasaran yang berbeza.
Pengoptimuman klasifikasi keadaan pasaranMekanisme yang sedia ada untuk mengenal pasti pasaran yang bergolak boleh diperincikan lagi, membahagi keadaan pasaran ke dalam pelbagai kategori seperti kenaikan kuat, kenaikan lemah, penurunan kuat, penurunan lemah dan gegaran, menggunakan strategi perdagangan dan kombinasi parameter yang berbeza untuk keadaan pasaran yang berbeza.
Pengesahan waktu masukPengoptimuman kemasukan berdasarkan struktur mikro pasaran boleh ditambah, seperti pengesahan penembusan tahap sokongan / rintangan, analisis kadar turun naik harga, dan lain-lain, untuk meningkatkan ketepatan titik kemasukan.
Peningkatan strategi pengurusan kedudukanStrategi semasa menggunakan pengurusan dana dengan peratusan tetap, boleh mempertimbangkan untuk memperkenalkan pengurusan kedudukan dinamik berdasarkan kadar turun naik, meningkatkan kedudukan semasa isyarat kepastian yang tinggi dan risiko pasaran yang rendah, dan sebaliknya mengurangkan kedudukan, mengoptimumkan kecekapan penggunaan dana.
Analisis pelbagai kerangka masaPengenalan analisis pelbagai jangka masa dapat meningkatkan keberkesanan strategi dengan ketara, contohnya dengan menggunakan jangka masa yang lebih besar (seperti 1 jam atau 4 jam) untuk mengesahkan arah trend utama, dan kemudian mencari titik masuk khusus pada carta 15 minit, mengurangkan risiko perdagangan berlawanan.
Pembelajaran mesin mengoptimumkan berat isyaratIa boleh menggunakan teknologi pembelajaran mesin untuk menganalisis data sejarah dan mengagihkan berat dinamik kepada isyarat indikator yang berbeza, dan bukannya hanya mengira jumlah isyarat pengesahan, untuk menilai keadaan pasaran dan kualiti peluang perdagangan dengan lebih tepat.
Penjelasan mengenai strategi penangguhan kerugian: Dengan menggunakan seting stop loss ATR berganda yang seragam, anda boleh menyesuaikan strategi stop loss yang lebih halus berdasarkan ciri-ciri turun naik pasaran dan sebab masuk, seperti stop loss struktural berdasarkan sokongan / rintangan, stop loss masa, atau stop loss yang disesuaikan dengan kadar turun naik.
Analisis bermusim dan kitaran pasaran: Tambah analisis kepada faktor bermusim dan kitaran pasaran, menyesuaikan parameter strategi atau menghentikan perdagangan pada tempoh masa tertentu (seperti awal / akhir bulan, sebelum dan selepas penghantaran suku) untuk mengelakkan perubahan yang tidak biasa dalam sejarah.
Strategi perdagangan trend-tracking integrasi pelbagai indikator adalah sistem perdagangan kuantitatif yang dirancang dengan baik, yang dapat mengidentifikasi dan menjejaki trend pasaran dengan cekap dengan menggunakan pelbagai alat analisis teknikal dan konsep perdagangan secara menyeluruh. Keunikan strategi ini adalah mekanisme pengesahan isyarat bertingkatnya, yang secara signifikan mengurangkan kemungkinan isyarat yang salah dengan meminta beberapa jenis indikator yang berbeza untuk mengarahkan arah perdagangan yang sama pada masa yang sama.
Strategi ini juga mengintegrasikan analisis bentuk K-line tradisional dengan petunjuk teknologi moden, dan menambah pengesahan jumlah transaksi dan pengoptimuman masa perdagangan, membentuk kerangka keputusan perdagangan yang komprehensif dan sistematik. Reka bentuk pengurusan risiko dinamik berdasarkan ATR juga mencerminkan keutamaan strategi terhadap keselamatan dana, menyediakan mekanisme kawalan risiko yang munasabah untuk pedagang.
Walaupun terdapat kesukaran dalam pengoptimuman parameter, mungkin kehilangan beberapa peluang perdagangan, tetapi dengan arah pengoptimuman yang disyorkan, seperti penyesuaian parameter yang disesuaikan, analisis jangka masa berbilang, dan pengoptimuman isyarat pembelajaran mesin, prestasi strategi dijangka dapat ditingkatkan lagi. Secara keseluruhannya, ini adalah strategi perdagangan kuantitatif yang logik dan dirancang dengan munasabah, yang sangat sesuai untuk digunakan oleh pedagang yang mengejar keuntungan yang mantap dan memberi perhatian kepada kawalan risiko.
/*backtest
start: 2025-03-10 00:00:00
end: 2025-04-07 00:00:00
period: 2m
basePeriod: 2m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("TUONG HA GBP M15 Trend Strategy NHIEU CHI BAO TICH HOP", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// === INPUTS ===
emaFastLen = input.int(50, "EMA Fast", minval=10, maxval=200, step=5)
emaSlowLen = input.int(200, "EMA Slow", minval=50, maxval=500, step=10)
rsiLen = input.int(14, "RSI Length")
adsLen = input.int(14, "ADX Length")
adxThreshold = input.int(20, "ADX Threshold")
atrLen = input.int(14, "ATR Length")
rrRatio = input.float(2.0, "Risk-Reward Ratio", step=0.1)
trailOffset = input.float(1.5, "Trailing Stop ATR Multiplier", step=0.1)
volumeMultiplier = input.float(1.5, "Volume Multiplier Threshold", step=0.1)
// === SESSIONS (London + New York in VN Time UTC+7) ===
startHour = 14
endHour = 23
inSession = (hour >= startHour and hour <= endHour)
// === INDICATORS ===
emaFast = ta.ema(close, emaFastLen)
emaSlow = ta.ema(close, emaSlowLen)
rsi = ta.rsi(close, rsiLen)
at = ta.atr(atrLen)
// === CUSTOM ADX FUNCTION ===
upMove = high - high[1]
downMove = low[1] - low
plusDM = (upMove > downMove and upMove > 0) ? upMove : 0
minusDM = (downMove > upMove and downMove > 0) ? downMove : 0
trur = ta.tr(true)
plusDI = 100 * ta.rma(plusDM, adsLen) / ta.rma(trur, adsLen)
minusDI = 100 * ta.rma(minusDM, adsLen) / ta.rma(trur, adsLen)
adx = 100 * ta.rma(math.abs(plusDI - minusDI) / (plusDI + minusDI), adsLen)
// === OBV TREND ===
obv = ta.cum(close > close[1] ? volume : close < close[1] ? -volume : 0)
obvTrend = obv > obv[1]
// === VOLUME FILTER ===
avgVol = ta.sma(volume, 20)
highVol = volume > avgVol * volumeMultiplier
// === SIDEWAY DETECTION ===
rng = ta.highest(high, 20) - ta.lowest(low, 20)
rngCloseRatio = close != 0 ? (rng / close) : na
sideway = na(rngCloseRatio) ? false : (rngCloseRatio < 0.003 and adx < adxThreshold and (rsi > 45 and rsi < 55))
// === ENGULFING ===
bullishEngulf = close[1] < open[1] and close > open and close > open[1] and open < close[1]
bearishEngulf = close[1] > open[1] and close < open and close < open[1] and open > close[1]
// === DOJI AND PIN BAR ===
doji = math.abs(open - close) <= (high - low) * 0.1
pinBar = (high - math.max(open, close)) > 2 * math.abs(open - close) and (math.min(open, close) - low) < (high - low) * 0.25
// === AI SIGNALS ENHANCED ===
aiStrength = 0
aiStrength := aiStrength + (emaFast > emaSlow ? 1 : 0)
aiStrength := aiStrength + (obvTrend ? 1 : 0)
aiStrength := aiStrength + (adx > adxThreshold ? 1 : 0)
aiStrength := aiStrength + (bullishEngulf ? 1 : 0)
aiStrength := aiStrength + (ta.crossover(ta.ema(close, 5), ta.ema(close, 21)) ? 1 : 0)
aiSignalLong = aiStrength >= 4
aioStrengthS = 0
aioStrengthS := aioStrengthS + (emaFast < emaSlow ? 1 : 0)
aioStrengthS := aioStrengthS + (not obvTrend ? 1 : 0)
aioStrengthS := aioStrengthS + (adx > adxThreshold ? 1 : 0)
aioStrengthS := aioStrengthS + (bearishEngulf ? 1 : 0)
aioStrengthS := aioStrengthS + (ta.crossunder(ta.ema(close, 5), ta.ema(close, 21)) ? 1 : 0)
aiSignalShort = aioStrengthS >= 4
// === HIGHS AND LOWS DETECTION ===
highestHigh = ta.highest(high, 50)
lowestLow = ta.lowest(low, 50)
plot(highestHigh, title="Highest High", color=color.fuchsia, linewidth=1, style=plot.style_line)
plot(lowestLow, title="Lowest Low", color=color.teal, linewidth=1, style=plot.style_line)
// === RSI DIVERGENCE ===
priceHigherHigh = high > high[1] and high[1] > high[2]
rsiLowerHigh = rsi < rsi[1] and rsi[1] > rsi[2]
shortDiv = priceHigherHigh and rsiLowerHigh
priceLowerLow = low < low[1] and low[1] < low[2]
rsiHigherLow = rsi > rsi[1] and rsi[1] < rsi[2]
longDiv = priceLowerLow and rsiHigherLow
// === ADX DIVERGENCE ===
priceHigherHighADX = high > high[1] and high[1] > high[2]
adxLowerHigh = adx < adx[1] and adx[1] > adx[2]
adxBearishDiv = priceHigherHighADX and adxLowerHigh
priceLowerLowADX = low < low[1] and low[1] < low[2]
adxHigherLow = adx > adx[1] and adx[1] < adx[2]
adxBullishDiv = priceLowerLowADX and adxHigherLow
// === CONDITIONS ===
trendUp = emaFast > emaSlow
trendDn = emaFast < emaSlow
longCond = trendUp and rsi > 50 and obvTrend and adx > adxThreshold and bullishEngulf and aiSignalLong and inSession and not sideway and highVol and (pinBar or doji or longDiv or adxBullishDiv)
shortCond = trendDn and rsi < 50 and not obvTrend and adx > adxThreshold and bearishEngulf and aiSignalShort and inSession and not sideway and highVol and (pinBar or doji or shortDiv or adxBearishDiv)
// === ENTRY + SL/TP + TRAILING ===
longSL = close - at
longTP = close + at * rrRatio
shortSL = close + at
shortTP = close - at * rrRatio
plotshape(longCond, location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small, title="Buy Signal")
plotshape(shortCond, location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small, title="Sell Signal")
if (longCond)
strategy.entry("Long", strategy.long)
strategy.exit("Long TP/SL", from_entry="Long", stop=longSL, limit=longTP, trail_points=at * trailOffset, trail_offset=at * trailOffset)
label.new(bar_index, high, "Buy", style=label.style_label_up, color=color.green, textcolor=color.white, size=size.normal)
alert("Long Signal!", alert.freq_once_per_bar)
if (shortCond)
strategy.entry("Short", strategy.short)
strategy.exit("Short TP/SL", from_entry="Short", stop=shortSL, limit=shortTP, trail_points=at * trailOffset, trail_offset=at * trailOffset)
label.new(bar_index, low, "Sell", style=label.style_label_down, color=color.red, textcolor=color.white, size=size.normal)
alert("Short Signal!", alert.freq_once_per_bar)
// === PLOTS ===
plot(emaFast, color=color.orange, title="EMA Fast")
plot(emaSlow, color=color.blue, title="EMA Slow")
bgcolor(sideway ? color.new(color.gray, 90) : na)
// === COLORING BARS ===
barcolor(longCond ? color.new(color.green, 0) : shortCond ? color.new(color.red, 0) : na)