
Strategi ini menggunakan persimpangan garis EMA cepat dan garis EMA lambat sebagai sinyal beli dan jual untuk melakukan perdagangan otomatis berdasarkan persimpangan garis rata. Garis EMA cepat mengikat perubahan harga, garis EMA lambat meluruskan perubahan harga.
Strategi ini terutama menghasilkan sinyal perdagangan dengan menghitung garis EMA cepat dan EMA lambat, dan membandingkan hubungan antara dua garis rata.
Pertama, dalam parameter input, setemaFast untuk periode EMA yang cepat menjadi 1, sehingga EMA yang cepat dapat menahan perubahan harga. Pada saat yang sama, setemaSlowBuy untuk menghasilkan sinyal beli, dan emaSlowSell untuk menghasilkan sinyal jual.
Kemudian, berdasarkan siklus input, menghitung EMA cepat dan EMA lambat. EMA cepat adalah periode tetap 1, mengikuti harga; EMA lambat adalah parameter yang dapat disesuaikan, data harga halus.
Selanjutnya, bandingkan hubungan ukuran EMA cepat dan EMA lambat, untuk menilai keadaan persilangan. Jika EMA cepat dari arah bawah melewati EMA lambat, maka akan terjadi Gold Fork, memenuhi kondisi beli; Jika EMA cepat dari arah atas jatuh dari EMA lambat, maka akan terjadi Dead Fork, memenuhi kondisi jual.
Terakhir, saat memenuhi syarat beli dan jual, lakukan instruksi posisi dan posisi yang sesuai, dan selesaikan transaksi. Pada saat yang sama, periksa apakah waktu saat ini berada dalam jangka waktu pengembalian, untuk menghindari kesalahan transaksi di luar jangka waktu.
Adapun langkah-langkah optimasi yang dapat dipertimbangkan adalah sebagai berikut:
Menyaring sinyal silang EMA dalam kombinasi dengan indikator lain untuk menghindari sinyal yang salah
Adaptasi parameter EMA berdasarkan volatilitas pasar, mengurangi frekuensi perdagangan
Meningkatkan pertimbangan untuk stop loss dan stop loss, dan mengendalikan risiko
Optimalkan siklus EMA cepat dengan parameter yang lebih sesuai dalam kondisi pasar tertentu
Meningkatkan penilaian terhadap tren dan menghindari overtrading di pasar yang bergejolak
Strategi ini dapat dioptimalkan lebih lanjut dari beberapa arah:
Anda dapat menemukan kombinasi parameter yang berkinerja terbaik dalam retesting data historis dengan menelusuri berbagai parameter emaFast dan emaSlow, menggunakan metode optimasi langkah demi langkah atau optimasi acak.
Sebagai contoh, MACD, KDJ, Brin dan lain-lain dapat dikombinasikan untuk menghindari kesalahan sinyal EMA.
Perhitungan rata-rata gelombang nyata dan indikator lainnya untuk menilai tren kuat atau lemah, menghindari jatuh ke dalam pasar yang bergoyang.
Studi tentang titik penghentian yang optimal untuk mengendalikan risiko kerugian, dan menentukan titik penghentian yang wajar untuk memaksimalkan keuntungan.
Tidak hanya menguji kombinasi EMA cepat dan lambat, tetapi juga dapat menguji kombinasi EMA ganda, EMA tiga atau bahkan EMA ganda, untuk mencari parameter yang lebih baik.
Untuk pasar yang lebih trendy dapat mempercepat siklus EMA dengan tepat, sedangkan pasar yang goyah dapat memperlambat siklus EMA.
Strategi EMA crossover ini memiliki konsep yang jelas dan mudah dimengerti, menggunakan indikator teknis yang matang untuk menentukan waktu pembelian dan penjualan. Strategi ini sangat dapat disesuaikan, dapat dioptimalkan dengan menyesuaikan parameter EMA, sehingga dapat membuat strategi perdagangan untuk lingkungan pasar yang berbeda. Namun, sinyal EMA memiliki keterlambatan, perlu diuji berulang kali untuk menemukan kombinasi parameter terbaik. Selain itu, perlu dioptimalkan untuk risiko, digabungkan dengan indikator lain untuk melakukan verifikasi sinyal, dan mengoptimalkan metode stop loss, sehingga mengurangi penarikan balik dan meningkatkan kemampuan keuntungan.
/*backtest
start: 2023-10-10 00:00:00
end: 2023-11-09 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(
"EMA Cross Strategy with Custom Buy/Sell Conditions",
overlay=true
)
// INPUT:
// Options to enter fast Exponential Moving Average (EMA) value
emaFast = 1
// Options to enter slow EMAs for buy and sell signals
slowEMABuy = input(title="Slow EMA for Buy Signals", defval=20, minval=1, maxval=9999)
slowEMASell = input(title="Slow EMA for Sell Signals", defval=30, minval=1, maxval=9999)
// Option to select trade directions
tradeDirection = input(title="Trade Direction", options=["Long", "Short", "Both"], defval="Both")
// Options that configure the backtest date range
startDate = input(title="Start Date", type=input.time, defval=timestamp("01 Jan 2018 00:00"))
endDate = input(title="End Date", type=input.time, defval=timestamp("31 Dec 2025 23:59"))
// CALCULATIONS:
// Use a fixed fast EMA of 1 and calculate slow EMAs for buy and sell signals
fastEMA = ema(close, emaFast)
slowEMABuyValue = ema(close, slowEMABuy)
slowEMASellValue = ema(close, slowEMASell)
// PLOT:
// Draw the EMA lines on the chart
plot(series=fastEMA, color=color.orange, linewidth=2)
plot(series=slowEMABuyValue, color=color.blue, linewidth=2, title="Slow EMA for Buy Signals")
plot(series=slowEMASellValue, color=color.red, linewidth=2, title="Slow EMA for Sell Signals")
// CONDITIONS:
// Check if the close time of the current bar falls inside the date range
inDateRange = true
// Translate input into trading conditions for buy and sell signals
buyCondition = crossunder(slowEMABuyValue, fastEMA)
sellCondition = crossover(slowEMASellValue, fastEMA)
// Translate input into overall trading conditions
longOK = (tradeDirection == "Long") or (tradeDirection == "Both")
shortOK = (tradeDirection == "Short") or (tradeDirection == "Both")
// ORDERS:
// Submit entry (or reverse) orders based on buy and sell conditions
if (buyCondition and inDateRange)
strategy.entry("Buy", strategy.long)
if (sellCondition and inDateRange)
strategy.close("Buy")
// Submit exit orders based on opposite trade conditions
if (strategy.position_size > 0 and sellCondition)
strategy.close("Sell")
if (strategy.position_size < 0 and buyCondition)
strategy.close("Sell")