
Strategi bergerak rata-rata persilangan adalah strategi analisis teknikal yang sangat klasik dan biasa digunakan. Gagasan utama strategi ini adalah menggunakan persilangan antara purata bergerak dari tempoh yang berbeza sebagai isyarat membeli dan menjual. Isyarat membeli dihasilkan apabila purata bergerak jangka pendek melintasi rata-rata bergerak jangka panjang dari bawah; Isyarat jual dihasilkan apabila purata bergerak jangka pendek melintasi rata-rata bergerak jangka panjang dari atas ke bawah.
Strategi ini menggunakan input jenis purata bergerak input (SMA, EMA, WMA, RMA) dan panjang kitaran, serta jangka masa pengukuran semula.
Mengira purata bergerak pelbagai jenis dalam fungsi varian. Purata bergerak yang dikira disimpan oleh ma.
Apabila harga tutup di atas Ma, ia akan menghasilkan isyarat beli; apabila harga tutup di bawah Ma, ia akan menghasilkan isyarat jual.
Untuk menetapkan hentian, rata-rata amplitudo riak sebenar untuk 14 kitaran dikira melalui atr. Dengan titik melintasi sebagai rujukan, ke atas atau ke bawah ditambah pengurangan 2 kaliatr sebagai julat hentian.
Logik masuk dan keluar adalah seperti berikut:
Masuk beramai-ramai: dekat dengan ma dan dalam masa pengiraan semula, titik henti adalah titik masuk Permulaan berbilang mata: tutup apabila ma dikurangkan dua kali lipat dari at, atau harga tertinggi melebihi titik masuk apabila tutup ditambah dua kali lipat dari at dan berhenti Masuk kosong: dekat dengan ma dan dalam masa pengiraan semula, titik henti adalah titik masuk Permulaan kosong: tutup dengan memakai ma ditambah 2 kaliatr ketika berhenti berdagang, atau harga terendah di bawah titik masuk tutup tolak 2 kaliatr ketika berhenti berdagang
Mengambil kira risiko, anda boleh mengoptimumkan:
Strategi ini boleh dioptimumkan dalam beberapa aspek:
Strategi penyambungan purata bergerak adalah strategi analisis teknikal yang sangat tipikal dan biasa digunakan. Gagasan teras strategi ini sederhana, mudah dilaksanakan, sesuai untuk pelbagai pasaran, dan merupakan salah satu strategi permulaan untuk perdagangan kuantitatif. Tetapi strategi ini juga mempunyai beberapa masalah, seperti menghasilkan isyarat yang kerap, mudah berhenti, dan sebagainya. Dengan pengoptimuman yang sesuai, prestasi strategi ini dapat ditingkatkan secara besar-besaran.
/*backtest
start: 2023-10-03 00:00:00
end: 2023-11-02 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("MA Cross Strategy", overlay=true,commission_value = 0.1)
type = input(defval = "WMA", title = "MA Type: ", options=["RMA", "SMA", "EMA", "WMA"])
length = input(28)
source = close
// === INPUT BACKTEST RANGE ===
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromYear = input(defval = 2000, title = "From Year", minval = 2000)
// === FUNCTION EXAMPLE ===
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(9999, 1, 1, 23, 59) // backtest finish window
window() => time >= start and time <= finish ? true : false // create function "within window of time"
variant(type, src, len) =>
v1 = sma(src, len) // Simple
v2 = ema(src, len) // Exponential
v5 = wma(src, len) // Weighted
v7 = rma(src, len) // Smoothed
type=="EMA"?v2 : type=="WMA"?v5 : type=="RMA"?v7 : v1
ma = variant(type,source, length)
atr = security(syminfo.tickerid, "D", atr(14))
range = valuewhen(cross(close,ma), (atr*2), na)
ep = valuewhen(cross(close,ma), close, na)
plot(ma,color=ma>ma[1]?color.blue:color.red,transp=0,linewidth=1)
plot(ep,color=#2196f3,transp=100,trackprice=true, offset=-9999)
plot(ep+range,color=#2196f3,transp=100,trackprice=true, offset=-9999)
plot(ep-range,color=#2196f3,transp=100,trackprice=true, offset=-9999)
strategy.entry("Long Entry", true, when = crossover(close,ma) and window() , stop = ep )
strategy.exit("Long Exit", "Long Entry", stop = ep-range)
strategy.exit("Long Exit", "Long Entry", when = high > ep+range ,stop = ep[1] )
strategy.entry("Short Entry", false, when = crossunder(close,ma) and window() , stop = ep )
strategy.exit("Short Exit", "Short Entry", stop = ep+range)
strategy.exit("Short Exit", "Short Entry", when = low < ep-range ,stop = ep[1] )