Strategi Breakout Band Moving Average

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

Gambaran umum

Strategi ini menggunakan moving average untuk membentuk saluran harga dan menghasilkan sinyal ketika harga keluar dari band saluran.

Logika Strategi

  1. Menghitung moving average, dengan opsi seperti SMA/EMA/WMA/RMA.

  2. Band atas adalah peningkatan persentase tertentu dari rata-rata bergerak Band bawah adalah penurunan persentase tertentu.

  3. Pergi panjang di atas band atas, pergi pendek di bawah band bawah. Opsi untuk perdagangan hanya panjang, hanya pendek atau dua arah.

  4. Set stop loss dan take profit point. take profit point adalah persentase tertentu dari kenaikan harga masuk. stop loss point adalah persentase tertentu penurunan harga masuk.

Analisis Keuntungan

  1. Mudah untuk menerapkan penentuan tren menggunakan rata-rata bergerak.

  2. Parameter yang dapat disesuaikan mengakomodasi periode penahanan yang berbeda dan preferensi risiko.

  3. Opsional arah panjang/pendek beradaptasi dengan berbagai kondisi pasar.

  4. Persentase stop loss dan take profit tetap memungkinkan kontrol.

Analisis Risiko

  1. Cenderung terjebak ketika tren berubah tiba-tiba.

  2. Pengaturan parameter yang tidak tepat berisiko over-trading atau lag.

  3. Persentase stop loss/profit tetap tidak fleksibel.

  4. Peningkatan frekuensi perdagangan dan biaya komisi dengan perdagangan dua arah.

Arahan Optimasi

  1. Mengoptimalkan parameter rata-rata bergerak untuk menyeimbangkan lag dan kebisingan.

  2. Mengoptimalkan bandwidth saluran agar sesuai dengan frekuensi volatilitas pasar.

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

  4. Tambahkan indikator tren dan osilasi untuk mengukur kondisi pasar secara keseluruhan.

  5. Mengimplementasikan filter waktu untuk menghindari dampak peristiwa yang signifikan.

Ringkasan

Strategi ini mencapai tren sederhana mengikuti melalui saluran rata-rata bergerak, tetapi membutuhkan optimasi parameter yang lebih kuat dan kontrol 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 banyak