
Strategi ini menggunakan purata bergerak cepat dan purata bergerak perlahan untuk membina isyarat perdagangan, untuk mengenal pasti dan mengesan trend. Ia menghasilkan isyarat beli apabila ia melintasi garis perlahan di atas garis pantas; ia menghasilkan isyarat jual apabila ia melintasi garis perlahan di bawah garis pantas.
Strategi ini menggunakan Exponential Moving Average dalam dua tempoh yang berbeza sebagai asas untuk membuat keputusan perdagangan. Parameter purata bergerak cepat ditetapkan pada 30 hari untuk menangkap perubahan harga yang lebih pendek; parameter purata bergerak perlahan ditetapkan pada 100 hari untuk menentukan arah trend garis panjang dalam harga.
Apabila garisan pantas dari bawah melintasi garisan perlahan, ia menunjukkan bahawa pasaran memasuki trend naik, menghasilkan isyarat beli; apabila garisan pantas dari atas melintasi garisan perlahan, ia menunjukkan bahawa pasaran memasuki trend turun, menghasilkan isyarat jual.
Strategi ini mempunyai kelebihan berikut:
Strategi ini mempunyai beberapa risiko:
Strategi ini boleh dioptimumkan dalam beberapa aspek:
Strategi ini berdasarkan sistem keputusan perdagangan binaan dua garis rata, menilai trend pasaran melalui hubungan harga garis rata cepat dan garis rata lambat, menghasilkan isyarat yang mudah dan jelas. Strategi ini menapis sebahagian bunyi bising, dapat berjalan lancar, sesuai untuk perdagangan trend garis panjang dan tengah. Tetapi ada juga beberapa kelemahan, dengan melakukan pengoptimuman pelbagai indikator dan kawalan risiko, strategi ini dapat dioptimumkan menjadi lebih umum dan efisien.
/*backtest
start: 2023-01-21 00:00:00
end: 2024-01-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("EMA Strategy v2", shorttitle = "EMA Strategy v2", overlay=true, pyramiding = 3,default_qty_type = strategy.percent_of_equity, default_qty_value = 10)
// === Inputs ===
// short ma
maFastSource = input(defval = close, title = "Fast MA Source")
maFastLength = input(defval = 30, title = "Fast MA Period", minval = 1)
// long ma
maSlowSource = input(defval = close, title = "Slow MA Source")
maSlowLength = input(defval = 100, title = "Slow MA Period", minval = 1)
// invert trade direction
tradeInvert = input(defval = false, title = "Invert Trade Direction?")
// risk management
useStop = input(defval = true, title = "Use Initial Stop Loss?")
slPoints = input(defval = 0, title = "Initial Stop Loss Points", minval = 1)
useTS = input(defval = true, title = "Use Trailing Stop?")
tslPoints = input(defval = 0, title = "Trail Points", minval = 1)
useTSO = input(defval = false, title = "Use Offset For Trailing Stop?")
tslOffset = input(defval = 0, title = "Trail Offset Points", minval = 1)
// === Vars and Series ===
fastMA = ema(maFastSource, maFastLength)
slowMA = ema(maSlowSource, maSlowLength)
plot(fastMA, color=blue)
plot(slowMA, color=purple)
goLong() => crossover(fastMA, slowMA)
killLong() => crossunder(fastMA, slowMA)
strategy.entry("Buy", strategy.long, when = goLong())
strategy.close("Buy", when = killLong())
// Shorting if using
goShort() => crossunder (fastMA, slowMA)
killShort() => crossover(fastMA, slowMA)
//strategy.entry("Sell", strategy.short, when = goShort())
//strategy.close("Sell", when = killShort())
if (useStop)
strategy.exit("XLS", from_entry ="Buy", stop = strategy.position_avg_price / 1.08 )
strategy.exit("XSS", from_entry ="Sell", stop = strategy.position_avg_price * 1.58)