Strategi Perdagangan Kepelbagaian Purata Bergerak

Penulis:ChaoZhang, Tarikh: 2024-01-23 14:20:50
Tag:

img

Strategi ini menghasilkan isyarat dagangan dengan mengira tiga purata bergerak dari tempoh yang berbeza dan menggabungkan terobosan harga. Ia adalah sebahagian daripada strategi trend-mengikut tipikal. Strategi ini bertujuan untuk mengikuti trend jangka menengah di pasaran dan boleh disesuaikan dengan produk yang berbeza dan persekitaran dagangan dengan menyesuaikan parameter secara dinamik.

Prinsip

Strategi ini mengandungi tiga purata bergerak: MA1, MA2 dan MA3. MA1 dan MA2 membentuk saluran perdagangan, dan silangannya menghasilkan isyarat perdagangan; MA3 digunakan untuk menapis isyarat.

Apabila purata bergerak pantas MA1 melintasi di atas purata bergerak jangka sederhana MA2, ia menunjukkan penguatan trend jangka pendek. Pada masa ini, jika harga di atas purata bergerak jangka panjang MA3, isyarat panjang dihasilkan; sebaliknya, jika MA1 melintasi di bawah MA2 dan harga di bawah MA3, isyarat pendek dihasilkan.

Peranan MA3 adalah untuk menapis bunyi bising pasaran jangka pendek dan hanya menghasilkan isyarat selepas menentukan bahawa trend telah memasuki peringkat jangka sederhana dan panjang. Dengan menyesuaikan parameter tiga purata bergerak secara dinamik, strategi dapat mencari kombinasi parameter yang optimum di pasaran yang berbeza.

Kelebihan

  • Mencatatkan trend kitaran yang berbeza melalui purata bergerak berbilang
  • MA3 menapis isyarat untuk mengelakkan whipsaws
  • Jenis dan parameter purata bergerak yang boleh disesuaikan, kebolehsesuaian yang tinggi
  • Melihat salib untuk mengenal pasti titik isyarat

Risiko

  • Purata bergerak mungkin tertinggal apabila trend utama berbalik
  • Frekuensi dagangan yang berpotensi tinggi, peningkatan kos dagangan dan risiko tergelincir
  • Parameter yang tidak betul boleh menyebabkan isyarat overtrading atau lagging

Boleh mengoptimumkan tempoh MA untuk produk yang berbeza; mengoptimumkan stop loss untuk mengawal kerugian tunggal; menggabungkan penunjuk teknikal lain untuk mengesahkan kesahihan isyarat dan mengurangkan isyarat palsu.

Arahan pengoptimuman

  • Tambah penunjuk lain untuk menentukan trend, contohnya MACD, Bollinger Bands, dll.
  • Tambah strategi stop loss/take profit
  • Sesuaikan parameter secara dinamik untuk mencari kombinasi optimum
  • Pengoptimuman parameter untuk produk yang berbeza
  • Pertimbangkan kos perdagangan, mengoptimumkan kekerapan perdagangan

Ringkasan

Strategi ini menghasilkan isyarat perdagangan dengan mengira tiga purata bergerak dan memerhatikan silangannya. Menggunakan idea menggabungkan garis cepat, sederhana dan perlahan untuk menentukan trend, ia adalah strategi trend berikut yang tipikal. Strategi ini boleh disesuaikan dengan produk yang berbeza melalui pengoptimuman parameter, tetapi risiko whipsaws dan bertukar yang hilang. Penambahbaikan masa depan boleh memperkenalkan penunjuk teknikal lain untuk menilai kesahihan isyarat, membangunkan mekanisme pengoptimuman parameter dinamik, dan lain-lain untuk menjadikan strategi lebih fleksibel.


/*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)

Lebih lanjut