Strategi Perdagangan Rata-rata Pergerakan Momentum


Tanggal Pembuatan: 2024-01-24 11:09:58 Akhirnya memodifikasi: 2024-01-24 11:09:58
menyalin: 0 Jumlah klik: 614
1
fokus pada
1617
Pengikut

Strategi Perdagangan Rata-rata Pergerakan Momentum

Ringkasan

Strategi ini didasarkan pada persilangan rata-rata bergerak cepat dan lambat untuk menilai tren pasar dan titik jual beli. Ketika EMA cepat melewati EMA lambat, pasar dianggap sedang dalam tren naik dan menghasilkan sinyal beli. Ketika EMA cepat melewati EMA lambat, pasar dianggap sedang dalam tren turun dan menghasilkan sinyal jual. Strategi ini juga menetapkan harga stop loss dan stop loss untuk mengelola risiko.

Prinsip Strategi

Strategi ini menggunakan persilangan EMA cepat (garis 8) dan EMA lambat (garis 21) untuk menilai tren pasar. Logika spesifiknya adalah:

  1. Hitung EMA 8 dan EMA 21
  2. Ketika EMA 8 melintasi EMA 21 di hari ini, pasar mulai naik.
  3. Ketika EMA 8 turun melewati EMA 21, pasar dianggap bergeser, dan tren turun dimulai
  4. Pada saat tren naik, menghasilkan sinyal beli; pada saat tren turun, menghasilkan sinyal jual
  5. Atur Stop Loss dan Stop Stop Price untuk Mengelola Risiko Setiap Order

Strategi ini menggabungkan indikator momentum dan analisis tren untuk secara efektif menangkap arah dan titik balik pasar. EMA yang bergerak lambat dan digabungkan dengan rata-rata bergerak yang halus dapat memfilter beberapa sinyal perdagangan yang berisik.

Analisis Keunggulan

Strategi ini memiliki keuntungan utama sebagai berikut:

  1. EMA cepat dan EMA lambat yang bersilang dapat secara efektif menilai tren pasar dan titik jual beli
  2. Parameter strategi dapat dioptimalkan, dan siklus EMA dapat disesuaikan lebih lanjut
  3. Kombinasi dengan indikator momentum, dapat secara efektif memfilter sinyal noise
  4. Setting Stop Loss Stop Logic untuk mengontrol risiko secara proaktif

Secara keseluruhan, strategi ini menggabungkan indikator tren dan dinamika, yang dapat disesuaikan dengan berbagai kondisi pasar melalui penyesuaian parameter, dan merupakan strategi perdagangan garis pendek yang relatif fleksibel.

Analisis risiko

Strategi ini juga memiliki beberapa risiko:

  1. Dalam situasi yang bergejolak, sinyal EMA sering berselisih dan menghasilkan lebih banyak perdagangan yang salah
  2. Kegagalan untuk menangani masalah yang terjadi
  3. Tidak mempertimbangkan tren jangka panjang pada tingkat yang lebih besar.

Untuk mengatasi risiko ini, kita dapat mengoptimalkan beberapa hal berikut:

  1. Menambahkan filter indikator lain, seperti Brinband, KDJ, dan lain-lain, untuk mengurangi kemungkinan sinyal palsu
  2. Perhitungan tren jangka panjang dengan indikator siklus tingkat yang lebih besar
  3. Parameter optimasi, penyesuaian panjang EMA, adaptasi dengan kondisi pasar yang berbeda
  4. Perdagangan intervensi buatan untuk menghindari kerugian besar di atas stop loss

Arah optimasi

Ada banyak ruang untuk optimasi dalam strategi ini, terutama dari beberapa arah:

  1. Mengoptimalkan parameter siklus EMA, menguji tingkat pengembalian parameter yang berbeda pada data historis
  2. Menambahkan indikator teknis lainnya untuk memfilter, seperti KDJ, MACD, dan lain-lain, untuk meningkatkan akurasi strategi
  3. Pengaturan Stop Loss yang dioptimalkan agar lebih sesuai dengan situasi
  4. Parameter yang dioptimalkan secara otomatis melalui metode pembelajaran mesin

Langkah-langkah optimasi ini dapat secara signifikan meningkatkan stabilitas, fleksibilitas, dan profitabilitas strategi.

Meringkaskan

Strategi ini secara keseluruhan adalah strategi perdagangan garis pendek yang khas berdasarkan tren mengikuti dan momentum indikator silang. Ini menggabungkan EMA cepat dan lambat garis silang dan stop loss logika, dapat menangkap peluang arah pasar dengan cepat. Strategi ini memiliki ruang untuk optimasi yang besar, jika lebih lanjut memperkenalkan indikator tambahan lainnya, otomatis optimasi parameter dan lain-lain, dapat membuat kinerja strategi lebih stabil dan lebih baik.

Kode 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)