Strategi Perdagangan Purata Pergerakan Momentum


Tarikh penciptaan: 2024-01-24 11:09:58 Akhirnya diubah suai: 2024-01-24 11:09:58
Salin: 0 Bilangan klik: 614
1
fokus pada
1617
Pengikut

Strategi Perdagangan Purata Pergerakan Momentum

Gambaran keseluruhan

Strategi ini berdasarkan persilangan purata bergerak cepat dan perlahan untuk menilai tren pasaran dan titik jual beli. Apabila EMA cepat melintasi EMA perlahan, ia dianggap sebagai tren naik dan menghasilkan isyarat beli; apabila EMA cepat melintasi EMA perlahan, ia dianggap sebagai tren menurun dan menghasilkan isyarat jual. Strategi ini juga menetapkan harga henti dan berhenti untuk menguruskan risiko.

Prinsip Strategi

Strategi ini menggunakan persilangan EMA cepat (garis 8 hari) dan EMA perlahan (garis 21 hari) untuk menilai trend pasaran. Logiknya ialah:

  1. Hitung EMA 8 dan EMA 21
  2. Apabila EMA 8 melangkaui EMA 21 pada hari ini, ia dianggap sebagai perubahan pasaran dan trend naik bermula
  3. Apabila EMA 8 turun melalui EMA 21, ia dianggap sebagai perubahan pasaran dan trend menurun bermula.
  4. Mencipta isyarat beli apabila dalam trend menaik; menghasilkan isyarat jual apabila dalam trend menurun
  5. Tetapkan harga hentian dan hentian untuk menguruskan risiko setiap pesanan

Strategi ini menggabungkan indikator momentum dan analisis trend untuk menangkap arah dan titik-titik perubahan pasaran dengan berkesan. EMA melintas dengan perlahan dan menggabungkan purata bergerak yang lancar untuk menyaring beberapa isyarat perdagangan bising.

Analisis kelebihan

Strategi ini mempunyai kelebihan utama:

  1. EMA pantas dan EMA perlahan yang bercampur-campur dapat menentukan tren pasaran dan titik jual beli
  2. Parameter strategi mempunyai ruang untuk dioptimumkan, dan kitaran EMA boleh disesuaikan lebih lanjut
  3. Gabungan penunjuk kuantiti, boleh menapis isyarat bising dengan berkesan
  4. Tetapkan logik stop loss untuk mengawal risiko secara aktif

Secara keseluruhannya, strategi ini menggabungkan trend dan penunjuk momentum, yang dapat disesuaikan dengan keadaan pasaran yang berbeza melalui penyesuaian parameter, dan merupakan strategi perdagangan garis pendek yang agak fleksibel.

Analisis risiko

Strategi ini juga mempunyai risiko:

  1. Dalam keadaan yang bergolak, EMA sering bercampur-campur dan menyebabkan lebih banyak perdagangan yang salah.
  2. Kegagalan untuk menangani keadaan yang berlaku di dalam jurang udara
  3. Tidak mengambil kira trend jangka panjang di peringkat besar.

Untuk mengatasi risiko ini, kita boleh mengoptimumkan beberapa aspek:

  1. Menambah penapis untuk penunjuk lain, seperti pita Brin, KDJ dan lain-lain, untuk mengurangkan kemungkinan isyarat salah
  2. Kaedah untuk menilai trend jangka panjang dengan menggunakan indikator kitaran yang lebih besar
  3. Optimumkan parameter, sesuaikan panjang EMA untuk menyesuaikan diri dengan keadaan pasaran yang berbeza
  4. Perdagangan campur tangan manusia untuk mengelakkan kerugian yang lebih besar daripada kerugian yang terhad

Arah pengoptimuman

Strategi ini masih mempunyai ruang yang luas untuk pengoptimuman, terutamanya dari arah berikut:

  1. Mengoptimumkan parameter kitaran EMA, menguji kadar pulangan parameter yang berbeza pada data sejarah
  2. Menambah penapisan untuk petunjuk teknikal lain seperti KDJ, MACD dan sebagainya untuk meningkatkan ketepatan strategi
  3. Pengaturan Stop Loss yang dioptimumkan supaya lebih sesuai dengan keadaan
  4. Optimumkan parameter secara automatik melalui kaedah pembelajaran mesin

Langkah-langkah pengoptimuman ini dapat meningkatkan kestabilan, kebolehan beradaptasi dan keuntungan strategi.

ringkaskan

Strategi ini secara keseluruhannya adalah strategi perdagangan garis pendek yang tipikal berdasarkan trend mengikuti dan penyambungan indikator momentum. Ia menggabungkan EMA garis cepat dan perlahan dan logik stop loss, yang dapat menangkap peluang arah pasaran dengan cepat.

Kod sumber strategi
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-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/
// © TradersPostInc

//@version=5
strategy('TradersPost Example MOMO Strategy', overlay=true)

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)