
Strategi ini menggunakan dua purata bergerak indeks ((EMA) untuk menangkap perubahan trend harga. Apabila EMA jangka pendek melintasi EMA jangka panjang dari arah bawah, ia menghasilkan isyarat beli; apabila EMA jangka pendek melintasi EMA jangka panjang dari arah atas, ia menghasilkan isyarat jual. Strategi ini juga menetapkan had berhenti dan berhenti harian untuk mengawal kerugian dan keuntungan dalam satu hari.
EMA adalah strategi perdagangan yang mudah difahami dan sesuai untuk pasaran yang sedang tren. Dengan persilangan yang cepat dan perlahan, anda dapat menangkap perubahan trend harga dengan lebih baik. Pada masa yang sama, anda boleh mengawal risiko dengan berkesan dengan menetapkan hentian dan hentian setiap hari. Tetapi strategi ini mungkin tidak berfungsi dengan baik ketika pasaran bergolak atau perubahan trend.
/*backtest
start: 2023-06-01 00:00:00
end: 2024-06-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © DD173838
//@version=5
strategy("Moving Average Strategy with Daily Limits", overlay=true)
// Moving Average settings
shortMaLength = input.int(9, title="Short MA Length")
longMaLength = input.int(21, title="Long MA Length")
// Calculate MAs
shortMa = ta.ema(close, shortMaLength)
longMa = ta.ema(close, longMaLength)
// Plot MAs
plot(shortMa, title="9 EMA", color=color.blue)
plot(longMa, title="21 EMA", color=color.red)
// Strategy conditions
crossUp = ta.crossover(shortMa, longMa)
crossDown = ta.crossunder(shortMa, longMa)
// Debug plots to check cross conditions
plotshape(series=crossUp, title="Cross Up", location=location.belowbar, color=color.green, style=shape.labelup, text="UP")
plotshape(series=crossDown, title="Cross Down", location=location.abovebar, color=color.red, style=shape.labeldown, text="DOWN")
// Entry at cross signals
if (crossUp)
strategy.entry("Long", strategy.long)
if (crossDown)
strategy.entry("Short", strategy.short)
// Daily drawdown and profit limits
var float startOfDayEquity = na
if (na(startOfDayEquity) or ta.change(time('D')) != 0)
startOfDayEquity := strategy.equity
maxDailyLoss = 50000 * 0.0025
maxDailyProfit = 50000 * 0.02
currentDailyPL = strategy.equity - startOfDayEquity
if (currentDailyPL <= -maxDailyLoss)
strategy.close_all(comment="Max Daily Loss Reached")
if (currentDailyPL >= maxDailyProfit)
strategy.close_all(comment="Max Daily Profit Reached")