
Strategi ini menggunakan persimpangan garis EMA pantas dan garis EMA perlahan sebagai isyarat membeli dan menjual, mewujudkan perdagangan automatik berdasarkan persimpangan garis rata. Garis EMA pantas mengikat pergerakan harga, garis EMA perlahan meluruskan pergerakan harga. Isyarat beli dihasilkan apabila garis EMA pantas melintasi garis EMA perlahan dari arah bawah; Isyarat jual dihasilkan apabila garis EMA pantas jatuh dari arah atas dan melanggar garis EMA perlahan.
Strategi ini menghasilkan isyarat dagangan dengan mengira garis EMA cepat dan garis EMA lambat, dan membandingkan hubungan antara dua garis rata.
Pertama, dalam parameter input, setkan tempoh emaFast untuk EMA pantas menjadi 1, supaya EMA pantas dapat menutup perubahan harga. Pada masa yang sama, setkan tempoh EMA perlahan,emaSlowBuy untuk menghasilkan isyarat beli,emaSlowSell untuk menghasilkan isyarat jual.
Kemudian, mengikut kitaran input, EMA pantas dan EMA perlahan dikira. EMA pantas mempunyai kitaran tetap 1, mengikut harga; EMA perlahan adalah parameter yang boleh diselaraskan, untuk meluruskan data harga.
Seterusnya, bandingkan hubungan saiz EMA cepat dan EMA perlahan, untuk menilai keadaan persilangan. Jika EMA cepat dari arah bawah melintasi EMA perlahan, maka menghasilkan garpu emas, memenuhi syarat pembelian; jika EMA cepat dari arah atas jatuh dari EMA perlahan, maka menghasilkan garpu mati, memenuhi syarat jual.
Akhirnya, apabila memenuhi syarat membeli dan menjual, melaksanakan arahan pembukaan dan penyimpanan yang sesuai, menyelesaikan urus niaga. Pada masa yang sama, semak sama ada masa semasa berada dalam jangka masa pengesanan semula, untuk mengelakkan perdagangan yang salah di luar jangka masa.
Mengenai risiko, langkah-langkah pengoptimuman berikut boleh dipertimbangkan:
Menapis isyarat silang EMA dengan penunjuk lain untuk mengelakkan isyarat salah
Menyesuaikan parameter EMA mengikut tahap turun naik pasaran, mengurangkan kekerapan perdagangan
Meningkatkan pertimbangan untuk menghentikan dan menghentikan, mengawal risiko
Mengoptimumkan kitaran EMA pantas, menggunakan parameter yang lebih sesuai dalam keadaan pasaran tertentu
Meningkatkan penghakiman trend dan mengelakkan perdagangan berlebihan dalam pasaran yang bergolak
Strategi ini boleh dioptimumkan dengan cara berikut:
Anda boleh mencari kombinasi parameter yang paling baik dalam pengulangan data sejarah dengan menjelajah parameteremaFast dan emaSlow yang berbeza, menggunakan pengoptimuman langkah demi langkah atau pengoptimuman rawak.
Sebagai contoh, ia boleh digabungkan dengan MACD, KDJ, Brin dan lain-lain untuk mengelakkan salah isyarat EMA silang.
Mengira purata gelombang sebenar dan lain-lain untuk menilai pergerakan yang kuat dan lemah, dan mengelakkan terjerumus ke dalam pasaran yang bergolak.
Penyelidikan titik-titik hentian yang optimum untuk mengawal risiko kerugian, dan menentukan titik-titik hentian yang munasabah untuk memaksimumkan keuntungan.
Bukan sahaja menguji kombinasi EMA perlahan, tetapi juga boleh menguji kombinasi EMA ganda, tiga EMA atau bahkan beberapa EMA untuk mencari parameter yang lebih baik.
Untuk pasaran yang lebih trend, kitaran EMA boleh dipercepatkan dengan sewajarnya, manakala untuk pasaran yang goyah, kitaran EMA boleh diperlahankan.
Strategi silang EMA mempunyai pemikiran keseluruhan yang jelas dan mudah difahami, menggunakan indikator teknikal yang matang untuk menentukan masa pembelian dan penjualan. Strategi ini sangat disesuaikan, dan dapat dioptimumkan dengan menyesuaikan parameter EMA, sehingga membuat strategi perdagangan untuk keadaan pasaran yang berbeza. Tetapi isyarat EMA mempunyai keterlambatan, perlu diuji berulang kali untuk mencari kombinasi parameter terbaik.
/*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")