Tiga Strategi Perdagangan Kuantitatif Rata-rata Bergerak


Tanggal Pembuatan: 2024-01-23 14:20:50 Akhirnya memodifikasi: 2024-01-23 14:20:50
menyalin: 0 Jumlah klik: 624
1
fokus pada
1617
Pengikut

Tiga Strategi Perdagangan Kuantitatif Rata-rata Bergerak

Strategi ini merupakan strategi pelacakan tren yang khas dengan menghitung moving average dari tiga periode yang berbeda, dan digabungkan dengan harga yang terobosan untuk membentuk sinyal perdagangan. Strategi ini bertujuan untuk melacak tren jangka menengah di pasar, dengan parameter yang disesuaikan secara dinamis dapat diterapkan untuk berbagai varietas dan lingkungan perdagangan.

Prinsip

Strategi ini terdiri dari tiga rata-rata bergerak: MA1, MA2 dan MA3 membentuk saluran perdagangan antara MA1 dan MA2 yang bersilang memberikan sinyal perdagangan; MA3 digunakan untuk memfilter sinyal .

Ketika rata-rata cepat di atas MA1 menembus rata-rata jangka menengah MA2, menunjukkan tren jangka pendek yang kuat, yang menghasilkan sinyal plus jika harga lebih tinggi dari rata-rata jangka panjang MA3; sebaliknya, jika MA1 di bawah melewati MA2, dan harga lebih rendah dari MA3, menghasilkan sinyal minus.

MA3 berfungsi untuk memfilter kebisingan pasar jangka pendek dan hanya menghasilkan sinyal setelah tren ditetapkan untuk memasuki fase jangka menengah dan panjang. Strategi ini dapat mencari kombinasi parameter optimal di pasar yang berbeda dengan menyesuaikan parameter tiga rata-rata bergerak secara dinamis.

Keunggulan

  • Menangkap tren berkala yang berbeda dengan beberapa kelompok moving average
  • MA3 memfilter sinyal untuk menghindari arbitrage
  • Jenis dan parameter rata-rata yang dapat disesuaikan, sangat fleksibel
  • Visualisasi perpaduan untuk mengidentifikasi titik sinyal

Risiko

  • Rata-rata bergerak bergelombang ketika tren siklus besar berbalik
  • Frekuensi transaksi mungkin terlalu tinggi, meningkatkan biaya transaksi dan risiko slippage
  • Parameter yang salah dapat menyebabkan overtrading atau sinyal yang terlambat

Dapat dengan menyesuaikan siklus MA, mengoptimalkan parameter untuk memilih varietas yang berbeda; mengoptimalkan strategi stop loss, mengendalikan kerugian tunggal; digabungkan dengan indikator teknis lainnya untuk mengkonfirmasi efektivitas sinyal, mengurangi probabilitas sinyal palsu.

Arah optimasi

  • Menambahkan indikator lain untuk menilai tren, seperti MACD, BRI dan lain-lain
  • Meningkatkan strategi stop loss/stop loss
  • Dinamis menyesuaikan parameter untuk mencari kombinasi optimal
  • Optimalisasi parameter varietas
  • Mempertimbangkan biaya transaksi, optimalkan frekuensi transaksi

Meringkaskan

Strategi ini adalah strategi pelacakan tren yang khas. Strategi ini dapat digunakan untuk varietas yang berbeda melalui pengoptimalan parameter, tetapi ada risiko tersandung dan kehilangan titik balik. Strategi ini dapat dioptimalkan di masa depan dengan memperkenalkan indikator teknis lain untuk menilai efektivitas sinyal, mengembangkan mekanisme pengoptimalan parameter dinamis, dan lain-lain.

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