Strategi crossover purata bergerak berganda pembalikan

Penulis:ChaoZhang, Tarikh: 2023-12-28 12:00:27
Tag:

img

Ringkasan: Strategi ini berdasarkan strategi perdagangan klasik crossover purata bergerak. Ia menggunakan purata bergerak berganda, termasuk purata bergerak mudah (SMA), purata bergerak eksponen (EMA), purata bergerak bertimbang berubah (VWMA) dan purata bergerak Hull (HMA).

Prinsip: Logik teras strategi adalah persilangan purata bergerak berganda. Dengan mengira dua purata bergerak dengan parameter yang berbeza, isyarat beli dihasilkan apabila purata bergerak pantas melintasi yang perlahan, dan isyarat jual dihasilkan apabila purata bergerak pantas melintasi yang perlahan.

Analisis Kelebihan: Kelebihan utama strategi crossover purata bergerak berganda adalah kesederhanaan dan kemudahan operasi. Dengan hanya satu isyarat, penilaian trend yang paling asas boleh diperoleh tanpa terlalu banyak pemilihan parameter dan penyesuaian, yang sangat sesuai untuk peniaga pemula. Di samping itu, pelbagai jenis purata bergerak diuji untuk mengoptimumkan kombinasi yang berbeza.

Analisis Risiko: Risiko utama strategi ini adalah bahawa strategi crossover purata bergerak biasa akan mempunyai banyak isyarat palsu, yang mengakibatkan banyak keuntungan kecil dan kedudukan rata, yang mempengaruhi pulangan keseluruhan.

Arahan pengoptimuman: 1) Uji tempoh yang berbeza untuk menentukan kombinasi optimum persilangan purata bergerak; 2) Pertimbangkan untuk memperkenalkan set kedua parameter purata bergerak dan penunjuk RSI untuk membantu penilaian untuk mengurangkan isyarat palsu; 3) Memperkenalkan penilaian keadaan berdasarkan perubahan tambahan penunjuk MA dan bukannya persilangan mudah untuk mendapatkan penilaian persilangan yang lebih boleh dipercayai.

Ringkasan: Strategi ini menggunakan kerangka strategi crossover purata bergerak tradisional untuk menguji purata bergerak berganda untuk mencari kombinasi optimum tempoh purata bergerak. Pada masa yang sama, ia menambah pertimbangan stop-loss berdasarkan ROC dan harga purata bergerak. Secara keseluruhan, ia adalah strategi purata bergerak berganda yang mudah dan mudah digunakan yang sesuai dengan logik perdagangan kuantitatif. Di samping itu, idea pengoptimuman yang kaya juga menyediakan ruang untuk pembangunan strategi ini.


/*backtest
start: 2023-11-27 00:00:00
end: 2023-12-27 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//study(title="MA Crossover Strategy", overlay = true)
strategy("MA Crossover Strategy with MA Turning Point Exits", overlay=true)
src = input(close, title="Source")

price = request.security(syminfo.tickerid, timeframe.period, src)
ma1 = input(5, title="1st MA Length")
type1 = input("HMA", "1st MA Type", options=["SMA", "EMA", "HMA", "VWMA"])

ma2 = input(7, title="2nd MA Length")
type2 = input("HMA", "2nd MA Type", options=["SMA", "EMA", "HMA", "VWMA"])

f_hma(_src, _length)=>
    _return = wma((2*wma(_src, _length/2))-wma(_src, _length), round(sqrt(_length)))
price1 = if (type1 == "SMA")
    sma(price, ma1)
else
    if (type1 == "EMA")
        ema(price, ma1)
    else
        if (type1 == "VWMA")
            vwma(price, ma1)
        else
            f_hma(price, ma1)
    
price2 = if (type2 == "SMA")
    sma(price, ma2)
else
    if (type2 == "EMA")
        ema(price, ma2)
    else
        if (type2 == "VWMA")
            vwma(price, ma2)
        else
            f_hma(price, ma2)

//plot(series=price, style=line,  title="Price", color=black, linewidth=1, transp=0)
plot(series=price1, style=line,  title="1st MA", color=blue, linewidth=2, transp=0)
plot(series=price2, style=line, title="2nd MA", color=green, linewidth=2, transp=0)


longCondition = crossover(price1, price2)
if (longCondition) // and time>timestamp(2018,6,1,9,30)
    strategy.entry("Long", strategy.long)

shortCondition = crossunder(price1, price2)
if (shortCondition) // and time>timestamp(2018,6,1,9,30)
    strategy.entry("Short", strategy.short)

lookback1 = input(1, "Lookback 1")
roc1 = roc(price1, lookback1)

ma1up = false
ma1down = false
ma2up = false
ma2down = false

ma1up := nz(ma1up[1])
ma1down := nz(ma1down[1])
ma2up := nz(ma2up[1])
ma2down := nz(ma2down[1])

trendStrength1 = input(2, title="Minimum slope magnitude * 100", type=float) * 0.01

if crossover(roc1, trendStrength1)
    ma1up := true
    ma1down := false
    
if crossunder(roc1, -trendStrength1) 
    ma1up := false
    ma1down := true

shortexitCondition = ma1up and ma1down[1]
if (shortexitCondition)
    strategy.close("Short")

longexitCondition = ma1down and ma1up[1]
if (longexitCondition)
    strategy.close("Long")



Lebih lanjut