Momentum Moving Average Crossover Trading Strategi

Penulis:ChaoZhang, Tanggal: 2024-01-24 11:09:58
Tag:

img

Gambaran umum

Strategi ini menghasilkan sinyal perdagangan berdasarkan persilangan antara garis rata-rata bergerak cepat dan lambat untuk menentukan tren pasar dan titik masuk. Ketika EMA cepat melintasi di atas EMA lambat, dinilai bahwa pasar berada dalam tren kenaikan dan sinyal beli dihasilkan. Ketika EMA cepat melintasi di bawah EMA lambat, dinilai bahwa pasar berada dalam tren penurunan dan sinyal jual dihasilkan. Strategi ini juga menetapkan stop loss dan mengambil harga keuntungan untuk mengelola risiko.

Logika Strategi

Strategi ini menggunakan persilangan antara EMA cepat (8 hari) dan EMA lambat (21 hari) untuk menentukan tren pasar.

  1. Menghitung EMA 8 hari dan EMA 21 hari
  2. Ketika EMA 8 hari melintasi di atas EMA 21 hari, ditentukan bahwa tren pasar telah berbalik dan tren kenaikan telah dimulai.
  3. Ketika EMA 8 hari melintasi di bawah EMA 21 hari, ditentukan bahwa tren pasar telah berbalik dan tren menurun telah dimulai.
  4. Selama tren naik, sinyal beli dihasilkan. Selama tren turun, sinyal jual dihasilkan
  5. Atur harga stop loss dan harga profit untuk mengelola risiko untuk setiap posisi

Strategi ini menggabungkan indikator momentum dan analisis tren untuk secara efektif menangkap arah pasar dan titik pembalikan.

Analisis Keuntungan

Keuntungan utama dari strategi ini adalah:

  1. Pembebasan EMA yang cepat dan lambat dapat secara efektif menentukan tren pasar dan sinyal perdagangan
  2. Ruang pengoptimalan yang luas untuk parameter strategi di mana periode EMA dapat disesuaikan lebih lanjut
  3. Sinyal kebisingan dapat disaring secara efektif dengan memasukkan indikator momentum
  4. Kontrol risiko aktif dengan mengkonfigurasi logika stop loss dan take profit

Singkatnya, strategi ini menggabungkan indikator tren dan momentum. Melalui penyesuaian parameter, strategi ini dapat beradaptasi dengan lingkungan pasar yang berbeda dan merupakan strategi perdagangan jangka pendek yang relatif fleksibel.

Analisis Risiko

Ada juga beberapa risiko dengan strategi ini:

  1. Di pasar yang berbeda, sinyal EMA crossover yang sering dapat menghasilkan lebih banyak perdagangan palsu
  2. Risiko kesenjangan tidak ditangani secara efektif
  3. Arah tren jangka panjang tidak dipertimbangkan

Untuk mengatasi risiko ini, beberapa optimasi dapat dilakukan:

  1. Tambahkan filter lain seperti Bollinger Bands, KDJ untuk mengurangi sinyal palsu
  2. Menggabungkan indikator jangka waktu yang lebih tinggi untuk menentukan tren jangka panjang
  3. Mengoptimalkan parameter seperti panjang EMA untuk menyesuaikan dengan pasar yang berbeda
  4. Intervensi manual untuk menghindari kerugian besar dari celah

Arahan Optimasi

Masih banyak ruang untuk mengoptimalkan strategi ini:

  1. Mengoptimalkan parameter periode EMA berdasarkan kinerja historis
  2. Tambahkan indikator teknis lain untuk penyaringan sinyal misalnya KDJ, MACD untuk meningkatkan akurasi
  3. Mengoptimalkan pengaturan stop loss dan mengambil keuntungan agar lebih sesuai dengan karakteristik pasar
  4. Menggunakan teknik pembelajaran mesin untuk optimasi parameter otomatis

Langkah-langkah ini dapat sangat meningkatkan stabilitas, kemampuan beradaptasi dan profitabilitas strategi.

Kesimpulan

Kesimpulannya, ini adalah strategi perdagangan jangka pendek yang khas berdasarkan trend mengikuti dan momentum indikator persilangan. Ini menggabungkan EMA crossover logika dan stop loss / mengambil keuntungan untuk dengan cepat menangkap arah pasar peluang. Ada banyak ruang untuk optimasi dengan memperkenalkan indikator bantuan lainnya dan otomatis parameter metode tuning, yang dapat membuat kinerja strategi lebih stabil dan luar biasa. Ini cocok bagi investor yang memiliki beberapa pemahaman pasar dan bersedia untuk perdagangan sering.


/*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)

Lebih banyak