Strategi Penjejakan Purata Pergerakan EMA Berganda


Tarikh penciptaan: 2024-02-02 17:11:29 Akhirnya diubah suai: 2024-02-02 17:11:29
Salin: 0 Bilangan klik: 575
1
fokus pada
1617
Pengikut

Strategi Penjejakan Purata Pergerakan EMA Berganda

Gambaran keseluruhan

Strategi mengikuti trend mengikut purata bergerak eksponensial berganda adalah strategi mengikuti trend berdasarkan persimpangan garis rata. Strategi ini dilakukan dengan mengira EMA garis cepat dan EMA garis lambat, dan berdasarkan persimpangan mereka untuk menilai arah trend semasa. Apabila garis cepat melewati garis perlahan, ia dianggap sebagai bullish; apabila garis cepat melewati garis perlahan, ia dianggap sebagai bearish.

Prinsip Strategi

Logik teras strategi ini adalah untuk mengira EMA purata untuk dua kitaran yang berbeza, satu sebagai garis kosong, satu sebagai garis multi. Secara khusus, strategi menggunakan talib untuk mengira EMA purata cepat 8 kitaran, sebagai garis banyak; juga mengira EMA purata perlahan 21 kitaran, sebagai garis kosong. Kemudian menilai hubungan silang antara garis EMA cepat dan garis EMA perlahan, apabila garis cepat melalui garis perlahan, ia boleh dilakukan sebagai bullish, dan apabila garis cepat melalui garis perlahan, ia boleh dilakukan sebagai bearish.

Strategi ini boleh dilakukan hanya dengan melakukan lebih banyak atau hanya dengan kosong semasa menjalankan operasi perdagangan tertentu; atau boleh melakukan perdagangan dua hala ketika persilangan garis cepat dan perlahan berlaku. Selain itu, strategi ini juga menetapkan harga berhenti dan berhenti. Selepas membuka kedudukan, jika arah pergerakan harga tidak menguntungkan, kerugian akan berhenti; jika pergerakan harga mencapai sasaran yang diharapkan, berhenti akan berakhir.

Analisis kelebihan

Kelebihan utama strategi pengesanan garis lurus dua EMA adalah penggunaan kemampuan penilaian trend yang kuat untuk persilangan garis lurus. EMA sebagai alat penilaian trend yang biasa digunakan, dengan persilangan garis lurus untuk mengenal pasti trend perubahan harga dan masa peralihan, anda dapat mengelakkan diri dari kebisingan pasaran garis pendek dan memahami arah trend utama.

Di samping itu, seting arah perdagangan strategi yang fleksibel, dapat menyesuaikan diri dengan keadaan satu arah, dan dapat menangkap peluang dua arah dalam harga di kawasan yang bergolak, meningkatkan kepraktisan strategi. Pada masa yang sama, seting stop loss stop, dapat mengawal risiko dengan berkesan, mengunci sebahagian keuntungan.

Analisis risiko

Risiko terbesar strategi pengesanan garis rata EMA berganda adalah bahawa beberapa kali penyambungan kecil dalam keadaan gegaran menyebabkan isyarat silang yang kerap dan isyarat palsu. Ini akan menyebabkan strategi sering membuka posisi dan kehilangan. Dalam kes ini, anda boleh meningkatkan kitaran EMA dengan sewajarnya, mengurangkan kemungkinan penyambungan dan isyarat palsu.

Di sisi lain, penyetempatan terhad untuk penangguhan juga meningkatkan kebarangkalian bahawa strategi akan ditembak. Dalam kes ini, penangguhan boleh diperluaskan dengan sewajarnya, tetapi juga perlu mempertimbangkan risiko untuk dibocorkan.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dengan cara berikut:

  1. Dinamik menyesuaikan EMA purata kitaran. Ia boleh mengikut turun naik pasaran dan parameter optimum hasil pengesanan semula, supaya EMA kitaran dinamik perubahan, mengelakkan masalah overfitting di bawah kitaran tetap.

  2. Tambah syarat penapisan untuk menapis isyarat palsu. Sebagai contoh, ia boleh digabungkan dengan jumlah dagangan, menapis persilangan palsu yang dihasilkan semasa gegaran kecil. Ia juga boleh digabungkan dengan petunjuk lain, seperti MACD, KDJ, dan lain-lain, untuk mengelakkan isyarat pada masa yang tidak pasti.

  3. Mengoptimumkan strategi hentian kerugian, digabungkan dengan penunjuk seperti ATR, dapat mencapai pemantauan dinamik hentian kerugian. Mengelakkan masalah hentian kerugian yang terlalu kecil dan hentian terlalu awal.

  4. Uji jangka masa pegangan yang berbeza: terlalu lama, mudah dipengaruhi oleh peristiwa yang tidak dijangka; terlalu pendek, kos dagangan dan kos slippage lebih tinggi. Cari hari pegangan yang optimum, dapat meningkatkan keuntungan strategi.

ringkaskan

Strategi pengesanan EMA rata-rata ganda secara keseluruhan adalah strategi pengesanan trend yang kukuh dan praktikal. Ia menggunakan EMA rata-rata untuk menilai tren harga yang berlainan, yang dapat mengesan arah pasaran dengan berkesan.

Kod sumber strategi
/*backtest
start: 2024-01-02 00:00:00
end: 2024-02-01 00:00:00
period: 2h
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/
// © TradersPostInc

//@version=5
strategy('TradersPost Example MOMO Strategy', overlay=true, default_qty_value=100, initial_capital=100000, default_qty_type=strategy.percent_of_equity, pyramiding=0)

startTime = input(defval = timestamp('01 Jan 2021 00:00 +0000'), title = 'Start Time', group = 'Date Range')
endTime = input(defval = timestamp('31 Dec 2023 23:59 +0000'), title = 'End Time', group = 'Date Range')
timeCondition = true
timeConditionEnd = timeCondition[1] and not timeCondition

fastEmaLength = input.int(defval = 8, title = 'Fast EMA Length')
slowEmaLength = input.int(defval = 21, title = 'Slow EMA Length')
sides = input.string(defval = 'Both', title = 'Sides', options = ['Long', 'Short', 'Both', 'None'])

fastEma = ta.ema(close, fastEmaLength)
slowEma = ta.ema(close, slowEmaLength)

isUptrend = fastEma >= slowEma
isDowntrend = fastEma <= slowEma
trendChanging = ta.cross(fastEma, slowEma)

ema105 = request.security(syminfo.tickerid, '30', ta.ema(close, 105)[1], barmerge.gaps_off, barmerge.lookahead_on)
ema205 = request.security(syminfo.tickerid, '30', ta.ema(close, 20)[1], barmerge.gaps_off, barmerge.lookahead_on)
plot(ema105, linewidth=4, color=color.new(color.purple, 0), editable=true)
plot(ema205, linewidth=2, color=color.new(color.purple, 0), editable=true)

aa = plot(fastEma, linewidth=3, color=color.new(color.green, 0), editable=true)
bb = plot(slowEma, linewidth=3, color=color.new(color.red, 0), editable=true)
fill(aa, bb, color=isUptrend ? color.green : color.red, transp=90)

tradersPostBuy = trendChanging and isUptrend and timeCondition
tradersPostSell = trendChanging and isDowntrend and timeCondition

pips = syminfo.pointvalue / syminfo.mintick

percentOrPipsInput = input.string('Percent', title='Percent or Pips', options=['Percent', 'Pips'])

stopLossLongInput = input.float(defval=0, step=0.01, title='Stop Loss Long', minval=0)
stopLossShortInput = input.float(defval=0, step=0.01, title='Stop Loss Short', minval=0)

takeProfitLongInput = input.float(defval=0, step=0.01, title='Target Profit Long', minval=0)
takeProfitShortInput = input.float(defval=0, step=0.01, title='Target Profit Short', minval=0)

stopLossPriceLong = ta.valuewhen(tradersPostBuy, close, 0) * (stopLossLongInput / 100) * pips
stopLossPriceShort = ta.valuewhen(tradersPostSell, close, 0) * (stopLossShortInput / 100) * pips

takeProfitPriceLong = ta.valuewhen(tradersPostBuy, close, 0) * (takeProfitLongInput / 100) * pips
takeProfitPriceShort = ta.valuewhen(tradersPostSell, close, 0) * (takeProfitShortInput / 100) * pips

takeProfitALong = takeProfitLongInput > 0 ? takeProfitLongInput : na
takeProfitBLong = takeProfitPriceLong > 0 ? takeProfitPriceLong : na

takeProfitAShort = takeProfitShortInput > 0 ? takeProfitShortInput : na
takeProfitBShort = takeProfitPriceShort > 0 ? takeProfitPriceShort : na

stopLossALong = stopLossLongInput > 0 ? stopLossLongInput : na
stopLossBLong = stopLossPriceLong > 0 ? stopLossPriceLong : na

stopLossAShort = stopLossShortInput > 0 ? stopLossShortInput : na
stopLossBShort = stopLossPriceShort > 0 ? stopLossPriceShort : na

takeProfitLong = percentOrPipsInput == 'Pips' ? takeProfitALong : takeProfitBLong
stopLossLong = percentOrPipsInput == 'Pips' ? stopLossALong : stopLossBLong
takeProfitShort = percentOrPipsInput == 'Pips' ? takeProfitAShort : takeProfitBShort
stopLossShort = percentOrPipsInput == 'Pips' ? stopLossAShort : stopLossBShort

buyAlertMessage = '{"ticker": "' + syminfo.ticker + '", "action": "buy", "price": ' + str.tostring(close) + '}'
sellAlertMessage = '{"ticker": "' + syminfo.ticker + '", "action": "sell", "price": ' + str.tostring(close) + '}'

exitLongAlertMessage = '{"ticker": "' + syminfo.ticker + '", "action": "exit", "price": ' + str.tostring(close) + '}'
exitShortAlertMessage = '{"ticker": "' + syminfo.ticker + '", "action": "exit", "price": ' + str.tostring(close) + '}'

if (sides != "None")
    if tradersPostBuy
        strategy.entry('Long', strategy.long, when = sides != 'Short', alert_message = buyAlertMessage)
        strategy.close('Short', when = sides == "Short" and timeCondition, alert_message = exitShortAlertMessage)

    if tradersPostSell
        strategy.entry('Short', strategy.short, when = sides != 'Long', alert_message = sellAlertMessage)
        strategy.close('Long', when = sides == 'Long', alert_message = exitLongAlertMessage)

exitAlertMessage = '{"ticker": "' + syminfo.ticker + '", "action": "exit"}'

strategy.exit('Exit Long', from_entry = "Long", profit = takeProfitLong, loss = stopLossLong, alert_message = exitAlertMessage)
strategy.exit('Exit Short', from_entry = "Short", profit = takeProfitShort, loss = stopLossShort, alert_message = exitAlertMessage)

strategy.close_all(when = timeConditionEnd)