Strategi ini menggunakan dua purata bergerak eksponensial (EMA) untuk menangkap perubahan dalam trend harga. Apabila EMA jangka pendek melintasi di atas EMA jangka panjang dari bawah, isyarat beli dihasilkan; apabila EMA jangka pendek melintasi di bawah EMA jangka panjang dari atas, isyarat jual dihasilkan. Strategi ini juga menetapkan had stop-loss dan mengambil keuntungan harian untuk mengawal kerugian dan keuntungan seharian.
Strategi crossover purata bergerak berganda EMA adalah strategi perdagangan yang mudah difahami dan mudah digunakan untuk pasaran yang sedang berkembang. Dengan menggunakan crossover purata bergerak pantas dan perlahan, ia dapat menangkap perubahan dalam trend harga dengan agak baik. Pada masa yang sama, tetapan stop-loss dan take-profit harian dapat mengawal risiko dengan berkesan. Walau bagaimanapun, strategi ini mungkin kurang berkesan di pasaran yang bergolak atau semasa pembalikan trend dan perlu dioptimumkan dan diperbaiki dengan menggabungkan penunjuk teknikal dan kaedah analisis lain.
/*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")