
Strategi dagangan pelbagai sasaran dengan purata bergerak indeks dua kali ganda adalah sistem dagangan kuantitatif berdasarkan tanda silang purata bergerak indeks jangka pendek dan jangka panjang (EMA). Strategi ini menggunakan tanda silang EMA 9 dan 21 sebagai isyarat masuk, sambil menetapkan sehingga 10 sasaran keuntungan dan satu titik berhenti untuk pengurusan risiko dan pengoptimuman keuntungan. Strategi ini menyokong perdagangan dua arah yang banyak, terbuka apabila EMA jangka pendek melintasi EMA jangka panjang, terbuka apabila EMA jangka pendek melintasi EMA jangka panjang, dan keluar ketika berlawanan arah.
Prinsip-prinsip utama strategi ini adalah berdasarkan kepada sistem penyambungan purata bergerak indeks, seperti berikut:
Strategi ini menggunakan kaedah pengurusan risiko yang sistematik, dengan 10% dana akaun digunakan secara lalai untuk setiap perdagangan, dana permulaan ditetapkan pada 100,000, dan operasi peleburan dilarang.
Untuk mengurangkan risiko ini, disyorkan untuk memperkenalkan syarat penapisan tambahan, seperti indikator kekuatan trend, dan pertimbangkan untuk menyesuaikan seting stop loss dan sasaran mengikut dinamik turun naik pasaran.
Dengan pengoptimuman ini, anda dapat meningkatkan kestabilan dan keuntungan strategi dengan ketara, mengurangkan kekerapan penarikan balik dan perdagangan yang rugi.
Strategi perdagangan pelbagai sasaran dengan purata bergerak dua indeks adalah sistem perdagangan kuantitatif yang jelas dan logik yang mudah, berdasarkan pada isyarat silang EMA klasik, ditambah dengan pengurusan keuntungan dan penempatan berhenti pelbagai sasaran. Strategi ini sesuai untuk perdagangan trend jangka pendek dan jangka pendek, dan lebih baik dalam pasaran yang jelas.
Walaupun reka bentuk strategi agak mudah, ia merangkumi unsur-unsur teras strategi perdagangan: isyarat masuk, syarat keluar, pengurusan hentian dan matlamat keuntungan. Kelebihan utama strategi adalah operasi yang jelas, mudah difahami dan dilaksanakan, sambil memberikan sokongan visual yang baik.
Walau bagaimanapun, strategi ini juga mempunyai batasan seperti bergantung pada satu indikator, kekurangan pengenalan keadaan pasaran dan pengurusan wang yang tidak cukup fleksibel. Strategi ini mempunyai ruang yang lebih besar untuk pengoptimuman dengan menambah penapis trend, mengoptimumkan mekanisme penangguhan kerugian, mencapai keuntungan yang benar-benar berturut-turut dan memperbaiki kaedah pengurusan wang.
Bagi peniaga, strategi ini boleh digunakan sebagai kerangka asas untuk menyesuaikan dan mengoptimumkan secara peribadi mengikut keutamaan risiko individu dan ciri-ciri varieti perdagangan untuk mencapai kesan perdagangan yang lebih baik.
/*backtest
start: 2024-08-21 00:00:00
end: 2025-08-20 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_OKX","currency":"BNB_USDT","balance":5000}]
*/
//@version=5
strategy("9/21 EMA with 10 Targets + Stoploss",
overlay = true,
initial_capital = 100000,
default_qty_type = strategy.percent_of_equity,
default_qty_value = 10,
pyramiding = 0)
// === Inputs ===
emaFastLen = input.int(9, "Fast EMA Length")
emaSlowLen = input.int(21, "Slow EMA Length")
slPercent = input.float(0.5, "Stoploss %", step=0.1)
// 10 Targets
tp1Percent = input.float(0.5, "Target 1 %", step=0.1)
tp2Percent = input.float(1.0, "Target 2 %", step=0.1)
tp3Percent = input.float(1.5, "Target 3 %", step=0.1)
tp4Percent = input.float(2.0, "Target 4 %", step=0.1)
tp5Percent = input.float(2.5, "Target 5 %", step=0.1)
tp6Percent = input.float(3.0, "Target 6 %", step=0.1)
tp7Percent = input.float(3.5, "Target 7 %", step=0.1)
tp8Percent = input.float(4.0, "Target 8 %", step=0.1)
tp9Percent = input.float(4.5, "Target 9 %", step=0.1)
tp10Percent = input.float(5.0, "Target 10 %", step=0.1)
// === EMA Calculation ===
emaFast = ta.ema(close, emaFastLen)
emaSlow = ta.ema(close, emaSlowLen)
// === Entry Conditions ===
longCond = ta.crossover(emaFast, emaSlow)
shortCond = ta.crossunder(emaFast, emaSlow)
// === Entry ===
if (longCond and strategy.position_size <= 0)
strategy.entry("BUY", strategy.long)
if (shortCond and strategy.position_size >= 0)
strategy.entry("SELL", strategy.short)
// === Series Variables for Targets ===
var float tp1 = na
var float tp2 = na
var float tp3 = na
var float tp4 = na
var float tp5 = na
var float tp6 = na
var float tp7 = na
var float tp8 = na
var float tp9 = na
var float tp10 = na
var float stopLevel = na
// === Long Positions ===
if strategy.position_size > 0
stopLevel := strategy.position_avg_price * (1 - slPercent/100)
tp1 := strategy.position_avg_price * (1 + tp1Percent/100)
tp2 := strategy.position_avg_price * (1 + tp2Percent/100)
tp3 := strategy.position_avg_price * (1 + tp3Percent/100)
tp4 := strategy.position_avg_price * (1 + tp4Percent/100)
tp5 := strategy.position_avg_price * (1 + tp5Percent/100)
tp6 := strategy.position_avg_price * (1 + tp6Percent/100)
tp7 := strategy.position_avg_price * (1 + tp7Percent/100)
tp8 := strategy.position_avg_price * (1 + tp8Percent/100)
tp9 := strategy.position_avg_price * (1 + tp9Percent/100)
tp10 := strategy.position_avg_price * (1 + tp10Percent/100)
strategy.exit("Exit Long", "BUY", stop=stopLevel, limit=tp1)
// === Short Positions ===
if strategy.position_size < 0
stopLevel := strategy.position_avg_price * (1 + slPercent/100)
tp1 := strategy.position_avg_price * (1 - tp1Percent/100)
tp2 := strategy.position_avg_price * (1 - tp2Percent/100)
tp3 := strategy.position_avg_price * (1 - tp3Percent/100)
tp4 := strategy.position_avg_price * (1 - tp4Percent/100)
tp5 := strategy.position_avg_price * (1 - tp5Percent/100)
tp6 := strategy.position_avg_price * (1 - tp6Percent/100)
tp7 := strategy.position_avg_price * (1 - tp7Percent/100)
tp8 := strategy.position_avg_price * (1 - tp8Percent/100)
tp9 := strategy.position_avg_price * (1 - tp9Percent/100)
tp10 := strategy.position_avg_price * (1 - tp10Percent/100)
strategy.exit("Exit Short", "SELL", stop=stopLevel, limit=tp1)
// === Plotting ===
plot(emaFast, "EMA 9", color=color.yellow, linewidth=2)
plot(emaSlow, "EMA 21", color=color.orange, linewidth=2)
// Global plots (avoid local scope error)
plot(tp1, "TP1", color=color.new(color.green, 0))
plot(tp2, "TP2", color=color.new(color.green, 10))
plot(tp3, "TP3", color=color.new(color.green, 20))
plot(tp4, "TP4", color=color.new(color.green, 30))
plot(tp5, "TP5", color=color.new(color.green, 40))
plot(tp6, "TP6", color=color.new(color.green, 50))
plot(tp7, "TP7", color=color.new(color.green, 60))
plot(tp8, "TP8", color=color.new(color.green, 70))
plot(tp9, "TP9", color=color.new(color.green, 80))
plot(tp10, "TP10", color=color.new(color.green, 90))
plot(stopLevel, "Stoploss", color=color.red, linewidth=2)
// Entry Signals
plotshape(longCond, title="BUY Signal", style=shape.labelup, color=color.green, text="BUY")
plotshape(shortCond, title="SELL Signal", style=shape.labeldown, color=color.red, text="SELL")