Strategi Penembusan Band Purata Bergerak

Penulis:ChaoZhang, Tarikh: 2023-09-17 18:33:57
Tag:

Ringkasan

Strategi ini menggunakan purata bergerak untuk membentuk saluran harga dan menghasilkan isyarat apabila harga keluar dari jalur saluran.

Logika Strategi

  1. Mengira purata bergerak, dengan pilihan seperti SMA / EMA / WMA / RMA.

  2. Band atas adalah peningkatan peratusan tertentu dari purata bergerak. Band bawah adalah penurunan peratusan tertentu.

  3. Pergi panjang di atas band atas, pergi pendek di bawah band bawah.

  4. Tetapkan titik stop loss dan mengambil keuntungan. titik mengambil keuntungan adalah peningkatan peratusan tertentu dari harga masuk. titik stop loss adalah penurunan peratusan tertentu dari harga masuk.

Analisis Kelebihan

  1. Mudah untuk melaksanakan penentuan trend menggunakan purata bergerak.

  2. Parameter yang boleh diselaraskan menampung tempoh penahanan dan keutamaan risiko yang berbeza.

  3. Arahan panjang/pendek pilihan disesuaikan dengan pelbagai keadaan pasaran.

  4. Peratusan tetap stop loss dan mengambil keuntungan membolehkan kawalan.

Analisis Risiko

  1. cenderung untuk terperangkap apabila trend berubah secara tiba-tiba.

  2. Penyesuaian parameter yang tidak betul berisiko terlalu berdagang atau ketinggalan.

  3. Peratusan tetap stop loss / keuntungan tidak mempunyai fleksibiliti.

  4. Peningkatan kekerapan perdagangan dan kos komisen dengan perdagangan dua arah.

Arahan pengoptimuman

  1. Mengoptimumkan parameter purata bergerak untuk mengimbangi kelewatan dan bunyi bising.

  2. Mengoptimumkan lebar jalur saluran untuk sepadan dengan kekerapan turun naik pasaran.

  3. Uji stop loss yang berbeza dan ambil konfigurasi keuntungan.

  4. Tambah penunjuk trend dan goyangan untuk mengukur keadaan pasaran secara keseluruhan.

  5. Melaksanakan penapis masa untuk mengelakkan kesan peristiwa yang signifikan.

Ringkasan

Strategi ini mencapai trend mudah mengikut saluran purata bergerak, tetapi memerlukan pengoptimuman parameter yang lebih kuat dan kawalan risiko.


/*backtest
start: 2023-08-17 00:00:00
end: 2023-09-16 00:00:00
period: 1h
basePeriod: 15m
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/
// © TaylorTneh
//@version=4

// strategy("Moving Average Band Taylor V1",shorttitle="MA Band+",overlay=true,default_qty_type=strategy.cash,default_qty_value=1000,initial_capital=1000,currency=currency.USD,commission_value=.1)

price = input(close, title="Source")
mabtype = input(title="Moving Average Type", defval="RMA", options=["SMA", "EMA", "RMA", "WMA"])
malen = input(10, "MA Period : 10")
magap = input(0.6, "Band Gap : 0.6", minval = -10, maxval = 10, step = 0.1)
mabup = if mabtype == "SMA"
    sma(high, malen)
else
    if mabtype == "EMA"
        ema(high, malen)
    else
        if mabtype == "WMA"
            wma(high, malen)
        else
            if mabtype == "RMA"
                rma(high, malen)
                    
mabdn = if mabtype == "SMA"
    sma(low, malen)
else
    if mabtype == "EMA"
        ema(low, malen)
    else
        if mabtype == "WMA"
            wma(low, malen)
        else
            if mabtype == "RMA"
                rma(low, malen)
                    
upex = mabup * (1 + magap/100)
dnex = mabdn * (1 - magap/100)
plot(upex, "Upper MA Band", color.orange)
plot(dnex, "Lower MA Band", color.orange)


//-------------------------------------------- (Strategy)
strategy.entry("Long", strategy.long, stop = upex)
strategy.entry("Short", strategy.short, stop = dnex)
//Long Only//strategy.entry("Long", strategy.long, stop = upex)
//Long Only//strategy.exit("Short", stop = dnex)
//Short Only//strategy.entry("Short", strategy.short, stop = dnex)
//Short Only//strategy.exit("Long", stop = upex)


//-------------------------------------------- (Take Profit & Stop Lose)
stopPer = input(500.0, title='# Stop Loss %', type=input.float) / 100
takePer = input(500.0, title='# Take Profit %', type=input.float) / 100
//Determine where you've entered and in what direction
longStop = strategy.position_avg_price * (1 - stopPer)
shortStop = strategy.position_avg_price * (1 + stopPer)
shortTake = strategy.position_avg_price * (1 - takePer)
longTake = strategy.position_avg_price * (1 + takePer)
if strategy.position_size > 0 
    strategy.exit(id="L-TP/SL", stop=longStop, limit=longTake)
if strategy.position_size < 0 
    strategy.exit(id="S-TP/SL", stop=shortStop, limit=shortTake)


//-------------------------------------------- (Sample Time Filter Strategy)
//fromyear = input(2018, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
//toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
//frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
//tomonth = input(10, defval = 10, minval = 01, maxval = 12, title = "To Month")
//fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
//today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
//strategy.entry("Long", strategy.long, stop = upex, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
//strategy.entry("Short", strategy.short, stop = dnex, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
//--------------------------------------------


Lebih lanjut