Strategi Perdagangan Rentas EMA

Penulis:ChaoZhang, Tarikh: 2024-02-22 17:48:09
Tag:

img

Ringkasan

Strategi perdagangan EMA Crossover menghasilkan isyarat beli dan jual dengan mengira garis EMA dari tempoh yang berbeza dan mengesan situasi silang mereka. Apabila EMA yang lebih cepat melintasi di atas EMA yang lebih perlahan, isyarat beli dihasilkan. Apabila EMA yang lebih cepat melintasi di bawah EMA yang lebih perlahan, isyarat jual dihasilkan.

Logika Strategi

Inti strategi ini adalah untuk mengira dua garis EMA dengan tempoh yang berbeza, termasuk EMA yang lebih cepat dengan tempoh lalai 9, dan EMA yang lebih perlahan dengan tempoh lalai 20. Kod ini mengira dua baris ini dengan memanggil fungsi ema terbina dalam dalam Pine Script. Kemudian ia menghasilkan isyarat perdagangan dengan mengesan jika dua garis EMA bersilang. Khususnya, jika EMA yang lebih cepat melintasi di atas EMA yang lebih perlahan, isyarat beli dicetuskan. Jika EMA yang lebih cepat melintasi di bawah EMA yang lebih perlahan, isyarat jual dicetuskan.

Fungsi crossover mengesan keadaan crossover menggunakan fungsi crossover dan crossunder yang terbina dalam Pine Script. Fungsi crossover memeriksa sama ada EMA yang lebih cepat melintasi di atas EMA yang lebih perlahan dan mengembalikan nilai boolean. Fungsi crossunder memeriksa sama ada EMA yang lebih cepat melintasi di bawah EMA yang lebih perlahan dan mengembalikan nilai boolean. Berdasarkan nilai pulangan kedua-dua fungsi ini, kod menghantar pesanan beli atau jual yang sepadan.

Di samping itu, kod ini menyediakan beberapa syarat tambahan seperti menetapkan tarikh permulaan / akhir, menyekat hanya perdagangan panjang atau pendek, dll. Ciri-ciri ini membantu menjalankan backtest atau pengoptimuman yang lebih canggih.

Analisis Kelebihan

Kelebihan terbesar strategi ini adalah bahawa ia sangat mudah dan mudah difahami dan dilaksanakan, menjadikannya sesuai untuk pemula untuk belajar. Juga, sebagai penunjuk trend berikut, purata bergerak dapat dengan berkesan mengesan trend pasaran dan menjana keuntungan tambahan dengan memanfaatkan momentum. Akhirnya, strategi ini mempunyai beberapa parameter, yang menjadikannya mudah untuk menyesuaikan dan mengoptimumkan.

Analisis Risiko

Risiko utama yang dihadapi oleh strategi ini adalah perdagangan whipsaw dan pembalikan trend. Garis EMA terdedah kepada turun naik pasaran jangka pendek, yang boleh menghasilkan isyarat palsu dan mencetuskan perdagangan yang tidak perlu, meningkatkan kekerapan perdagangan dan kos. Di sisi lain, apabila isyarat silang mencetuskan, trend mungkin mendekati titik pembalikan, menjadikan perdagangan lebih berisiko. Tetapan parameter yang tidak sesuai juga boleh mempengaruhi prestasi strategi.

Kaedah seperti menyesuaikan tempoh EMA, menambah penapis dapat membantu mengurangkan whipsaws. Perintah stop loss mengawal kerugian perdagangan tunggal. Pengoptimuman parameter meningkatkan ketahanan. Walau bagaimanapun, tidak ada strategi perdagangan yang dapat mengelakkan kerugian sepenuhnya, jadi seseorang mesti bersedia untuk mengambil risiko.

Peluang Pengoptimuman

Strategi ini boleh ditingkatkan dalam aspek berikut:

  1. Mengoptimumkan tempoh EMA untuk mencari set parameter terbaik
  2. Tambah penunjuk seperti MACD, RSI sebagai penapis untuk mengurangkan isyarat palsu
  3. Memasukkan metrik trend untuk mengelakkan pembalikan trend
  4. Pilih saham berdasarkan asas
  5. Sesuaikan saiz kedudukan, atur berhenti berdasarkan ATR

Kesimpulan

EMA crossover adalah strategi trend berikut yang mudah namun berkesan. Ia menggunakan persilangan EMA untuk menjana isyarat perdagangan, secara automatik menangkap trend harga. Strategi yang mudah difahami dan disesuaikan ini sangat sesuai untuk pemula belajar. Ia juga boleh diintegrasikan ke dalam strategi yang lebih kompleks. Walau bagaimanapun, semua strategi membawa risiko dan memerlukan pengurusan yang berhati-hati. Peningkatan berterusan dari segi pengoptimuman dan memperkaya keadaan pasaran dapat menjadikan strategi ini lebih mantap.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// This strategy has been created for illustration purposes only and should not be relied upon as a basis for buying, selling, or holding any asset or security.
// © kirilov

//@version=4
strategy(
     "EMA Cross Strategy",
     overlay=true,
     calc_on_every_tick=true,
     currency=currency.USD
     )

// INPUT:

// Options to enter fast and slow Exponential Moving Average (EMA) values
emaFast = input(title="Fast EMA", type=input.integer, defval=9, minval=1, maxval=9999)
emaSlow = input(title="Slow EMA", type=input.integer, defval=20, 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 1970 00:00"))
endDate = input(title="End Date", type=input.time, defval=timestamp("31 Dec 2170 23:59"))


// CALCULATIONS:

// Use the built-in function to calculate two EMA lines
fastEMA = ema(close, emaFast)
slowEMA = ema(close, emaSlow)


// PLOT:

// Draw the EMA lines on the chart
plot(series=fastEMA, color=color.black, linewidth=2)
plot(series=slowEMA, color=color.red, linewidth=2)


// CONDITIONS:

// Check if the close time of the current bar falls inside the date range
inDateRange = true

// Translate input into trading conditions
longOK  = (tradeDirection == "Long") or (tradeDirection == "Both")
shortOK = (tradeDirection == "Short") or (tradeDirection == "Both")

// Decide if we should go long or short using the built-in functions
longCondition = crossover(fastEMA, slowEMA)
shortCondition = crossunder(fastEMA, slowEMA)


// ORDERS:

// Submit entry (or reverse) orders
if (longCondition and inDateRange)
    strategy.entry(id="long", long=true, when = longOK)
if (shortCondition and inDateRange)
    strategy.entry(id="short", long=false, when = shortOK)
    
// Submit exit orders in the cases where we trade only long or only short
if (strategy.position_size > 0 and shortCondition)
    strategy.exit(id="exit long", stop=close)
if (strategy.position_size < 0 and longCondition)
    strategy.exit(id="exit short", stop=close)



Lebih lanjut