Strategi Crossover Rata-rata Bergerak Eksponensial Multi-Periode Dinamis dan Sistem Optimasi Penarikan

EMA MA SMA RSI
Tanggal Pembuatan: 2024-12-27 15:29:38 Akhirnya memodifikasi: 2024-12-27 15:29:38
menyalin: 1 Jumlah klik: 415
1
fokus pada
1617
Pengikut

Strategi Crossover Rata-rata Bergerak Eksponensial Multi-Periode Dinamis dan Sistem Optimasi Penarikan

Ringkasan

Strategi ini adalah sistem perdagangan kuantitatif berdasarkan beberapa persilangan rata-rata pergerakan eksponensial (EMA) dan optimasi penelusuran kembali. Ia menggunakan lima rata-rata pergerakan, EMA5, EMA8, EMA13, EMA21 dan EMA50, dan mewujudkan pembukaan batch dan penutupan posisi dinamis dengan mengamati hubungan silang antara rata-rata pergerakan dari periode yang berbeda dan hubungan posisi antara harga dan rata-rata pergerakan. Strategi ini mengadopsi sistem pengelolaan uang, membagi posisi ke dalam proporsi berbeda seperti 20%, 40%, dst., dan secara bertahap membangun atau mengurangi posisi sesuai dengan sinyal pasar yang berbeda.

Prinsip Strategi

Logika inti dari strategi ini mencakup tiga kondisi masuk utama dan dua kondisi keluar:

  1. Sinyal untuk membuka posisi antara lain: membuka posisi sebesar 20% ketika EMA5 melintasi EMA8; menambah posisi sebesar 20% ketika EMA5 melintasi EMA13; menambah posisi sebesar 40% ketika EMA8 melintasi EMA21
  2. Sistem optimasi retracement: buka posisi 20% saat harga mencapai EMA50; tambahkan 20% saat harga menembus EMA50 lagi
  3. Sinyal penutupan: Ketika EMA5 melintasi di bawah EMA13, tutup 50% posisi; ketika EMA8 melintasi di bawah EMA21, tutup semua posisi
  4. Pengendalian risiko: Ketika harga, EMA5 dan EMA8 berada di bawah EMA50 pada saat yang sama, segera hapus semua posisi

Keunggulan Strategis

  1. Mekanisme konfirmasi ganda: Memberikan sinyal perdagangan yang lebih andal melalui beberapa persilangan rata-rata pergerakan
  2. Manajemen posisi dinamis: Gunakan rasio posisi yang berbeda sesuai dengan kekuatan sinyal yang berbeda untuk mengendalikan risiko secara efektif
  3. Desain optimasi retracement: Gunakan EMA50 sebagai level support untuk pembelian retracement guna meningkatkan akurasi entri
  4. Mekanisme likuidasi yang fleksibel: mengadopsi strategi likuidasi langkah demi langkah untuk mengendalikan retracement sambil mempertahankan keuntungan
  5. Kontrol risiko yang sempurna: tetapkan kondisi stop loss yang jelas untuk mencegah kerugian yang disebabkan oleh penurunan tajam

Risiko Strategis

  1. Histerisis rata-rata bergerak: Rata-rata bergerak itu sendiri memiliki histerisis, yang dapat menyebabkan penundaan sinyal
  2. Risiko pasar yang fluktuatif: Penembusan palsu yang sering terjadi dapat terjadi di pasar yang sideways dan fluktuatif
  3. Risiko perdagangan berlebihan: Beberapa kondisi pembukaan dapat menyebabkan perdagangan berlebihan
  4. Biaya eksekusi: Perdagangan yang sering dapat mengakibatkan biaya transaksi yang lebih tinggi
  5. Risiko sistemik: Mungkin sudah terlambat untuk menutup posisi di pasar yang bergejolak

Arah optimasi strategi

  1. Memperkenalkan filter tren: Anda dapat menambahkan indikator tren seperti ADX untuk mengeksekusi transaksi hanya ketika ada tren yang kuat
  2. Optimalkan manajemen posisi: sesuaikan ukuran posisi secara dinamis berdasarkan volatilitas
  3. Tambahkan pengenalan pola harga: Gabungkan pola K-line untuk meningkatkan akurasi entri
  4. Tingkatkan mekanisme stop-profit: Anda dapat mengatur garis stop-profit dinamis untuk mengunci keuntungan dengan lebih baik
  5. Tambahkan indikator sentimen pasar: perkenalkan RSI dan indikator lain untuk memfilter status pasar

Meringkaskan

Strategi ini membangun sistem perdagangan yang relatif lengkap melalui beberapa persilangan rata-rata pergerakan dan sistem pengoptimalan penelusuran kembali. Keunggulannya terletak pada banyaknya mekanisme konfirmasi dan manajemen posisi yang fleksibel, tetapi juga memiliki kekurangan seperti kelambatan rata-rata pergerakan. Dengan memperkenalkan metode pengoptimalan seperti filter tren, stabilitas dan profitabilitas strategi dapat lebih ditingkatkan. Strategi ini cocok digunakan di pasar dengan tren yang jelas, dan pedagang diharuskan mengoptimalkan parameter berdasarkan kondisi pasar sebenarnya.

Kode Sumber Strategi
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("EMA Strategy with Price & EMA5 & EMA8 < EMA50 Condition", overlay=true, margin_long=100, initial_capital=10000, commission_type=strategy.commission.percent, commission_value=0.1)

// ==============================
// INPUTS
// ==============================
lengthEMA5 = input.int(5, "EMA5 Length")
lengthEMA8 = input.int(8, "EMA8 Length")
lengthEMA13 = input.int(13, "EMA13 Length")
lengthEMA21 = input.int(21, "EMA21 Length")
lengthEMA50 = input.int(50, "EMA50 Length")

// Tam pozisyon boyutu (örnek: 100 birim)
full_position = 100.0 
qty20 = full_position * 0.2
qty40 = full_position * 0.4

// ==============================
// EMA HESAPLAMALARI
// ==============================
ema5 = ta.ema(close, lengthEMA5)
ema8 = ta.ema(close, lengthEMA8)
ema13 = ta.ema(close, lengthEMA13)
ema21 = ta.ema(close, lengthEMA21)
ema50 = ta.ema(close, lengthEMA50)

// ==============================
// KESİŞİMLERİ TESPİT FONKSİYONLARI
// ==============================
crossUp(src1, src2) => ta.crossover(src1, src2)
crossDown(src1, src2) => ta.crossunder(src1, src2)

// ==============================
// STRATEJİ KOŞULLARI
// ==============================

// Adım 1: EMA5, EMA8’i yukarı keserse %20’lik alım
step1_condition = crossUp(ema5, ema8)

// Adım 2: EMA5, EMA8’i yukarı kestikten sonra EMA5, EMA13’ü de yukarı keserse %20 daha alım
step2_condition = crossUp(ema5, ema13)

// Adım 3: EMA8, EMA21’i yukarı keserse %40 alım
step3_condition = crossUp(ema8, ema21)

// Çıkış koşulları:
// EMA5, EMA13’ü aşağı keserse pozisyonun %50’sini kapat.
// EMA8, EMA21’i aşağı keserse tüm pozisyonu kapat.
half_close_condition = crossDown(ema5, ema13)
full_close_condition = crossDown(ema8, ema21)

// Düşüşlerde EMA50'ye dokunma -> %20 alım
pullback_condition = low <= ema50 or close <= ema50

// Fiyat tekrar EMA50'nin üzerine çıkarsa -> %20 alım
above_ema50_condition = crossUp(close, ema50)

// Yeni ek koşul:  
// Fiyat, EMA5 ve EMA8’in herbiri EMA50’nin altındaysa tüm pozisyon kapat.
// Bu durum tam bir düşüş senaryosunu işaret eder.
all_below_condition = (close < ema50) and (ema5 < ema50) and (ema8 < ema50)

// Mevcut pozisyon büyüklüğü
pos_size = strategy.position_size

// ==============================
// POZİSYON GİRİŞLERİ
// ==============================
if (step1_condition and pos_size == 0)
    strategy.entry("Step1", strategy.long, qty=qty20)

if (step2_condition and strategy.opentrades < 2)
    strategy.entry("Step2", strategy.long, qty=qty20)

if (step3_condition and strategy.opentrades < 3)
    strategy.entry("Step3", strategy.long, qty=qty40)

// Pullback: Fiyat EMA50'ye temas ederse ve pozisyon yoksa %20 alım
if (pullback_condition and strategy.opentrades == 0)
    strategy.entry("Pullback", strategy.long, qty=qty20)

// Fiyat EMA50’nin üzerine çıkarsa ve pozisyon %100'e ulaşmamışsa %20 alım
if (above_ema50_condition and strategy.opentrades < 4)
    strategy.entry("Above50", strategy.long, qty=qty20)

// ==============================
// POZİSYON YÖNETİMİ (ÇIKIŞLAR)
// ==============================
if (all_below_condition and strategy.opentrades > 0)
    // Tüm pozisyonu kapat çünkü sert düşüş senaryosuna girildi
    strategy.close("Step3")
    strategy.close("Step2")
    strategy.close("Step1")
    strategy.close("Pullback")
    strategy.close("Above50")
else
    // Yarı kapatma (EMA5, EMA13 aşağı kesişimi)
    if (half_close_condition)
        totalTrades = strategy.opentrades
        // Öncelikle en son açılan en büyük pozisyonu kapatarak kademeli küçültme
        if (totalTrades >= 3)
            strategy.close("Step3")     // Bu 40% kapatır
        else if (totalTrades == 2)
            strategy.close("Step2")     // Bu 20% kapatır
        else if (totalTrades == 1)
            strategy.close("Step1")     // Bu da 20% kapatır (tamamen çıkar, ama basitlik için böyle)

    // Tam kapatma (EMA8, EMA21 aşağı kesişimi)
    if (full_close_condition)
        // Açık olan tüm pozisyonları kapat
        strategy.close("Step3")
        strategy.close("Step2")
        strategy.close("Step1")
        strategy.close("Pullback")
        strategy.close("Above50")

// ==============================
// GÖRSELLEŞTİRME
// ==============================
plot(ema5, "EMA5", color=color.new(color.yellow, 0))
plot(ema8, "EMA8", color=color.new(color.blue, 0))
plot(ema13, "EMA13", color=color.new(color.green, 0))
plot(ema21, "EMA21", color=color.new(color.red, 0))
plot(ema50, "EMA50", color=color.new(color.purple, 0))