Tren Mengikuti Strategi Berdasarkan Rata-rata Bergerak Crossover

Penulis:ChaoZhang, Tanggal: 2023-10-24 11:02:52
Tag:

img

Gambaran umum

Strategi ini terutama menggunakan salib emas dan salib mati rata-rata bergerak dan terobosan lilin rata-rata bergerak untuk membuat keputusan panjang dan pendek.

Prinsip-prinsip

  1. Menghitung dua rata-rata bergerak, EMA1 dan EMA2, dengan periode yang berbeda.

  2. Tentukan apakah EMA1 melintasi EMA2, jika ya, pergi panjang.

  3. Tentukan apakah EMA1 melintasi di bawah EMA2, jika ya, pergi pendek.

  4. Tentukan apakah harga penutupan menembus EMA1 sebagai sinyal masuk.

  5. Mekanisme keluar: atur stop loss tetap atau gunakan Donchian Channel untuk mengatur stop loss.

Fungsi utama yang digunakan:

  • ema ((): menghitung rata-rata bergerak eksponensial
  • crossover ((): menentukan apakah EMA1 melintasi EMA2
  • crossunder ((): menentukan apakah EMA1 melintasi di bawah EMA2
  • naik (() / turun ((): menentukan apakah harga naik atau turun
  • valuewhen(): mengembalikan nilai yang berbeda berdasarkan kondisi

Keuntungan

  1. Logika sederhana, mudah dipahami dan diterapkan.

  2. Menggunakan tren mengikuti ciri rata-rata bergerak untuk secara efektif melacak tren.

  3. Menggabungkan penembusan harga penutupan lilin membantu menghindari terobosan palsu.

  4. Penggunaan yang fleksibel dari kombinasi rata-rata bergerak yang berbeda yang dapat disesuaikan dengan periode yang berbeda.

  5. Mekanisme stop loss mengendalikan risiko.

Risiko

  1. Sering golden crosses dan mati salib selama konsolidasi pasar menyebabkan whipsaws.

  2. Titik stop loss tetap mungkin terlalu kaku untuk disesuaikan berdasarkan perubahan pasar.

  3. Rata-rata bergerak tertinggal dan mungkin melewatkan sinyal pembalikan pada titik balik.

  4. Penghakiman yang tepat dari kemiringan rata-rata bergerak diperlukan untuk menyaring terobosan palsu.

  5. Pemilihan parameter perlu hati-hati, frekuensi yang tidak tepat atau keterlambatan dapat mempengaruhi kinerja strategi.

Optimalisasi

  1. Perpindahan garis nol MACD dapat membantu menentukan tren dan konsolidasi filter.

  2. Tambahkan saluran Donchian untuk garis stop loss dinamis untuk meningkatkan stop loss tetap.

  3. Tambahkan Bollinger Bands untuk menilai tren yang kuat atau lemah, menghindari perdagangan yang tidak efektif selama konsolidasi pasar.

  4. Mengoptimalkan kombinasi parameter rata-rata bergerak dan menguji kinerja sebenarnya dari strategi periode yang berbeda.

  5. Pertimbangkan untuk menambahkan rata-rata bergerak yang tertanam untuk mengurangi lag.

Kesimpulan

Logika keseluruhan strategi ini sederhana dan jelas, memanfaatkan teknik perdagangan crossover rata-rata bergerak klasik, dan menggabungkan penembusan lilin untuk masuk untuk secara efektif menyaring sinyal palsu. ruang optimasi termasuk menggunakan indikator lain untuk kekuatan tren, berhenti dinamis dll. Secara umum, strategi mengikuti tren berdasarkan rata-rata bergerak klasik dan intuitif, dengan ruang eksplorasi yang berharga untuk optimasi.


/*backtest
start: 2023-09-01 00:00:00
end: 2023-10-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title='Mega crypto bot strategy', shorttitle='megacryptobot_Strategy', overlay=true, pyramiding=0, initial_capital=10000, currency=currency.USD)

//Candle body resistance Channel-----------------------------//
len = 34
src = input(close, title="Candle body resistance Channel")
out = sma(src, len)
last8h = highest(close, 13)
lastl8 = lowest(close, 13)
bearish = cross(close,out) == 1 and falling(close, 1)
bullish = cross(close,out) == 1 and rising(close, 1)
channel2=input(false, title="Bar Channel On/Off")
ul2=plot(channel2?last8h:last8h==nz(last8h[1])?last8h:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level top", offset=0)
ll2=plot(channel2?lastl8:lastl8==nz(lastl8[1])?lastl8:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level bottom", offset=0)
//fill(ul2, ll2, color=black, transp=95, title="Candle body resistance Channel")

//-----------------Support and Resistance 
RST = input(title='Support / Resistance length:',  defval=10) 
RSTT = valuewhen(high >= highest(high, RST), high, 0)
RSTB = valuewhen(low <= lowest(low, RST), low, 0)
RT2 = plot(RSTT, color=RSTT != RSTT[1] ? na : red, linewidth=1, offset=+0)
RB2 = plot(RSTB, color=RSTB != RSTB[1] ? na : green, linewidth=1, offset=0)

//--------------------Trend colour ema------------------------------------------------// 
src0 = close, len0 = input(13, minval=1, title="EMA 1")
ema0 = ema(src0, len0)
direction = rising(ema0, 2) ? +1 : falling(ema0, 2) ? -1 : 0
plot_color = direction > 0  ? lime: direction < 0 ? red : na
plot(ema0, title="EMA", style=line, linewidth=1, color = plot_color)

//-------------------- ema 2------------------------------------------------//
src02 = close, len02 = input(21, minval=1, title="EMA 2")
ema02 = ema(src02, len02)
direction2 = rising(ema02, 2) ? +1 : falling(ema02, 2) ? -1 : 0
plot_color2 = direction2 > 0  ? lime: direction2 < 0 ? red : na
plot(ema02, title="EMA Signal 2", style=line, linewidth=1, color = plot_color2)

//=============Hull MA//
show_hma = input(false, title="Display Hull MA Set:")
hma_src = input(close, title="Hull MA's Source:")
hma_base_length = input(8, minval=1, title="Hull MA's Base Length:")
hma_length_scalar = input(5, minval=0, title="Hull MA's Length Scalar:")
hullma(src, length)=>wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length)))
plot(not show_hma ? na : hullma(hma_src, hma_base_length+hma_length_scalar*6), color=black, linewidth=2, title="Hull MA")

//============ signal Generator ==================================//
period = input('720')
ch1 = request.security(syminfo.tickerid, period, open)
ch2 = request.security(syminfo.tickerid, period, close)
longCondition = crossover(request.security(syminfo.tickerid, period, close),request.security(syminfo.tickerid, period, open))
if (longCondition)
    strategy.entry("BUY", strategy.long)
shortCondition = crossunder(request.security(syminfo.tickerid, period, close),request.security(syminfo.tickerid, period, open))
if (shortCondition)
    strategy.entry("SELL", strategy.short)

///////////////////////////////////////////////////////////////////////////////////////////

Lebih banyak