Sistem penangkapan tren rata-rata pergerakan ganda dan konfirmasi silang perdagangan

EMA RSI MACD ATR 趋势跟踪 均线交叉 波动率过滤
Tanggal Pembuatan: 2025-03-03 10:11:37 Akhirnya memodifikasi: 2025-03-03 10:11:37
menyalin: 0 Jumlah klik: 399
2
fokus pada
319
Pengikut

Sistem penangkapan tren rata-rata pergerakan ganda dan konfirmasi silang perdagangan Sistem penangkapan tren rata-rata pergerakan ganda dan konfirmasi silang perdagangan

Ringkasan

Multiple Average Trend Capture and Cross Confirmation Trading System adalah strategi trading kuantitatif yang didasarkan pada kombinasi multi-periode indeks Moving Average (EMA), yang menggabungkan indikator relatif kuat (RSI), Moving Average Trend Difference (MACD), dan Average True Range (ATR) sebagai indikator tambahan. Inti dari strategi ini adalah untuk menentukan arah tren pasar dengan membandingkan hubungan posisi rata-rata dari periode waktu yang berbeda, dan membuka posisi ketika tren jelas, dan meratakan posisi saat tren melemah atau berbalik. Strategi ini dirancang khusus untuk mekanisme konfirmasi tren multi-periode, menilai kekuatan dan keberlanjutan tren melalui hubungan antara posisi rata-rata jangka pendek dan jangka panjang, sehingga meningkatkan peluang dan stabilitas perdagangan.

Prinsip Strategi

Prinsip inti dari strategi ini adalah menggunakan rata-rata bergerak indeks ((EMA) dari beberapa periode yang berbeda untuk menilai tren pasar dan menangkap peluang perdagangan. Lima EMA digunakan dalam strategi ini: rata-rata instan ((14 siklus), rata-rata menengah ((25 siklus), rata-rata jangka pendek ((50 siklus), rata-rata jangka menengah ((100 siklus) dan rata-rata jangka panjang ((200 siklus)).

Logika utama dari strategi ini adalah sebagai berikut:

  1. Mekanisme penilaian tren:

    • Kondisi tren naik: rata-rata saat ini di atas rata-rata jangka pendek, menengah dan panjang, dan rata-rata jangka pendek di atas rata-rata jangka menengah
    • Kondisi tren menurun: rata-rata saat ini di bawah rata-rata jangka pendek, menengah dan panjang, dan rata-rata jangka pendek di bawah rata-rata jangka panjang
  2. Sinyal masuk:

    • Multiple entry: ketika memenuhi kondisi uptrend dan tidak memegang posisi saat ini
    • Masuk kosong: ketika memenuhi kondisi tren menurun dan tidak memegang posisi saat ini, serta memenuhi kondisi ATR minimal (cukup volatilitas pasar)
  3. Sinyal keluar:

    • Posisi imbang multi-head: ketika rata-rata instan jatuh di bawah rata-rata jangka pendek
    • Posisi kosong: saat rata-rata seketika melewati rata-rata jangka menengah
  4. Pengendalian Risiko:

    • Menggunakan indikator ATR sebagai filter volatilitas, hanya melakukan perdagangan kosong jika volatilitasnya cukup ((ATR lebih besar dari rata-rata)
    • Integrasi level RSI overbought and oversold sebagai kondisi penyaringan tambahan yang potensial (walaupun telah didefinisikan dalam kode namun tidak digunakan dalam logika perdagangan saat ini)
  5. Pelacakan Lokasi:

    • Strategi menggunakan variabel Boolean untuk melacak apakah saat ini memegang posisi dan arah memegang posisi (multihead atau blank)

Keunggulan Strategis

  1. Konfirmasi Garis Rata-Rata Multiple: Mengkonfirmasi tren bersama melalui beberapa garis rata-rata dari periode yang berbeda, mengurangi terobosan palsu dan sinyal salah, meningkatkan kualitas sinyal.

  2. Mengidentifikasi tren dengan tepatDibandingkan dengan sistem satu garis rata, sistem multi-garis rata dapat lebih akurat mengidentifikasi titik-titik pergeseran tren pasar, terutama ketika garis rata seketika berubah dari posisi relatif terhadap garis rata lainnya.

  3. Manajemen risiko yang fleksibel: Menggunakan kriteria masuk dan keluar yang berbeda untuk multihead dan head, yang mencerminkan perlakuan diferensial terhadap risiko di berbagai arah pasar, dengan tambahan filter volatilitas untuk perdagangan head.

  4. Sinyal perdagangan visualStrategi: Menggunakan grafik yang jelas untuk menunjukkan posisi pembelian, penjualan, dan posisi kosong untuk analisis dan pemantauan real-time.

  5. Pemandangan latar belakang tren: Menggunakan warna latar belakang untuk membedakan tren naik dan tren turun, secara intuitif menampilkan lingkungan pasar, sehingga memudahkan pedagang untuk cepat menilai kondisi pasar saat ini.

  6. Potensi SkalabilitasPerhitungan indikator RSI dan MACD telah diintegrasikan, meskipun tidak digunakan dalam logika perdagangan saat ini, tetapi memberikan dasar untuk optimasi strategi di masa depan.

  7. Parameter yang dapat disesuaikanSemua parameter penting dapat disesuaikan dengan kontrol input, termasuk siklus rata-rata, RSI, MACD dan pengaturan ATR, yang dapat dioptimalkan sesuai dengan kondisi pasar dan jenis perdagangan yang berbeda.

Risiko Strategis

  1. Rata-rata ketinggalanSemua sistem berbasis rata-rata memiliki keterlambatan tertentu, dan mungkin akan ada penarikan yang lebih besar di pasar yang bergoyang atau di pasar yang berbalik dengan cepat. Solusinya adalah dengan menyesuaikan siklus rata-rata, atau menambahkan kondisi penyaringan pasar yang bergoyang tambahan.

  2. Risiko Terlalu Banyak BerdagangDalam pasar yang bergejolak, rata-rata seketika mungkin sering melintasi rata-rata jangka pendek, yang menyebabkan overtrading. Anda dapat mengurangi perdagangan yang tidak valid dengan meningkatkan waktu penyimpanan minimum atau menambahkan filter tambahan.

  3. Masalah adaptasi pasar yang berbedaStrategi rata-rata dengan parameter tetap memiliki performa yang berbeda-beda dalam berbagai lingkungan pasar dan jenis perdagangan. Optimalisasi parameter harus dilakukan untuk pasar tertentu, atau pertimbangkan untuk menggunakan parameter yang dapat disesuaikan.

  4. Konflik sinyal: Meskipun RSI dan MACD dihitung dalam kode, namun tidak terintegrasi secara efektif dalam logika perdagangan, yang dapat menyebabkan potensi sinyal konflik atau kehilangan peluang optimasi.

  5. Kecenderungan multi kepalaStrategi saat ini menggunakan standar yang berbeda untuk multihead dan head, multihead tidak memiliki filter fluktuasi, dan head harus memenuhi persyaratan ATR minimum, yang mungkin membuat strategi lebih agresif di pasar yang naik, meningkatkan risiko.

  6. Mekanisme keluar tetapStrategi menggunakan persilangan indikator teknis tetap sebagai titik awal, kurangnya mekanisme stop loss yang disesuaikan dengan dinamika pasar, mungkin tidak dapat mengunci keuntungan atau mengendalikan risiko secara efektif.

  7. Parameter SensitivitasStrategi bergantung pada beberapa parameter siklus rata-rata, dan perubahan kecil dalam parameter ini dapat menyebabkan perbedaan yang signifikan dalam hasil perdagangan, meningkatkan risiko over-fit.

Arah optimasi strategi

  1. Mengintegrasikan indikator yang telah dihitungStrategi telah menghitung indikator RSI dan MACD tetapi belum dimanfaatkan sepenuhnya. RSI dapat digunakan untuk memfilter kondisi pasar yang ekstrim, MACD digunakan untuk mengkonfirmasi arah tren, meningkatkan kualitas sinyal. Misalnya, dapat diminta bahwa RSI tidak berada di zona overbought saat masuk ke multihead dan RSI tidak berada di zona oversold saat masuk ke headless.

  2. Sistem Stop Loss DinamisIntroduksi mekanisme stop loss dinamis berbasis ATR, yang secara otomatis menyesuaikan jarak stop loss sesuai dengan volatilitas pasar, meningkatkan kemampuan manajemen risiko. Hal ini dapat dicapai dengan menghitung nilai ATR dari titik masuk ditambah beberapa kali lipat.

  3. Klasifikasi kondisi pasar: Menambahkan mekanisme penilaian terhadap kondisi pasar ((trending market vs shaking market), menggunakan strategi perdagangan yang berbeda dalam kondisi pasar yang berbeda. Sebagai contoh, kekuatan tren pasar dapat dinilai melalui kemiringan garis rata-rata jangka panjang atau indikator ADX.

  4. Analisis multi-frame waktu: Mengintegrasikan informasi tren dari periode waktu yang lebih tinggi, hanya melakukan perdagangan ketika arah tren dari periode waktu yang lebih tinggi konsisten, meningkatkan tingkat kemenangan.

  5. Optimalkan parameter garis rata-rataStrategi saat ini menggunakan periode rata-rata tetap ((14, 25, 50, 100, 200), yang dapat ditemukan dengan mengevaluasi kombinasi parameter yang berbeda untuk menemukan parameter optimal yang lebih cocok untuk pasar tertentu.

  6. Menambahkan konfirmasi pengirimanMenggabungkan indikator volume transaksi untuk mengkonfirmasi kekuatan tren, hanya berdagang dalam tren yang didukung volume transaksi, mengurangi kerugian akibat false breakout.

  7. Perubahan kondisi masuk ke lapangan: Mengoptimalkan masuk logis multihead dan headless, membuatnya lebih simetris, atau melakukan penyesuaian yang lebih halus untuk karakteristik arah pasar yang berbeda. Misalnya, Anda dapat mempertimbangkan untuk meningkatkan filter tingkat fluktuasi saat masuk multihead juga, atau menyesuaikan tingkat kekakuan pengakuan tren.

  8. Tambahkan waktu penyaringanTambahkan filter waktu perdagangan untuk menghindari saat-saat di mana volatilitas pasar lebih tinggi atau kurang likuid, seperti saat-saat pengumuman data penting atau saat-saat penutupan pasar.

Meringkaskan

Sistem perdagangan penangkapan dan konfirmasi silang tren garis rata-rata ganda adalah strategi perdagangan kuantitatif berdasarkan analisis teknis yang menilai tren pasar melalui kombinasi garis rata-rata dari beberapa periode yang berbeda, dan membuka posisi ketika tren jelas, posisi kosong ketika tren melemah. Keunggulan inti dari strategi ini adalah memanfaatkan tren konfirmasi silang garis rata-rata ganda, mengurangi sinyal yang salah, dan meningkatkan kualitas perdagangan.

Strategi ini berkinerja baik di pasar dengan tren yang jelas, tetapi mungkin menghadapi risiko over-trading di pasar yang bergoyang. Strategi ini dapat meningkatkan stabilitas dan adaptasi lebih lanjut dengan mengintegrasikan indikator RSI dan MACD yang telah dihitung, memperkenalkan mekanisme stop loss dinamis, mengoptimalkan kombinasi parameter rata-rata, dan meningkatkan klasifikasi keadaan pasar.

Untuk aplikasi praktis, disarankan untuk melakukan pengembalian yang cukup pada berbagai lingkungan pasar dan varietas perdagangan, menyesuaikan parameter untuk menyesuaikan dengan karakteristik pasar tertentu, dan mengontrol risiko perdagangan tunggal dalam kombinasi dengan strategi manajemen dana. Selain itu, dapat dipertimbangkan untuk menggunakan strategi ini sebagai bagian dari portofolio, dikombinasikan dengan strategi pelengkap lainnya, untuk menyebarkan risiko perdagangan, meningkatkan stabilitas portofolio keseluruhan.

Kode Sumber Strategi
/*backtest
start: 2025-02-23 00:00:00
end: 2025-03-02 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("etude9", shorttitle="etude 9", overlay=true)
//on tente de comlbiner avec le RSi un stratégie pas si mauvaise sur les longs 
// un d7 r rsi qui donne des indiciataions pas mal pour les short pour les long pas très concluant 
// === Paramètres d'entrée ===
// Source de prix
// et merde rendement sur long est plus efficace sans condition sur ATR !!
// par contre j'ai l'imression que le rsi ça va être bien pour les shorts 
// bon avec le RSi ça donne rien, et avec le macd, ç ce stade c'est foireux mmm 
pricetype = input(close, title="Source de prix pour les moyennes mobiles")

// Périodes des moyennes mobiles
instant = input(14, title="Période de la moyenne instantanée (10)")
interm = input(25, title="Perdiode intermediaire (25)")
shortperiod = input(50, title="Période de la moyenne mobile courte (20)")
mediumperiod = input(100, title="Période de la moyenne mobile moyenne (50)")
longperiod = input(200, title="Période de la moyenne mobile longue (100)")

// Paramètres du RSI
rsi_length = input.int(14, title="Période RSI")
rsi_overbought = input.int(78, title="Niveau de surachat (RSI)")
rsi_oversold = input.int(30, title="Niveau de survente (RSI)")

// Paramètres pour le MACD
fast_length = input.int(12, title="Longueur Rapide MACD")
slow_length = input.int(26, title="Longueur Lente MACD")
signal_length = input.int(9, title="Longueur du Signal MACD")

// Paramètres de l'ATR
atr_length = input.int(14, title="Période ATR")
atr_multiplier = input.float(1.5, title="Multiplicateur ATR pour le Stop-Loss")

// Calcul de l'ATR
atr = ta.atr(atr_length)

// === Calcul des moyennes mobiles (EMA uniquement) ===
instant_ma = ta.ema(pricetype, instant) // Moyenne mobile instantanée
short_ma = ta.ema(pricetype, shortperiod)  // Moyenne mobile courte (20)
medium_ma = ta.ema(pricetype, mediumperiod)  // Moyenne mobile moyenne (50)
long_ma = ta.ema(pricetype, longperiod)    // Moyenne mobile longue (100)
interm_ma = ta.ema(pricetype, interm)

// Calcul du RSI
rsi = ta.rsi(close, rsi_length)

// Calcul du MACD
[macd_line, signal_line, hist_line] = ta.macd(close, fast_length, slow_length, signal_length)

// Stocker les résultats de crossover et crossunder dans des variables globales
is_crossover = ta.crossover(macd_line, signal_line)
is_crossunder = ta.crossunder(macd_line, signal_line)

// Filtre ATR : on ne trade que si la volatilité est suffisante
min_atr = atr > ta.sma(atr, atr_length)  // ATR supérieur à sa moyenne

// === Conditions de tendance ===
trending_up = instant_ma > short_ma and instant_ma > medium_ma and instant_ma > long_ma and short_ma > medium_ma   // Tendance haussière
trending_down = instant_ma< short_ma and instant_ma<medium_ma and instant_ma<long_ma and short_ma<long_ma  // Tendance baissière
// Filtre RSI
rsi_filter_buy = rsi < rsi_overbought  // RSI n'est pas en surachat pour un achat
rsi_filter_sell = rsi > rsi_oversold  // RSI n'est pas en survente pour une vente

// === Gestion des positions ===
var bool in_position = false  // Variable pour suivre si une position est ouverte
var bool is_long = false      // Variable pour suivre si la position est longue ou courte

// === Signaux d'ouverture et de fermeture ===
bool buy_signal = false  // Signal d'ouverture d'une position longue
bool close_signal = false  // Signal de fermeture d'une position longue
bool sell_signal = false  // Signal d'ouverture d'une position courte
bool close_short_signal = false  // Signal de fermeture d'une position courte


// Ouvrir une position longue
if (trending_up and not in_position)
    strategy.entry("Long", strategy.long)
    in_position := true
    is_long := true
    buy_signal := true  // Signal d'ouverture
else
    buy_signal := false

// Fermer la position longue si instant_ma < medium_ma
if (in_position and is_long and instant_ma < short_ma)
    strategy.close("Long")
    in_position := false
    is_long := false
    close_signal := true  // Signal de fermeture
else
    close_signal := false

// Ouvrir une position courte
if (trending_down and not in_position and min_atr)
    strategy.entry("Short", strategy.short)
    in_position := true
    is_long := false
    sell_signal := true  // Signal d'ouverture
else
    sell_signal := false
// Fermer la position courte si instant_ma > medium_ma
if (in_position and not is_long and instant_ma > medium_ma)
    strategy.close("Short")
    in_position := false
    close_short_signal := true  // Signal de fermeture
else
    close_short_signal := false
// === Affichage des signaux sur le graphique ===
plotshape(series=buy_signal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy", size=size.small)
plotshape(series=sell_signal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell", size=size.small)
plotshape(series=close_signal, title="Close Long Signal", location=location.abovebar, color=color.orange, style=shape.labeldown, text="Close Long", size=size.small)
plotshape(series=close_short_signal, title="Close Short Signal", location=location.belowbar, color=color.blue, style=shape.labelup, text="Close Short", size=size.small)

// === Affichage des moyennes mobiles sur le graphique ===
plot(short_ma, color=color.blue, title="Moyenne mobile courte (20)", linewidth=2)
plot(medium_ma, color=color.orange, title="Moyenne mobile moyenne (50)", linewidth=2)
plot(long_ma, color=color.red, title="Moyenne mobile longue (100)", linewidth=2)
plot(instant_ma, color=color.rgb(43, 14, 111), title="Moyenne mobile instantanée (10)", linewidth=2)
plot(interm_ma, color=color.rgb(26, 192, 34), title="Moyenne mobile instantanée (10)", linewidth=2)

// Coloration de fond pour les tendances
bgcolor(color=trending_up ? color.new(color.green, 90) : trending_down ? color.new(color.red, 90) : na, title="Coloration de fond")