Membalikkan Strategi Persilangan Purata Pergerakan Berganda


Tarikh penciptaan: 2023-12-28 12:00:27 Akhirnya diubah suai: 2023-12-28 12:00:27
Salin: 0 Bilangan klik: 543
1
fokus pada
1623
Pengikut

Membalikkan Strategi Persilangan Purata Pergerakan Berganda

Ringkasan: Strategi ini adalah strategi dagangan klasik berdasarkan persilangan rata-rata, indikator memilih garis rata-rata ganda, termasuk purata bergerak sederhana ((SMA), purata bergerak indeks ((EMA), purata bergerak linear bertimbangan ((VWMA) dan purata bergerak bertimbangan goyah ((HMA)).

Prinsip: Logik teras strategi adalah dua persilangan rata-rata. Dengan mengira rata-rata dua parameter yang berbeza, ia menghasilkan isyarat beli apabila ia melintasi rata-rata perlahan di atas rata-rata cepat; ia menghasilkan isyarat jual apabila ia melintasi rata-rata perlahan di bawah rata-rata cepat.

Analisis kelebihan: Kelebihan strategi silang dua garis rata adalah mudah digunakan, keputusan trend asas dapat diketahui melalui satu isyarat, tidak perlu terlalu banyak pilihan dan penyesuaian parameter, sangat sesuai untuk pedagang pemula. Dan pelbagai jenis garis rata mempunyai ujian, anda boleh memilih kombinasi yang berbeza untuk mengoptimumkannya.

Analisis risiko: Risiko utama strategi ini adalah bahawa strategi persilangan garis purata yang biasa akan mempunyai banyak isyarat palsu, yang menyebabkan masalah keuntungan kecil berganda, yang menjejaskan keuntungan keseluruhan. Selain itu, tetapan panjang garis purata tetap cepat dan perlahan juga akan hilang pada beberapa kitaran.

Arah pengoptimuman: 1) Uji ujian kitaran yang berbeza untuk menentukan kombinasi kitaran persilangan rata-rata yang terbaik. 2) Pertimbangkan untuk memperkenalkan parameter untuk set kedua garis rata-rata dan penghakiman tambahan untuk penunjuk RSI untuk mengurangkan isyarat palsu. 3) Masukkan penghakiman bersyarat berdasarkan perubahan kenaikan MA daripada persilangan mudah, untuk mendapatkan penghakiman persilangan yang lebih dipercayai.

Ringkasnya: Strategi ini menggunakan kerangka strategi silang linear tradisional, melakukan ujian dua linear untuk mencari kombinasi kitaran linear yang terbaik, sambil menambah penentuan kerugian berdasarkan ROC dan harga rata-rata. Secara keseluruhannya, strategi dua linear yang mudah digunakan dan sesuai dengan logik perdagangan kuantitatif. Selain itu, banyak idea pengoptimuman juga memberikan ruang untuk pengembangan strategi ini.

Kod sumber strategi
/*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")