
Strategi moving average crossover adalah strategi perdagangan kuantitatif sederhana dan efektif yang didasarkan pada moving average. Strategi ini menggunakan persilangan rata-rata bergerak cepat dan rata-rata bergerak lambat sebagai sinyal beli dan jual. Ini menghasilkan sinyal beli ketika garis cepat menerobos garis lambat dari bawah; ini menghasilkan sinyal jual ketika garis cepat dari atas ke bawah.
Logika inti dari strategi ini adalah menggunakan moving averages untuk menilai tren pasar. Moving averages sendiri memiliki fungsi untuk menggerakkan kebisingan pasar acak. Fast moving averages lebih cepat merespon perubahan harga, mencerminkan tren terbaru; sedangkan slow moving averages lebih lambat merespon perubahan harga terbaru, mewakili tren jangka menengah dan panjang.
Secara khusus, strategi ini pertama-tama mendefinisikan fast moving average sig1 dan slow moving average sig2. Kemudian berdasarkan hubungan silang antara sig1 dan sig2, menentukan titik jual beli. Ketika sig1 menerobos sig2 dari bawah, ia menghasilkan sinyal longCondition untuk membeli; ketika sig1 menerobos sig2 dari atas, ia menghasilkan sinyal shortCondition untuk menjual. Strategi ini kemudian membuat pesanan saat memenuhi kondisi buy dan sell, dan mengatur stop loss dan stop loss untuk keluar dari pesanan.
Keuntungan dari strategi ini jelas:
Strategi ini juga memiliki beberapa risiko:
Langkah-langkah optimasi:
Moving average crossover strategi secara keseluruhan adalah strategi kuantitatif yang sederhana dan praktis. Dengan parameter yang disesuaikan dan dioptimalkan dengan tepat, dapat menghasilkan keuntungan yang stabil di berbagai lingkungan pasar.
/*backtest
start: 2023-11-14 00:00:00
end: 2023-11-16 04:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
// Simple yet effective MA cross strategy.
// You'll have to tune the parameters to get an optimal win ratio.
// If JPY or XAU or any other currency with pips defined as the
// second decimal digit are involved, do not forget to set the respective flag on.
//
// Created by vitelot/yanez/Vts, who's the same fellow with different user names
// December 2018 -- Merry Xmas
//
strategy("MA cross strategy Vts", overlay=true, initial_capital=1000, currency="EUR", pyramiding=0)
yr = input(2016, title="Starting year to analyse")
src = input(close, title="Source")
maType = input( defval="EMA", title="MA Type", options=["SMA","EMA","HMA","McG","WMA"])
//
isJPY = input(false, title="Is JPY or XAU involved?") // JPY and Gold have the pips defined as the 2 decimal digit
maPar1 = input(26, minval=1, title="MA fast period")
maPar2 = input(51, minval=2, title="MA slow period")
atrPar = input(14,minval=1, title="ATR period")
atrMulSL = input(1.5, title="SL ATR multiplicator")
atrMulTP = input(1.0, title="TP ATR multiplicator")
hma(sig, n) => // Hull moving average definition
wma( 2*wma(sig,round(n/2))-wma(sig,n), round(sqrt(n)))
mcg(sig,length) => // Mc Ginley MA definition
mg = 0.0
mg := na(mg[1]) ? ema(sig, length) : mg[1] + (sig - mg[1]) / (length * pow(sig/mg[1], 4))
ma(t,sig,len) =>
if t =="SMA"
sma(sig,len)
else
if t == "EMA"
ema(sig,len)
else
if t == "HMA"
hma(sig,len)
else
if t == "McG" // Mc Ginley
mcg(sig,len)
else
wma(sig,len)
sig1 = ma(maType, src, maPar1)
sig2 = ma(maType, src, maPar2)
tickFactor = isJPY? 1e3: 1e5
sl = atrMulSL*atr(atrPar)*tickFactor
tp = atrMulTP*atr(atrPar)*tickFactor
plot(sig1, color=aqua, title="MA1", linewidth=2)
plot(sig2, color=orange, title="MA2", linewidth=2)
longCondition = crossunder(sig2, sig1) and year>=yr // change the >= to == if you like exact years not a range
if (longCondition)
strategy.entry("Long", strategy.long, qty=1) // exit trade when SL and TP are hit
strategy.exit("Exit Long", "Long", loss=sl, profit=tp)
if (crossunder(sig1, sig2)) // or when the short condition is met
strategy.close("Long")
shortCondition = crossover(sig2,sig1) and year>=yr // change the >= to == if you like exact years not a range
if (shortCondition)
strategy.entry("Short", strategy.short, qty=1)
strategy.exit("Exit Short", "Short", loss=sl, profit=tp)
if (crossover(sig1,sig2))
strategy.close("Short")