
Strategi ini dirancang untuk trader swing yang ingin membangun posisi multi-headed dalam pullback setelah perubahan tren jangka pendek, sementara segera masuk ke posisi overhead ketika kondisi pasar menguntungkan untuk bergerak ke bawah. Strategi ini menggabungkan konfirmasi tren silang SMA, titik masuk pullback persentase tetap, dan parameter manajemen risiko yang dapat disesuaikan untuk mencapai eksekusi perdagangan yang optimal.
Inti dari strategi ini adalah menggunakan simpul moving average (SMA) 10 siklus dan 25 siklus untuk mengkonfirmasi arah tren, dan digabungkan dengan 150 siklus indeks moving average (EMA) sebagai syarat penyaringan tambahan untuk perdagangan kosong. Perdagangan multihead tidak masuk langsung setelah SMA, tetapi menunggu untuk masuk setelah harga kembali ke persentase yang ditentukan, metode ini mengoptimalkan harga masuk dan meningkatkan risiko-pengembalian.
Strategi ini dapat dibagi menjadi beberapa bagian utama:
Mekanisme pengakuan tren:
Mekanisme panggilan balik:
Aturan masuk dengan kepala kosong:
Strategi Manajemen Risiko dan Keluar:
Strategi menggunakan variabel permanen untuk melacak sinyal mundur untuk memastikan masuk pada waktu yang tepat. Ketika tidak ada posisi, sistem akan mengatur ulang semua tanda dan level untuk mempersiapkan sinyal perdagangan berikutnya.
Setelah menganalisis kode secara mendalam, strategi ini menunjukkan keuntungan yang signifikan:
Waktu masuk yang dioptimalkan:
Manajemen risiko yang komprehensif:
Filter yang selaras tren:
Umpan balik visual:
Sangat mudah beradaptasi:
Meskipun ada banyak keuntungan dari strategi ini, ada risiko berikut yang perlu diperhatikan:
Risiko Pasar Cepat:
Performa pasar yang bergoyang:
Keterbatasan manajemen risiko dengan poin tetap:
Terlalu mengandalkan indikator teknis:
Risiko Optimasi Parameter:
Berdasarkan analisis kode, berikut adalah beberapa arah utama di mana strategi ini dapat dioptimalkan:
Manajemen risiko dinamis:
stopDistance = input.float(2.0) * ta.atr(14)Cara menghitungFilter intensitas tren:
Analisis multi-frame waktu:
Pengakuan Resonansi Cerdas:
Konfirmasi volume transaksi:
Parameter adaptasi:
Strategi masuk yang dinamis adalah sistem perdagangan yang dirancang dengan baik yang menggabungkan identifikasi tren, optimalisasi masuk, dan manajemen risiko yang komprehensif. Dengan menunggu harga untuk kembali masuk, strategi ini mendapatkan harga masuk dan pengembalian risiko yang lebih baik daripada sistem silang SMA sederhana.
Keunggulan inti dari strategi ini adalah fleksibilitas dan fleksibilitasnya, yang memungkinkan pedagang untuk menyesuaikan parameter sesuai dengan preferensi risiko pribadi dan kondisi pasar. Sementara itu, fungsi manajemen risiko yang terintegrasi (termasuk stop loss, stop loss, dan titik aman) memberikan perlindungan dana yang komprehensif.
Namun, strategi ini juga memiliki beberapa keterbatasan, termasuk kinerja di pasar yang bergolak dan keterbatasan manajemen risiko poin tetap. Dengan menerapkan optimasi rekomendasi, seperti manajemen risiko dinamis, penyaringan intensitas tren, dan konfirmasi volume perdagangan, strategi dapat secara signifikan meningkatkan stabilitas dan kinerja keseluruhan.
Ini adalah strategi dasar yang ideal untuk pedagang swing dan dapat disesuaikan lebih lanjut sesuai dengan gaya dan tujuan perdagangan individu. Dengan pengaturan parameter yang masuk akal dan penyesuaian pemantauan yang berkelanjutan, strategi ini berpotensi memberikan hasil perdagangan yang stabil di berbagai lingkungan pasar.
/*backtest
start: 2024-08-01 00:00:00
end: 2025-03-25 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("BTCUSD with adjustable sl,tp",
overlay=true,
initial_capital=10000,
default_qty_type=strategy.percent_of_equity,
default_qty_value=10,
calc_on_every_tick=true)
// ─────────────────────────────────────────────────────────────────────────────
// ▌ USER INPUTS
// ─────────────────────────────────────────────────────────────────────────────
longSignalStyle = input.string("Label Up", title="Long Signal Style", options=["Label Up", "Arrow Up", "Cross"])
shortSignalStyle = input.string("Label Down", title="Short Signal Style", options=["Label Down", "Arrow Down", "Cross"])
// Adjustable exit parameters (in points)
tpDistance = input.int(1000, "Take Profit Distance (points)", minval=1)
slDistance = input.int(250, "Stop Loss Distance (points)", minval=1)
beTrigger = input.int(500, "Break-Even Trigger Distance (points)", minval=1)
// Adjustable retracement percentage for long pullback entry (e.g. 0.01 = 1%)
retracementPct = input.float(0.01, "Retracement Percentage (e.g. 0.01 for 1%)", step=0.001)
// ─────────────────────────────────────────────────────────────────────────────
// ▌ INDICATORS: SMA & EMA
// ─────────────────────────────────────────────────────────────────────────────
sma10 = ta.sma(close, 10)
sma25 = ta.sma(close, 25)
ema150 = ta.ema(close, 150)
plot(sma10, color=color.blue, title="SMA 10")
plot(sma25, color=color.red, title="SMA 25")
plot(ema150, color=color.orange, title="EMA 150")
// ─────────────────────────────────────────────────────────────────────────────
// ▌ ENTRY CONDITIONS
// ─────────────────────────────────────────────────────────────────────────────
longCondition = ta.crossover(sma10, sma25)
shortCondition = ta.crossunder(sma10, sma25)
shortValid = close < ema150 // Only take shorts if price is below EMA150
// Plot immediate entry signals (for visual reference)
plotshape(longCondition and (strategy.position_size == 0), title="Long Signal",
style=(longSignalStyle == "Label Up" ? shape.labelup : (longSignalStyle == "Arrow Up" ? shape.triangleup : shape.cross)),
location=location.belowbar, color=color.green, text="Long", size=size.small)
plotshape(shortCondition and shortValid and (strategy.position_size == 0), title="Short Signal",
style=(shortSignalStyle == "Label Down" ? shape.labeldown : (shortSignalStyle == "Arrow Down" ? shape.triangledown : shape.cross)),
location=location.abovebar, color=color.red, text="Short", size=size.small)
// ─────────────────────────────────────────────────────────────────────────────
// ▌ LONG PULLBACK ENTRY USING FIXED PERCENTAGE RETRACEMENT
// ─────────────────────────────────────────────────────────────────────────────
// We use persistent variables to track the pullback signal.
var bool longSignalActive = false
var float pullHigh = na // highest high since long signal activation
var float retraceLevel = na // level = pullHigh * (1 - retracementPct)
// Only consider new entries when no position is open.
if strategy.position_size == 0
// When a long crossover occurs, activate the signal and initialize pullHigh.
if longCondition
longSignalActive := true
pullHigh := high
// If signal active, update pullHigh and compute retracement level.
if longSignalActive
pullHigh := math.max(pullHigh, high)
retraceLevel := pullHigh * (1 - retracementPct)
// When price bounces upward and crosses above the retracement level, enter long
if ta.crossover(close, retraceLevel)
strategy.entry("Long", strategy.long)
longSignalActive := false
// Short entries: enter immediately if conditions are met
if shortCondition and shortValid
strategy.entry("Short", strategy.short)
// ─────────────────────────────────────────────────────────────────────────────
// ▌ EXIT CONDITIONS WITH ADJUSTABLE TP, SL & BE
// ─────────────────────────────────────────────────────────────────────────────
var bool beLong = false
var bool beShort = false
// LONG EXIT LOGIC
if strategy.position_size > 0 and strategy.position_avg_price > 0
longEntry = strategy.position_avg_price
// Additional exit: if SMA(10) crosses below SMA(25) while price < EMA150, exit long
if ta.crossunder(sma10, sma25) and close < ema150
label.new(bar_index, low, "SMA Exit", style=label.style_label_down, color=color.red, textcolor=color.white)
strategy.close("Long", comment="SMA Cross Exit")
// Break-even trigger if price moves in favor by beTrigger points
if close >= longEntry + beTrigger
beLong := true
effectiveLongStop = beLong ? longEntry : (longEntry - slDistance)
if close <= effectiveLongStop
label.new(bar_index, low, (beLong ? "BE Hit" : "SL Hit"), style=label.style_label_down, color=color.red, textcolor=color.white)
strategy.close("Long", comment=(beLong ? "BE Hit" : "SL Hit"))
if close >= longEntry + tpDistance
label.new(bar_index, high, "TP Hit", style=label.style_label_up, color=color.green, textcolor=color.white)
strategy.close("Long", comment="TP Hit")
// SHORT EXIT LOGIC
if strategy.position_size < 0 and strategy.position_avg_price > 0
shortEntry = strategy.position_avg_price
// Basic stop logic
if close >= shortEntry + slDistance
label.new(bar_index, high, (beShort ? "BE Hit" : "SL Hit"), style=label.style_label_up, color=color.red, textcolor=color.white)
strategy.close("Short", comment=(beShort ? "BE Hit" : "SL Hit"))
// Take profit logic
if close <= shortEntry - tpDistance
label.new(bar_index, low, "TP Hit", style=label.style_label_down, color=color.green, textcolor=color.white)
strategy.close("Short", comment="TP Hit")
// Break-even trigger
if close <= shortEntry - beTrigger
beShort := true
effectiveShortStop = beShort ? shortEntry : (shortEntry + slDistance)
if close >= effectiveShortStop
label.new(bar_index, high, (beShort ? "BE Hit" : "SL Hit"), style=label.style_label_up, color=color.red, textcolor=color.white)
strategy.close("Short", comment=(beShort ? "BE Hit" : "SL Hit"))
// Reset BE flags when no position is open
if strategy.position_size == 0
beLong := false
beShort := false
// Reset the pullback signal
if not longSignalActive
pullHigh := na
retraceLevel := na