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