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.
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.
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)