
Trend-driven pyramid recovery equity crossover strategi adalah sistem perdagangan kuantitatif komprehensif yang menggabungkan trend tracking, reversal signal identification dan pyramidal position recovery mechanism. Strategi ini didasarkan pada multi-index moving average (EMA) crossover untuk menentukan arah tren pasar, menggunakan sinyal masuk yang dikonfirmasi dengan bentuk penetrasi, dan dilengkapi dengan manajemen dana piramida dan fitur stop loss mobile untuk membangun sebuah perdagangan yang lengkap.
Strategi ini terutama mengandalkan tiga periode yang berbeda dari indeks moving average (EMA20, EMA50 dan EMA200) untuk menilai tren pasar, dan digabungkan dengan bentuk grafik pivot sebagai kondisi pemicu sinyal masuk. Secara khusus, prinsip operasi strategi adalah sebagai berikut:
Mekanisme penilaian tren:
Sinyal masuk:
Penyaringan:
Manajemen Risiko:
Mekanisme pemulihan piramida:
Dalam implementasi kode, pertama-tama didefinisikan tiga indikator EMA ((20,50,200), lalu dibangun logika penyaringan untuk menghilangkan keragu-raguan. Strategi memiliki dua kondisi pembelian: pembelian tren dan pembelian balik. Pembelian tren mengharuskan indikator EMA untuk memenuhi alignment multihead dan muncul pola penetrasi bullish; pembelian balik mencari pola penetrasi bullish di pasar alignment kosong sebagai sinyal reversal. Stop loss dan stop loss didasarkan pada hitungan titik tetap, dan setelah mencapai keuntungan tertentu, stop loss tracking diaktifkan.
Adaptasi pasar secara keseluruhanDengan menyertakan trend tracking dan reversal strategi, sistem ini dapat mencari peluang perdagangan di berbagai lingkungan pasar, dan tidak terbatas pada kondisi pasar tunggal.
Manajemen risiko multi-tingkatDengan tiga mekanisme perlindungan: Stop loss tetap, Stop loss proporsional, dan Stop loss tracking, tanpa membatasi potensi keuntungan sementara melindungi dana.
Mekanisme pemulihan piramida: Sistem pemulihan yang diperkenalkan secara inovatif, meningkatkan efisiensi pemulihan dana dengan meningkatkan posisi secara ilmiah untuk menanggapi kerugian berturut-turut.
Manajemen posisi yang dinamis: Mengatur ukuran posisi secara otomatis sesuai dengan kinerja perdagangan, mempertahankan posisi dasar selama keuntungan, dan meningkatkan posisi secara bertahap selama kerugian untuk mempercepat pemulihan.
Indikator teknis dan bentukTidak hanya mengandalkan indikator teknis seperti moving averages, tetapi juga menggabungkan analisis graph morphologi untuk meningkatkan kualitas sinyal melalui multiple confirmation.
Filter masuk yang halus: Filter keragu-raguan dengan parameter body_ratio untuk mengurangi risiko sinyal palsu.
Tag visual yang sederhana: Sinyal perdagangan ditampilkan secara intuitif pada grafik, untuk memudahkan analisis dan pemantauan real-time.
Risiko ekspansi posisi yang cepat: Mekanisme pemulihan piramida dapat menyebabkan peningkatan posisi dengan cepat ketika kerugian berturut-turut terjadi, dan jika pasar terus-menerus tidak menguntungkan, kerugian dapat meningkat. Disarankan untuk mengendalikan parameter max_recovery dalam kisaran yang wajar dan menyesuaikan base_position sesuai dengan jumlah total modal.
Keterlambatan dalam perubahan trenSistem yang didasarkan pada rata-rata bergerak mungkin bereaksi lambat pada awal perubahan tren, menyebabkan keterlambatan waktu masuk atau keluar. Pertimbangan dapat dilakukan dalam kombinasi dengan indikator yang lebih sensitif seperti RSI atau MACD sebagai penilaian tambahan.
Risiko kehilangan poin tetap: Ketika volatilitas pasar berubah, stop loss dengan titik tetap mungkin terlalu lebar atau terlalu sempit. Disarankan untuk mempertimbangkan penggunaan ATR (Average True Range) untuk menyesuaikan jarak stop loss secara dinamis.
Sinyal palsu yang menelan bentukDi pasar horizontal, bentuk penelan mungkin menghasilkan lebih banyak sinyal palsu. Kualitas sinyal dapat ditingkatkan dengan meningkatkan konfirmasi volume transaksi atau indikator tambahan lainnya.
Pembatasan transaksi satu arahStrategi saat ini hanya melakukan beberapa operasi, dan mungkin melewatkan peluang shorting di pasar beruang. Pertimbangkan untuk menambahkan logika shorting simetris untuk menyesuaikan pasar dua arah.
Tekanan untuk mengelola uang: Pada tingkat pemulihan maksimum, dukungan keuangan yang lebih besar diperlukan. Disarankan untuk mengatur parameter pyramid_factor dan max_recovery dengan hati-hati sesuai dengan skala akun total.
Mekanisme Stop Loss Dinamis: Mengganti stop loss dengan stop loss dinamis berbasis ATR, lebih sesuai dengan perubahan volatilitas pasar. Implementasi adalah dengan menghitung nilai ATR saat ini, kemudian mengatur stop loss sebagai kelipatan dari harga masuk dikurangi ATR.
Tambahkan logika kosong: Menambahkan kondisi shorting simetris, sehingga strategi dapat sama efektifnya di pasar turun. Metode implementasi adalah dengan menyalin logika beli yang ada, mengatur kondisi dan arah masuk yang terbalik.
Meningkatkan penilaian trenSelain EMA, diperkenalkan lebih banyak alat pengakuan tren, seperti ADX (Indikator Kekuatan Tren), untuk menyaring lingkungan tren yang lebih kuat. Kondisi seperti “ADX > 25” dapat ditambahkan sebagai filter kekuatan tren.
Rasio resiko yang dioptimalkan: Berdasarkan data retrospeksi sejarah, untuk menemukan rasio stop loss dan stop loss yang optimal, parameter tp_multiplier mungkin perlu disesuaikan.
Filter waktuMenambahkan kondisi penyaringan waktu, menghindari saat-saat pasar yang rendah volatilitas atau tidak stabil. Khusus untuk perdagangan indeks, dapat fokus pada saat-saat pasar aktif.
Optimalkan sistem pemulihanPertimbangkan untuk menyesuaikan faktor piramida secara dinamis berdasarkan kemenangan dan kekalahan, bukan menggunakan perkalian tetap.
Peningkatan sebagian dari profit lockdown: Setelah mencapai keuntungan tertentu, batch posisi kosong untuk mengunci sebagian dari keuntungan, sementara mempertahankan sisa posisi untuk melacak tren.
Integrasi indikator emosiIntroduksi indikator sentimen pasar seperti VIX atau market breadth indicator, menyesuaikan parameter strategi atau menangguhkan perdagangan pada saat sentimen ekstrem.
Trend-driven pyramid recovery type equity crossover strategy adalah sistem komprehensif yang menggabungkan beberapa ide perdagangan, terutama dengan menilai tren melalui EMA crossover, sinyal pengesahan tren, dan bekerja sama dengan mekanisme pemulihan piramida inovatif untuk mengelola risiko dan mengoptimalkan efisiensi modal. Keunggulan inti dari strategi ini adalah kemampuan untuk beradaptasi dengan berbagai kondisi pasar, sambil memberikan mekanisme kontrol risiko yang baik.
Strategi ini sangat cocok untuk pedagang yang memiliki pengetahuan tentang analisis teknis dan bersedia menerima risiko moderat untuk mengejar pengembalian yang stabil dalam jangka panjang. Dengan penerapan arah optimasi di atas, stabilitas dan adaptasi strategi dapat ditingkatkan lebih lanjut, terutama di lingkungan dengan perubahan volatilitas pasar yang besar.
Secara keseluruhan, strategi ini mewakili metode yang khas untuk analisis teknis, manajemen risiko, dan manajemen dana yang digunakan secara terpadu dalam perdagangan kuantitatif modern, memberikan pedagang kerangka kerja yang dapat diskalakan yang dapat disesuaikan dan dioptimalkan sesuai dengan kebutuhan pribadi dan lingkungan pasar.
/*backtest
start: 2024-06-23 00:00:00
end: 2025-06-21 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"DOGE_USDT"}]
*/
//@version=5
strategy("DJ30 Sniper (Trend + Reversal Buy + Pyramid Recovery + Trailing)", overlay=true, default_qty_value=1)
// === INPUTS ===
ema_fast = input.int(20, "EMA Fast")
ema_mid = input.int(50, "EMA Mid")
ema_slow = input.int(200, "EMA Slow")
rsi_period = input.int(14, "RSI Period")
sl_points = input.int(650, "Stop Loss (Points)")
tp_extra = input.int(200, "Extra TP Points")
tp_multiplier = 5
trailing_trigger = input.int(100, "Activate Trailing SL After (Points)")
trailing_stop = input.int(500, "Trailing Stop Size (Points)")
// === Recovery Settings ===
max_recovery = input.int(3, "Max Pyramid Levels", minval=1)
base_position = input.float(1000, "Base Order Size ($)") // 🔁 doubled from 500 to 1000
pyramid_factor = input.float(2.0, "Recovery Multiplier")
// === MAs ===
ema20 = ta.ema(close, ema_fast)
ema50 = ta.ema(close, ema_mid)
ema200 = ta.ema(close, ema_slow)
// === Candle Filter ===
body = math.abs(close - open)
candle_range = high - low
body_ratio = candle_range != 0 ? body / candle_range : 0
not_indecision = body_ratio > 0.3
// === Buy Conditions ===
bull_trend = ema20 > ema50 and ema50 > ema200 and close > ema200
engulfing_bullish = close > open and close > close[1] and open < open[1]
buy_trend = bull_trend and engulfing_bullish and not_indecision
bear_trend = ema20 < ema50 and ema50 < ema200 and close < ema200
engulfing_bearish = close < open and close < close[1] and open > open[1]
buy_reversal = bear_trend and engulfing_bearish and not_indecision
buy_condition = buy_trend or buy_reversal
// === SL/TP ===
tp_points = sl_points * tp_multiplier + tp_extra
sl_buy = close - sl_points * syminfo.mintick
tp_buy = close + tp_points * syminfo.mintick
// === Recovery Logic ===
var int recovery_level = 0
var float position_size = base_position
if strategy.closedtrades > 0
last_trade = strategy.closedtrades - 1
last_profit = strategy.closedtrades.profit(last_trade)
if last_profit > 0
recovery_level := 0
else
recovery_level := math.min(recovery_level + 1, max_recovery)
position_size := base_position * math.pow(pyramid_factor, recovery_level)
// === Trade Execution ===
if buy_condition and strategy.opentrades == 0
strategy.entry("Buy DJ30", strategy.long, qty=position_size)
// === Exit Logic ===
if strategy.opentrades > 0
entry_price = strategy.opentrades.entry_price(0)
unrealized_points = (close - entry_price) / syminfo.mintick
if unrealized_points >= trailing_trigger
strategy.exit("Trail Exit", from_entry="Buy DJ30", trail_points=trailing_stop, trail_offset=trailing_stop)
else
strategy.exit("Fixed Exit", from_entry="Buy DJ30", stop=sl_buy, limit=tp_buy)
// === Visual Markers ===
plotshape(buy_trend, location=location.belowbar, style=shape.labelup, color=color.green, text="TrendBuy")
plotshape(buy_reversal, location=location.belowbar, style=shape.labelup, color=color.orange, text="RevBuy")