
Strategi masuk masuk dinamik yang boleh disesuaikan dengan risiko adalah dirancang untuk pedagang goyang yang ingin membina kedudukan multihead dalam penarikan balik selepas perubahan trend jangka pendek, dan segera masuk ke atas apabila keadaan pasaran menguntungkan pergerakan ke bawah. Strategi ini menggabungkan pengesahan trend silang SMA, titik masuk penarikan balik peratusan tetap, dan parameter pengurusan risiko yang boleh disesuaikan untuk melaksanakan perdagangan yang optimum.
Inti strategi ini adalah menggunakan simpul bergerak rata-rata (SMA) 10 kitaran dan 25 kitaran untuk mengesahkan arah trend, dan digabungkan dengan 150 kitaran indeks bergerak rata-rata (EMA) sebagai syarat penapisan tambahan untuk perdagangan kosong. Perdagangan bertopeng tidak masuk segera selepas SMA bercampur, tetapi menunggu harga kembali ke peratusan yang ditetapkan untuk masuk, kaedah ini mengoptimumkan harga masuk, meningkatkan risiko dan ganjaran.
Strategi ini boleh dibahagikan kepada beberapa bahagian utama:
Mekanisme pengesahan trend:
Mekanisme panggilan balik berbilang kepala:
Peraturan kemasukan kepala kosong:
Strategi Pengurusan Risiko dan Keluar:
Strategi menggunakan pembolehubah berpanjangan untuk mengesan isyarat penarikan balik, memastikan kemasukan pada masa yang tepat. Apabila tidak ada ruang, sistem akan menetapkan semula semua tanda dan tahap untuk menyediakan isyarat perdagangan seterusnya.
Setelah menganalisis kod secara mendalam, strategi ini menunjukkan kelebihan yang ketara:
Masa kemasukan yang optimum:
Pengurusan risiko menyeluruh:
Penapisan trend:
Maklum balas visual:
Sangat boleh menyesuaikan diri:
Walaupun terdapat banyak kelebihan, strategi ini mempunyai risiko yang perlu diperhatikan:
Risiko pasaran pantas:
Pertunjukan pasaran yang bergolak:
Batasan pengurusan risiko mata tetap:
Terlalu banyak bergantung kepada petunjuk teknikal:
Risiko Pengoptimuman Parameter:
Berdasarkan analisis kod, berikut adalah beberapa arah utama di mana strategi ini boleh dioptimumkan:
Pengurusan risiko dinamik:
stopDistance = input.float(2.0) * ta.atr(14)Kaedah pengiraanPenapis kekuatan trend:
Analisis pelbagai kerangka masa:
Pengiktirafan kembalian pintar:
Pengesahan jumlah transaksi:
Parameter penyesuaian:
Strategi kemasukan yang dinamik adalah sistem perdagangan yang dirancang dengan baik yang menggabungkan pengenalan trend, pengoptimuman kemasukan dan pengurusan risiko yang komprehensif. Dengan menunggu kenaikan harga dan masuk semula, strategi ini memperoleh harga kemasukan dan ganjaran risiko yang lebih baik daripada sistem silang SMA yang mudah.
Kelebihan utama strategi ini adalah fleksibiliti dan penyesuaian yang membolehkan peniaga menyesuaikan parameter mengikut pilihan risiko peribadi dan keadaan pasaran. Di samping itu, fungsi pengurusan risiko bersepadu (termasuk stop loss, stop loss dan titik perlindungan) memberikan perlindungan dana yang komprehensif.
Walau bagaimanapun, strategi ini juga mempunyai beberapa batasan, termasuk prestasi dalam pasaran yang bergolak dan pengendalian risiko titik tetap. Dengan melaksanakan pengoptimuman yang disyorkan, seperti pengurusan risiko dinamik, penapisan kekuatan trend dan pengesahan jumlah perdagangan, anda dapat meningkatkan kekuatan strategi dan prestasi keseluruhan.
Ini adalah strategi asas yang ideal untuk peniaga goyang, yang boleh disesuaikan lebih lanjut mengikut gaya dan matlamat perdagangan individu. Dengan penetapan parameter yang munasabah dan penyesuaian pemantauan yang berterusan, strategi ini berpotensi untuk memberikan hasil perdagangan yang stabil dalam pelbagai persekitaran pasaran.
/*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