Strategi Crossover Rata-rata Bergerak Ganda

Penulis:ChaoZhang, Tanggal: 2023-10-07 15:18:44
Tag:

Gambaran umum

Ini adalah strategi perdagangan yang didasarkan pada crossover rata-rata bergerak ganda. Ini menggunakan interaksi antara rata-rata bergerak cepat dan lambat untuk menentukan tren pasar dan menghasilkan sinyal perdagangan. Ketika MA cepat melintasi di atas MA lambat, sinyal beli dihasilkan. Ketika MA cepat melintasi di bawah MA lambat, sinyal jual dihasilkan.

Prinsip

Strategi ini terutama memanfaatkan kemampuan pelacakan tren rata-rata bergerak. Rata-rata bergerak adalah harga rata-rata yang dihitung selama periode tertentu berdasarkan harga penutupan historis. Mereka dapat meratakan fluktuasi kecil intraday dan mencerminkan tren kerangka waktu yang lebih besar. MA cepat menggunakan periode yang lebih pendek dan dapat merespons lebih cepat perubahan harga, sementara MA lambat menggunakan periode yang lebih lama dan mewakili tren jangka panjang. MA cepat melintasi di atas MA lambat menunjukkan momentum jangka pendek sedang menembus tren jangka panjang ke atas, menandakan tren naik sedang dimulai. Sebaliknya, MA cepat melintasi di bawah MA lambat berarti tren jangka panjang berada di bawah tekanan dan harga mungkin jatuh.

Strategi ini menghasilkan sinyal perdagangan dengan mengatur moving average dari panjang siklus yang berbeda dan menggunakan crossover mereka. Ketika MA siklus pendek melintasi di atas MA siklus panjang, itu menandakan peningkatan momentum jangka pendek dan menghasilkan sinyal beli. Ketika MA siklus pendek melintasi di bawah MA siklus panjang, itu menunjukkan melemahnya tren jangka pendek dan menghasilkan sinyal jual.

Keuntungan

  • Menggunakan MA silang untuk menentukan perubahan tren adalah teknik yang sederhana dan efektif
  • MA dapat menyaring kebisingan pasar secara efektif dan menghindari whipsaws
  • Penyesuaian periode MA cepat dan lambat dapat beradaptasi dengan kondisi pasar yang berbeda
  • Secara visual menunjukkan sinyal tren dan titik balik
  • Mudah dipahami, pengaturan parameter yang fleksibel

Risiko

  • Dual MA crossover memiliki keterlambatan waktu dan mungkin melewatkan titik belokan
  • Tidak cocok untuk pasar rentang, dapat menghasilkan lebih banyak sinyal palsu
  • Pengaturan periode MA yang tidak benar dapat menyebabkan sensitivitas berlebihan atau kelembaban
  • Membutuhkan indikator lain untuk mengkonfirmasi konteks tren dan waktu

Arahan Optimasi

  • Mengevaluasi profitabilitas dari parameter periode MA yang berbeda dan memilih yang optimal
  • Tambahkan filter lain seperti indikator saluran, pola candlestick dll.
  • Menggabungkan indikator volatilitas untuk mengoptimalkan stop loss dan mengambil keuntungan
  • Gunakan algoritma pembelajaran mesin untuk mengoptimalkan parameter dan aturan secara otomatis
  • Tambahkan modul perdagangan algoritmik untuk eksekusi pesanan otomatis

Ringkasan

Strategi crossover MA ganda memanfaatkan kemampuan pelacakan tren rata-rata bergerak dan menghasilkan sinyal berdasarkan silangannya. Meskipun sederhana dan intuitif, ia juga memiliki beberapa kekurangan. Ini dapat diatasi dengan penyesuaian parameter, menambahkan konfirmasi, pengoptimalan algoritma dll untuk mengubahnya menjadi sistem yang kuat. Secara keseluruhan, strategi MA ganda adalah strategi trend berikut yang sangat klasik dan mudah digunakan.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-04-14 00:00:00
period: 1d
basePeriod: 1h
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/
// © KivancOzbilgic


//@version=4
strategy("pomila", overlay=true)
Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=false)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
barcoloring = input(title="Bar Coloring On/Off ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor)
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 999)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 999)
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       
window()  => time >= start and time <= finish ? true : false
longCondition = buySignal
if (longCondition)
    strategy.entry("BUY", strategy.long, when = window())
shortCondition = sellSignal
if (shortCondition)
    strategy.entry("SELL", strategy.short, when = window())
buy1= barssince(buySignal)
sell1 = barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na
barcolor(barcoloring ? color1 : na)

Lebih banyak