Sumber dimuat naik... memuat...

Strategi Salib Purata Bergerak Eksponensial Multi-Period Dinamis dengan Sistem Pengoptimuman Pullback

Penulis:ChaoZhang, Tarikh: 2024-12-27 15:29:38
Tag:EMAMASMARSI

img

Ringkasan

Strategi ini adalah sistem perdagangan kuantitatif berdasarkan pelbagai persimpangan Exponential Moving Average (EMA) dan pengoptimuman pulback. Ia menggunakan lima EMA (EMA5, EMA8, EMA13, EMA21, dan EMA50) untuk memerhatikan hubungan persimpangan antara purata tempoh yang berbeza dan hubungan harga-EMA untuk melaksanakan pembinaan kedudukan yang ditingkatkan dan penutupan kedudukan dinamik. Strategi menggunakan sistem pengurusan modal yang membahagikan kedudukan ke dalam perkadaran yang berbeza seperti 20% dan 40%, secara beransur-ansur membina atau mengurangkan kedudukan berdasarkan pelbagai isyarat pasaran.

Prinsip Strategi

Logik teras merangkumi tiga syarat utama kemasukan dan dua syarat keluar:

  1. Isyarat kemasukan: Buka kedudukan 20% apabila EMA5 melintasi EMA8; Tambah 20% apabila EMA5 melintasi EMA13; Tambah 40% apabila EMA8 melintasi EMA21
  2. Sistem pengoptimuman pulback: Buka 20% kedudukan apabila harga menyentuh EMA50; Tambah 20% apabila harga memecahkan di atas EMA50
  3. Isyarat keluar: Tutup 50% kedudukan apabila EMA5 melintasi di bawah EMA13; Tutup semua kedudukan apabila EMA8 melintasi di bawah EMA21
  4. Kawalan risiko: Memasuki semua kedudukan dengan segera apabila harga, EMA5, dan EMA8 berada di bawah EMA50

Kelebihan Strategi

  1. Mekanisme pengesahan berbilang: Menyediakan isyarat dagangan yang lebih boleh dipercayai melalui pelbagai persimpangan EMA
  2. Pengurusan kedudukan dinamik: Menggunakan saiz kedudukan yang berbeza berdasarkan kekuatan isyarat untuk kawalan risiko yang berkesan
  3. Reka bentuk pengoptimuman pulback: Menggunakan EMA50 sebagai sokongan untuk entri pulback, meningkatkan ketepatan kemasukan
  4. Mekanisme keluar yang fleksibel: Mengambil strategi penutupan kedudukan yang ditingkatkan untuk mengekalkan keuntungan sambil mengawal pengeluaran
  5. Kawalan risiko yang komprehensif: Menetapkan syarat berhenti kerugian yang jelas untuk mengelakkan kerugian daripada trend penurunan yang ketara

Risiko Strategi

  1. Lag EMA: Purata bergerak mempunyai lag yang melekat, yang boleh menyebabkan isyarat tertunda
  2. Risiko pasaran sampingan: Boleh menghasilkan pecah palsu yang kerap di pasaran yang berbeza
  3. Risiko perdagangan berlebihan: Keadaan kemasukan berganda boleh membawa kepada perdagangan berlebihan
  4. Kos pelaksanaan: Dagangan yang kerap boleh mengakibatkan perbelanjaan komisen yang tinggi
  5. Risiko sistematik: Mungkin tidak keluar dari kedudukan dengan cepat dalam pasaran yang sangat tidak menentu

Arahan pengoptimuman

  1. Memperkenalkan penapis trend: Tambah penunjuk seperti ADX untuk melaksanakan perdagangan hanya dalam trend yang kuat
  2. Mengoptimumkan pengurusan kedudukan: Sesuaikan saiz kedudukan secara dinamik berdasarkan turun naik
  3. Menggabungkan pengenalan corak harga: Gabungkan corak candlestick untuk meningkatkan ketepatan kemasukan
  4. Mempertingkatkan mekanisme mengambil keuntungan: Tetapkan tahap mengambil keuntungan yang dinamik untuk memastikan keuntungan yang lebih baik
  5. Tambah penunjuk sentimen pasaran: Memperkenalkan penunjuk seperti RSI untuk menapis keadaan pasaran

Ringkasan

Strategi ini membina sistem dagangan yang agak lengkap melalui pelbagai persilangan EMA dan pengoptimuman pulback. Kekuatannya terletak pada mekanisme pengesahan berganda dan pengurusan kedudukan yang fleksibel, walaupun ia mempunyai batasan yang melekat seperti lag EMA. Kestabilan dan keuntungan strategi ini dapat ditingkatkan dengan memperkenalkan penapis trend dan pengoptimuman lain. Ia sesuai untuk pasaran yang sedang berkembang, dan peniaga perlu mengoptimumkan parameter berdasarkan keadaan pasaran sebenar.


/*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))


Berkaitan

Lebih lanjut