Tiga Strategi Perdagangan Kuantitatif Purata Pergerakan


Tarikh penciptaan: 2024-01-23 14:20:50 Akhirnya diubah suai: 2024-01-23 14:20:50
Salin: 0 Bilangan klik: 624
1
fokus pada
1617
Pengikut

Tiga Strategi Perdagangan Kuantitatif Purata Pergerakan

Strategi ini adalah strategi trend-following yang tipikal dengan mengira purata bergerak untuk tiga tempoh yang berbeza dan menggabungkannya dengan harga untuk membentuk isyarat perdagangan. Strategi ini bertujuan untuk mengesan trend jangka menengah di pasaran dan boleh digunakan untuk pelbagai jenis dan persekitaran perdagangan dengan parameter yang disesuaikan secara dinamik.

Prinsip

Strategi ini merangkumi tiga purata bergerak: MA1, MA2 dan MA3 membentuk saluran perdagangan antara MA1 dan MA2 yang bersilang memberikan isyarat perdagangan; MA3 digunakan untuk memfilter isyarat .

Apabila purata pantas MA1 melintasi purata jangka menengah MA2, menunjukkan bahawa trend jangka pendek menjadi kuat, maka ia akan menghasilkan isyarat melakukan lebih jika harga lebih tinggi daripada purata jangka panjang MA3; sebaliknya, jika MA1 melintasi MA2 di bawah dan harga lebih rendah daripada MA3, ia akan menghasilkan isyarat melakukan lebih.

MA3 berfungsi untuk menyaring kebisingan pasaran jangka pendek dan hanya memberi isyarat setelah trend ditetapkan untuk memasuki tahap jangka panjang. Strategi ini dapat mencari kombinasi parameter terbaik di pasaran yang berbeza dengan menyesuaikan parameter tiga purata bergerak secara dinamik.

Kelebihan

  • Mengambil trend kitaran yang berbeza dengan pelbagai purata bergerak
  • MA3 menapis isyarat untuk mengelakkan penipuan
  • Jenis dan parameter purata yang boleh disesuaikan
  • Pintas visual untuk mengenal pasti titik isyarat

Risiko

  • Rata-rata bergerak bersilang terlewat apabila trend kitaran besar berbalik
  • Frekuensi dagangan mungkin terlalu tinggi, meningkatkan kos dagangan dan risiko tergelincir
  • Parameter yang tidak betul boleh menyebabkan perdagangan berlebihan atau isyarat isyarat yang terlewat

Anda boleh menyesuaikan kitaran MA, mengoptimumkan parameter untuk memilih varieti yang berbeza; mengoptimumkan strategi stop loss, mengawal kerugian tunggal; mengesahkan keberkesanan isyarat, mengurangkan kebarangkalian isyarat palsu, digabungkan dengan petunjuk teknikal lain.

Arah pengoptimuman

  • Menambah trend penghakiman lain seperti MACD, BRI dan sebagainya
  • Tambah strategi stop loss/stop loss
  • Mengubah parameter secara dinamik untuk mencari kombinasi parameter optimum
  • Optimumkan parameter pelbagai jenis
  • Mempertimbangkan kos transaksi dan mengoptimumkan kekerapan transaksi

ringkaskan

Strategi ini adalah strategi pengesanan trend yang tipikal. Strategi ini boleh digunakan untuk pelbagai jenis dengan pengoptimuman parameter, tetapi terdapat risiko tersandung dan kehilangan titik balik. Strategi ini dapat dioptimumkan dengan memperkenalkan indikator teknikal lain untuk menilai keberkesanan isyarat, mengembangkan mekanisme pengoptimuman parameter dinamik, dan sebagainya.

Kod sumber strategi
/*backtest
start: 2023-01-16 00:00:00
end: 2024-01-22 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/
// © Meesemoo

//@version=4
strategy("Custom MA Strategy Tester", overlay = true)
MA1Period = input(13, title="MA1 Period")
MA1Type = input(title="MA1 Type", defval="SMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "DEMA", "TEMA"])
MA1Source = input(title="MA1 Source", type=input.source, defval=close)
MA1Visible = input(title="MA1 Visible", type=input.bool, defval=true)
MA2Period = input(50, title="MA2 Period")
MA2Type = input(title="MA2 Type", defval="SMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "DEMA", "TEMA"])
MA2Source = input(title="MA2 Source", type=input.source, defval=close)
MA2Visible = input(title="MA2 Visible", type=input.bool, defval=true) 
MA3Period = input(200, title="MA3 Period")
MA3Type = input(title="MA3 Type", defval="SMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "DEMA", "TEMA"])
MA3Source = input(title="MA3 Source", type=input.source, defval=close)
MA3Visible = input(title="MA3 Visible", type=input.bool, defval=true)
ShowCrosses = input(title="Show Crosses", type=input.bool, defval=true)

MA1 = if MA1Type == "SMA"
    sma(MA1Source, MA1Period)
else
    if MA1Type == "EMA"
        ema(MA1Source, MA1Period)
    else
        if MA1Type == "WMA"
            wma(MA1Source, MA1Period)
        else
            if MA1Type == "RMA"
                rma(MA1Source, MA1Period)
            else
                if MA1Type == "HMA"
                    wma(2*wma(MA1Source, MA1Period/2)-wma(MA1Source, MA1Period), round(sqrt(MA1Period)))
                else
                    if MA1Type == "DEMA"
                        e = ema(MA1Source, MA1Period)
                        2 * e - ema(e, MA1Period)
                    else
                        if MA1Type == "TEMA"
                            e = ema(MA1Source, MA1Period)
                            3 * (e - ema(e, MA1Period)) + ema(ema(e, MA1Period), MA1Period)

                    
MA2 = if MA2Type == "SMA"
    sma(MA2Source, MA2Period)
else
    if MA2Type == "EMA"
        ema(MA2Source, MA2Period)
    else
        if MA2Type == "WMA"
            wma(MA2Source, MA2Period)
        else
            if MA2Type == "RMA"
                rma(MA2Source, MA2Period)
            else
                if MA2Type == "HMA"
                    wma(2*wma(MA2Source, MA2Period/2)-wma(MA2Source, MA2Period), round(sqrt(MA2Period)))
                else
                    if MA2Type == "DEMA"
                        e = ema(MA2Source, MA2Period)
                        2 * e - ema(e, MA2Period)
                    else
                        if MA2Type == "TEMA"
                            e = ema(MA2Source, MA2Period)
                            3 * (e - ema(e, MA2Period)) + ema(ema(e, MA2Period), MA2Period)
                    
MA3 = if MA3Type == "SMA"
    sma(MA3Source, MA3Period)
else
    if MA3Type == "EMA"
        ema(MA3Source, MA3Period)
    else
        if MA3Type == "WMA"
            wma(MA3Source, MA3Period)
        else
            if MA3Type == "RMA"
                rma(MA3Source, MA3Period)
            else
                if MA3Type == "HMA"
                    wma(2*wma(MA3Source, MA3Period/2)-wma(MA3Source, MA3Period), round(sqrt(MA3Period)))
                else
                    if MA3Type == "DEMA"
                        e = ema(MA3Source, MA3Period)
                        2 * e - ema(e, MA3Period)
                    else
                        if MA3Type == "TEMA"
                            e = ema(MA3Source, MA3Period)
                            3 * (e - ema(e, MA3Period)) + ema(ema(e, MA3Period), MA3Period)
                    


p1 = plot(MA1Visible ? MA1 : na, color=color.green, linewidth=1)
p2 = plot(MA2Visible ? MA2 : na, color=color.yellow, linewidth=1)
p3 = plot(MA3Visible ? MA3 : na, color=color.red, linewidth=2)

fill(p1, p2, color.silver, transp=80, title="Fill")


start = timestamp(2019, 1, 1, 1, 0)
end = timestamp(2025, 1, 1, 1, 0)

if time >= start and time <= end
    longCondition = crossover(MA1, MA2) and close > MA3
    if (longCondition)
        strategy.entry("Long", strategy.long)
        
    shortCondition = crossunder(MA1, MA2) and close < MA3
    if (shortCondition)
        strategy.entry("Short", strategy.short)