Strategi silang purata bergerak berganda

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

Ringkasan

Ini adalah strategi perdagangan berdasarkan crossover purata bergerak berganda. Ia menggunakan interaksi antara purata bergerak pantas dan perlahan untuk menentukan trend pasaran dan menghasilkan isyarat perdagangan. Apabila MA pantas melintasi di atas MA perlahan, isyarat beli dihasilkan. Apabila MA pantas melintasi di bawah MA perlahan, isyarat jual dihasilkan.

Prinsip

Strategi ini terutamanya menggunakan keupayaan pengesanan trend purata bergerak. Purata bergerak adalah harga purata yang dikira dalam tempoh tertentu berdasarkan harga penutupan sejarah. Mereka boleh meratakan turun naik kecil intraday dan mencerminkan trend jangka masa yang lebih besar. MA pantas menggunakan tempoh yang lebih pendek dan dapat bertindak balas dengan lebih cepat terhadap perubahan harga, sementara MA perlahan menggunakan tempoh yang lebih lama dan mewakili trend jangka panjang. Pembebasan MA pantas di atas MA perlahan menunjukkan momentum jangka pendek sedang memecahkan trend jangka panjang ke atas, menandakan trend menaik sedang bermula. Sebaliknya, penyambutan MA pantas di bawah MA perlahan bermakna trend jangka panjang berada di bawah tekanan dan harga mungkin jatuh.

Strategi ini menghasilkan isyarat perdagangan dengan menetapkan purata bergerak panjang kitaran yang berbeza dan menggunakan persilangan mereka. Apabila MA kitaran pendek melintasi di atas MA kitaran panjang, ia menandakan peningkatan momentum jangka pendek dan menghasilkan isyarat beli. Apabila MA kitaran pendek melintasi di bawah MA kitaran panjang, ia menunjukkan trend jangka pendek yang melemah dan menghasilkan isyarat jual. Kod strategi memetakan MA dengan fungsi plot, menggunakan pembolehubah trend untuk menentukan persilangan MA, dan mengeluarkan isyarat beli dan jual apabila persilangan berlaku.

Kelebihan

  • Menggunakan persilangan MA untuk menentukan perubahan trend adalah teknik yang mudah dan berkesan
  • MA boleh menapis bunyi bising pasaran dengan berkesan dan mengelakkan whipsaws
  • Penyesuaian tempoh MA cepat dan perlahan boleh disesuaikan dengan keadaan pasaran yang berbeza
  • Secara visual menunjukkan isyarat trend dan titik perubahan
  • Mudah difahami, penyesuaian parameter yang fleksibel

Risiko

  • Crossover MA berganda mempunyai kelewatan masa dan mungkin terlepas titik belokan
  • Tidak sesuai untuk pasaran rentang, boleh menghasilkan lebih banyak isyarat palsu
  • Tetapan tempoh MA yang tidak betul boleh menyebabkan keterlaluan sensitif atau kelembapan
  • Membutuhkan penunjuk lain untuk mengesahkan konteks trend dan masa

Arahan pengoptimuman

  • Menilai keuntungan dari parameter tempoh MA yang berbeza dan memilih yang optimum
  • Tambah penapis lain seperti penunjuk saluran, corak candlestick dan lain-lain
  • Menggabungkan penunjuk turun naik untuk mengoptimumkan stop loss dan mengambil keuntungan
  • Gunakan algoritma pembelajaran mesin untuk mengoptimumkan parameter dan peraturan secara automatik
  • Tambah modul dagangan algoritma untuk pelaksanaan pesanan automatik

Ringkasan

Strategi crossover MA berganda menggunakan keupayaan penjejakan trend purata bergerak dan menghasilkan isyarat berdasarkan silangannya. Walaupun mudah dan intuitif, ia juga mempunyai beberapa kelemahan. Ini boleh diatasi dengan penyesuaian parameter, menambah pengesahan, pengoptimuman algoritma dan lain-lain untuk mengubahnya menjadi sistem yang kukuh. Secara keseluruhan, strategi MA berganda adalah strategi trend 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 lanjut