Strategy Crossover EMA Berganda

Penulis:ChaoZhang, Tarikh: 2023-11-13 17:35:14
Tag:

img

Ringkasan

Strategi ini menjana isyarat dagangan berdasarkan persilangan dan persilangan garis EMA cepat dan perlahan, yang tergolong dalam strategi trend berikut.

Logika Strategi

Logik teras strategi ini terutamanya merangkumi bahagian-bahagian berikut:

  1. Mengira EMA pantas dan perlahan: Gunakan ta.ema() untuk mengira EMA pantas panjang fastInput dan EMA perlahan panjang slowInput.

  2. Tetapkan julat masa backtest: Gunakan useDateFilter untuk menetapkan sama ada untuk menapis julat masa backtest, dan gunakan backtestStartDate dan backtestEndDate untuk menetapkan waktu permulaan dan akhir.

  3. Menghasilkan isyarat dagangan: Gunakan ta.crossover() dan ta.crossunder() untuk membandingkan EMA yang cepat dan perlahan, menjana isyarat beli apabila EMA yang cepat melintasi EMA yang perlahan, dan isyarat jual apabila EMA yang cepat melintasi EMA yang perlahan.

  4. Menguruskan pesanan di luar julat masa: Batalkan pesanan yang belum dipenuhi di luar julat masa backtest, dan rata semua kedudukan.

  5. Merangka garis EMA: Merangka garis EMA cepat dan perlahan pada carta.

Analisis Kelebihan

Ini adalah strategi trend yang sangat mudah, dengan kelebihan berikut:

  1. Logik yang mudah, mudah difahami dan dilaksanakan.

  2. EMA meluruskan data harga dan mengurangkan bising perdagangan.

  3. Tempoh EMA yang boleh disesuaikan, disesuaikan dengan persekitaran pasaran yang berbeza.

  4. Julat masa backtest yang fleksibel untuk menguji tempoh masa tertentu.

  5. Keadaan kemasukan dan keluar yang dapat dioptimumkan, boleh digabungkan dengan penunjuk lain.

Analisis Risiko

Strategi ini juga mempunyai beberapa risiko:

  1. Strategi EMA berganda adalah kasar, tidak dapat menyesuaikan diri dengan fleksibel dengan perubahan pasaran.

  2. Risiko perdagangan kerap dan perdagangan berulang.

  3. Parameter EMA yang tidak betul boleh menyebabkan isyarat dagangan yang salah.

  4. Jangka masa backtest yang tidak munasabah boleh menyebabkan overfit.

  5. Risiko pengeluaran dan kerugian yang tidak dapat dielakkan.

Risiko boleh diuruskan melalui pengoptimuman parameter, penapisan turun naik, henti rugi, dll.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dalam aspek berikut:

  1. Mengoptimumkan tempoh EMA untuk mencari kombinasi parameter terbaik.

  2. Tambah penunjuk lain untuk menapis perdagangan yang tidak perlu.

  3. Tambah stop loss untuk mengawal kerugian perdagangan tunggal.

  4. Menggabungkan trend, penapis turun naik untuk mengurangkan kekerapan perdagangan.

  5. Uji produk yang berbeza untuk mencari yang paling sesuai.

  6. Gunakan slippage, komisen untuk backtest yang lebih realistik.

Ringkasan

Ringkasnya, ini adalah strategi silang EMA berganda yang sangat mudah dengan logik yang jelas dengan membandingkan EMA yang cepat dan perlahan. Kelebihannya adalah pelaksanaan yang mudah, tetapi ia juga mempunyai masalah seperti perdagangan yang kerap, terlalu banyak. Langkah seterusnya adalah untuk meningkatkan pengoptimuman parameter, pengurusan risiko untuk strategi yang lebih mantap.


/*backtest
start: 2022-11-06 00:00:00
end: 2023-11-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=5
strategy("MollyETF_EMA_Crossover", overlay = true, initial_capital = 100000, default_qty_value=100, default_qty_type=strategy.percent_of_equity)

fastInput = input( 10, "Fast EMA")
slowInput = input( 21, "Slow EMA")

// Calculate two moving averages with different lengths.
float fastMA = ta.ema(close, fastInput)
float slowMA = ta.ema(close, slowInput)


// STEP 1. Create inputs that configure the backtest's date range
useDateFilter = input.bool(true, title="Filter Date Range of Backtest",
     group="Backtest Time Period")
backtestStartDate = input(timestamp("1 Jan 2018"), 
     title="Start Date", group="Backtest Time Period",
     tooltip="This start date is in the time zone of the exchange " +  
     "where the chart's instrument trades. It doesn't use the time " + 
     "zone of the chart or of your computer.")
backtestEndDate = input(timestamp("7 Sep 2023"),
     title="End Date", group="Backtest Time Period",
     tooltip="This end date is in the time zone of the exchange " + 
     "where the chart's instrument trades. It doesn't use the time " + 
     "zone of the chart or of your computer.")

// STEP 2. See if current bar falls inside the date range
inTradeWindow = true

// STEP 3. Include the date filter with the entry order conditions

// Enter a long position when `fastMA` crosses over `slowMA`.
if inTradeWindow and ta.crossover(fastMA, slowMA)
    strategy.entry("buy", strategy.long)

// Enter a short position when `fastMA` crosses under `slowMA`.
if inTradeWindow and ta.crossunder(fastMA, slowMA)
    strategy.close_all(comment="sell")

// STEP 4. With the backtest date range over, exit all open
// trades and cancel all unfilled pending orders
if not inTradeWindow and inTradeWindow[1]
    strategy.cancel_all()
    strategy.close_all(comment="Date Range Exit")

// Plot the moving averages.
plot(fastMA, "Fast MA", color.aqua)
plot(slowMA, "Slow MA", color.orange)




Lebih lanjut