Momentum Trading: Strategi Crossover Rata-rata Pergerakan Ganda


Tanggal Pembuatan: 2024-04-01 11:53:14 Akhirnya memodifikasi: 2024-04-01 11:53:14
menyalin: 4 Jumlah klik: 597
1
fokus pada
1617
Pengikut

Momentum Trading: Strategi Crossover Rata-rata Pergerakan Ganda

Ringkasan

Strategi ini menggunakan indeks bergerak rata-rata ((EMA) dari 8 periode dan 21 periode untuk mengidentifikasi perubahan tren pasar. Ketika EMA periode yang lebih pendek melintasi EMA periode yang lebih panjang dari bawah, menghasilkan sinyal beli; sebaliknya, ketika EMA periode yang lebih pendek melintasi EMA periode yang lebih panjang dari atas, menghasilkan sinyal jual. Strategi ini juga menggabungkan tiga titik rendah berturut-turut yang lebih tinggi ((HLL) dan tiga titik tinggi berturut-turut yang lebih rendah ((LLH) sebagai sinyal untuk mengkonfirmasi pembalikan tren lebih lanjut. Selain itu, strategi ini juga menetapkan level stop loss dan stop loss untuk mengendalikan risiko dan mengunci keuntungan.

Prinsip Strategi

  1. Menghitung EMA 8 siklus dan 21 siklus untuk mengidentifikasi arah tren utama.
  2. Identifikasi tiga titik rendah berturut-turut yang lebih tinggi (HLL) dan tiga titik tinggi berturut-turut yang lebih rendah (LLH), sebagai sinyal awal pembalikan tren.
  3. Ketika 8 siklus EMA dari bawah melintasi 21 siklus EMA, dan terjadi HLL terobosan, menghasilkan sinyal beli; ketika 8 siklus EMA dari atas melintasi 21 siklus EMA, dan terjadi LLH terobosan, menghasilkan sinyal jual.
  4. Set stop loss level 5% dari harga masuk dan stop loss level 16% dari harga masuk untuk mengontrol risiko dan mengunci keuntungan.
  5. Ketika muncul sinyal mundur, tutup posisi dan kembali buka posisi.

Keunggulan Strategis

  1. Kombinasi EMA dan pola perilaku harga ((HLL dan LLH) untuk mengkonfirmasi tren, meningkatkan keandalan sinyal.
  2. Tetapkan tingkat stop loss dan stop loss yang jelas untuk membantu mengendalikan risiko dan mengunci keuntungan.
  3. Ada beberapa kerangka waktu dan pasar yang berbeda, dengan beberapa universalitas.
  4. Logika yang jelas, mudah dipahami dan diterapkan.

Risiko Strategis

  1. Dalam pasar yang bergejolak, seringnya persilangan dapat menyebabkan beberapa kali sinyal palsu yang mengakibatkan kerugian.
  2. Tingkat stop loss dan stop loss yang ditetapkan mungkin tidak dapat disesuaikan dengan kondisi pasar yang berbeda, yang menyebabkan potensi biaya peluang atau kerugian yang lebih besar.
  3. Strategi bergantung pada data historis dan mungkin kurang beradaptasi terhadap peristiwa mendadak atau perubahan fundamental.

Arah optimasi strategi

  1. Memperkenalkan mekanisme stop loss dan stop adjustment, seperti ATR, untuk menyesuaikan tingkat stop loss dan stop loss berdasarkan volatilitas, agar lebih sesuai dengan kondisi pasar yang berbeda.
  2. Kombinasi dengan indikator atau faktor lain, seperti volume transaksi, RSI (Relative Strength Index) dan lain-lain, untuk lebih memfilter sinyal dan meningkatkan keandalan.
  3. Optimalkan parameter (misalnya, siklus EMA, stop loss, stop loss ratio, dll.) untuk menemukan kombinasi parameter yang terbaik untuk pasar atau indikator tertentu.
  4. Pertimbangkan untuk memperkenalkan langkah-langkah manajemen risiko, seperti posisi sizing, untuk mengendalikan risiko pada transaksi tunggal.

Meringkaskan

Strategi ini memanfaatkan persilangan 8 siklus dan 21 siklus EMA, digabungkan dengan model harga HLL dan LLH, untuk mengidentifikasi pembalikan tren dan menghasilkan sinyal perdagangan. Aturan stop loss yang jelas membantu mengendalikan risiko dan mengunci keuntungan. Namun, strategi ini mungkin menghasilkan sinyal palsu di pasar yang bergolak, dan level stop loss yang tetap mungkin tidak dapat beradaptasi dengan lingkungan pasar yang berbeda.

Kode Sumber Strategi
/*backtest
start: 2023-03-26 00:00:00
end: 2024-03-31 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Trend Following 8&21EMA with strategy tester [ukiuro7]', overlay=true, process_orders_on_close=true, calc_on_every_tick=true, initial_capital = 10000)

//INPUTS
lh3On = true
hl3On = true
emaOn = input(title='105ema / 30min', defval=true) 
assistantOn = input(title='Assistant', defval=true)
textOn = input(title='Text', defval=true)

showRiskReward = input.bool(true, title='Show Risk/Reward Area', group="TP/SL")
stopPerc = input.float(5.0, step=0.1, minval=0.1, title='Stop-Loss %:',group="TP/SL") / 100
tpPerc = input.float(16.0, step=0.1, minval=0.1, title='Take-Profit %:',group="TP/SL") / 100

backtestFilter = input(false, title='Backtest Entries to Date Range',group="Backtest Date Range")
i_startTime = input(defval=timestamp('01 Jan 2022 00:00'), inline="b_1", title='Start',group="Backtest Date Range")
i_endTime = input(defval=timestamp('01 Jan 2029 00:00'), inline="b_1", title='End',group="Backtest Date Range")
inDateRange = true

message_long_entry = input.string(title='Alert Msg: LONG Entry', defval ='', group='Alert Message')
message_short_entry = input.string(title='Alert Msg: SHORT Entry', defval='', group='Alert Message')
message_long_exit = input.string(title='Alert Msg: LONG SL/TP', defval='', group='Alert Message')
message_short_exit = input.string(title='Alert Msg: SHORT SL/TP', defval='', group='Alert Message')  

//CALCS
threeHigherLows() =>
    low[0] >= low[1] and low[1] >= low[2]

threeLowerHighs() =>
    high[2] >= high[1] and high[1] >= high[0]

breakHigher() =>
    padding = timeframe.isintraday ? .02 : .1
    high >= high[1] + padding

breakLower() =>
    padding = timeframe.isintraday ? .02 : .1
    low <= low[1] - padding

lh3 = threeLowerHighs() and lh3On
lh3bh = lh3[1] and breakHigher() and lh3On

hl3 = threeHigherLows() and hl3On
hl3bl = hl3[1] and breakLower() and hl3On

ema8 = ta.ema(close, 8)
ema21 = ta.ema(close, 21)

//VARS
var float longStop = na, var float longTp = na
var float shortStop = na, var float shortTp = na

//CONDS
isUptrend = ema8 >= ema21
isDowntrend = ema8 <= ema21
trendChanging = ta.cross(ema8, ema21)

buySignal = lh3bh and lh3[2] and lh3[3] and isUptrend and timeframe.isintraday
sellSignal = hl3bl and hl3[2] and hl3[3] and isDowntrend and timeframe.isintraday

goingDown = hl3 and isDowntrend and timeframe.isintraday
goingUp = lh3 and isUptrend and timeframe.isintraday

projectXBuy = trendChanging and isUptrend
projectXSell = trendChanging and isDowntrend

longCond = trendChanging and isUptrend and assistantOn
shortCond = trendChanging and isDowntrend and assistantOn

//STRATEGY
if shortCond and strategy.position_size > 0 and barstate.isconfirmed
    strategy.close('Long', comment='CLOSE LONG', alert_message=message_long_exit)

if longCond and strategy.position_size < 0 and barstate.isconfirmed
    strategy.close('Short', comment='CLOSE SHORT', alert_message=message_short_exit) 

if longCond and strategy.position_size <= 0 and barstate.isconfirmed and inDateRange
    longStop := close * (1 - stopPerc)
    longTp := close * (1 + tpPerc)
    strategy.entry('Long', strategy.long, comment='LONG', alert_message=message_long_entry)
    strategy.exit('Long Exit', 'Long', comment_loss="SL LONG", comment_profit = "TP LONG", stop=longStop, limit=longTp, alert_message=message_long_exit)

if shortCond and strategy.position_size >= 0 and barstate.isconfirmed and inDateRange
    shortStop := close * (1 + stopPerc)
    shortTp := close * (1 - tpPerc)
    strategy.entry('Short', strategy.short, comment='SHORT', alert_message=message_short_entry)
    strategy.exit('Short Exit', 'Short', comment_loss="SL SHORT", comment_profit="TP SHORT", stop=shortStop, limit=shortTp, alert_message=message_short_exit)

//PLOTS
plotshape(longCond, style=shape.triangleup, location=location.belowbar, color=color.new(color.green, 0), size=size.small, text='Buy')
plotshape(shortCond, style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), size=size.small, text='Sell')
plotchar(trendChanging and isUptrend and close < open and assistantOn, char='!', location=location.abovebar, color=color.new(color.green, 0), size=size.small)

aa = plot(ema8, linewidth=3, color=color.new(color.green, 0), editable=true)
bb = plot(ema21, linewidth=3, color=color.new(color.red, 0), editable=true)
fill(aa, bb, color=isUptrend ? color.new(color.green,90) : color.new(color.red,90))
buyZone = isUptrend and lh3 and high < ema21 and timeframe.isintraday
sellZone = isDowntrend and hl3 and low > ema21 and timeframe.isintraday

L1 = plot(showRiskReward and strategy.position_size > 0 ? strategy.position_avg_price : na, color=color.new(color.green, 0), linewidth=1, style=plot.style_linebr, title='Long Entry Price')
L2 = plot(showRiskReward and strategy.position_size > 0 ? longTp : na, color=color.new(color.green, 0), linewidth=1, style=plot.style_linebr, title='Long TP Price')
L3 = plot(showRiskReward and strategy.position_size > 0 ? longStop : na, color=color.new(color.red, 0), linewidth=1, style=plot.style_linebr, title='Long Stop Price')

S1 = plot(showRiskReward and strategy.position_size < 0 ? strategy.position_avg_price : na, color=color.new(color.teal, 0), linewidth=1, style=plot.style_linebr, title='Short Entry Price')
S2 = plot(showRiskReward and strategy.position_size < 0 ? shortTp : na, color=color.new(color.teal, 0), linewidth=1, style=plot.style_linebr, title='Short TP Price')
S3 = plot(showRiskReward and strategy.position_size < 0 ? shortStop : na, color=color.new(color.maroon, 0), linewidth=1, style=plot.style_linebr, title='Short Stop Price')

fill(L1, L2, color=color.new(color.green, 90))
fill(L1, L3, color=color.new(color.red, 90))
fill(S1, S2, color=color.new(color.teal, 90))
fill(S1, S3, color=color.new(color.maroon, 90))

bgcolor(inDateRange == false ? color.new(color.red,90) : na, title="Backtest Off-Range")