Strategi Mengikuti Rata-rata Pergerakan Penembusan Saluran


Tanggal Pembuatan: 2024-01-15 12:25:26 Akhirnya memodifikasi: 2024-01-15 12:25:26
menyalin: 0 Jumlah klik: 639
1
fokus pada
1617
Pengikut

Strategi Mengikuti Rata-rata Pergerakan Penembusan Saluran

Ringkasan

Strategi ini adalah strategi penembusan berdasarkan Channel harga, yang menggabungkan indikator garis rata dan melacak stop loss / stop loss untuk masuk dan keluar. Ini menggunakan garis rata dengan harga tinggi dan rendah untuk membangun Channel harga, masuk lebih / kosong ketika harga menembus Channel, dan menggunakan stop loss atau trailing stop tetap untuk mengendalikan risiko.

Prinsip Strategi

Strategi ini membentuk saluran harga dengan menghitung garis rata-rata harga tinggi dan rendah. Secara khusus, adalah menghitung garis rata-rata SMA tinggi dan rendah dengan panjang 10, membentuk saluran atas dan bawah.

Setelah masuk, strategi ini menggunakan stop loss atau trailing stop untuk keluar dari posisi. Trailing stop terdiri dari dua parameter: stop loss tetap dan offset aktif. Ketika harga mencapai offset aktif, stop loss akan diteruskan.

Strategi ini juga menggabungkan penyaringan periode waktu, hanya melakukan retrospeksi pada tanggal sejarah yang ditentukan, dan dapat menguji kinerja pada fase pasar yang berbeda.

Analisis Keunggulan

Strategi ini menggunakan harga Channel dan trend tracking stop loss, yang dapat menangkap arah tren garis tengah dan panjang. Dibandingkan dengan strategi moving average sederhana, ini mengurangi perdagangan yang tidak efektif yang disebabkan oleh pergerakan harga. Dengan trailing stop, harga dapat secara dinamis ditelusuri untuk mengunci keuntungan.

Secara keseluruhan, strategi ini memiliki logika yang jelas, menggunakan lebih sedikit indikator dan parameter, mudah diukur, cocok untuk perdagangan tren lini tengah dan panjang, dan dapat menguntungkan dalam situasi yang kuat.

Analisis risiko

Strategi ini mudah terkunci dan keluar dalam situasi yang bergolak, dan tidak dapat menghasilkan keuntungan yang tahan lama. Selain itu, dalam situasi yang ekstrem, harga dapat langsung menerobos stop loss dan menyebabkan kerugian yang lebih besar.

Pengaturan parameter relatif subjektif, parameter perlu disesuaikan pada fase pasar yang berbeda. Stop-loss tetap dan bias aktivasi tidak dapat disesuaikan dengan tingkat fluktuasi pasar.

Arah optimasi

Anda dapat mempertimbangkan untuk memfilter sinyal masuk dengan indikator lain, seperti volume transaksi, Bollinger Bands, dan lain-lain, untuk menghindari penargetan. Atau Anda dapat menggunakan stop loss dinamis, yang mengatur stop loss berdasarkan ATR atau tingkat fluktuasi harga.

Aturan keluar dapat dioptimalkan untuk bergerak stop loss atau Chandelier Exit. Parsial keluar juga dapat dipertimbangkan ketika harga kembali ke Channel. Optimalisasi filter masuk dan keluar aturan dapat meningkatkan stabilitas strategi secara signifikan.

Meringkaskan

Strategi ini secara keseluruhan adalah strategi kuantitatif yang didasarkan pada Channel Harga, pelacakan tren, manajemen stop loss / stop. Ini memiliki struktur logis yang jelas, struktur parameter yang sederhana, mudah dipahami dan diukur, cocok untuk digunakan untuk mempelajari perdagangan kuantitatif. Strategi ini dapat dioptimalkan dengan berbagai cara, meningkatkan stabilitas dan profitabilitas.

Kode Sumber Strategi
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-21 23:59:59
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Generalized SSL Backtest w/ TSSL", shorttitle="GSSL Backtest", overlay=true )
// Generalized SSL:
//  This is the very first time the SSL indicator, whose acronym I ignore, is on Tradingview. 
//  It is based on moving averages of the highs and lows. 
//  Similar channel indicators can be found, whereas 
//  this one implements the persistency inside the channel, which is rather tricky.
//  The green line is the base line which decides entries and exits, possibly with trailing stops.
//  With respect to the original version, here one can play with different moving averages.
//  The default settings are (10,SMA)
//
// Vitelot/Yanez/Vts March 2019

lb = input(10, title="Lb", minval=1)
maType = input( defval="SMA", title="MA Type", options=["SMA","EMA","HMA","McG","WMA","Tenkan"])

fixedSL = input(title="SL Activation", defval=300)
trailSL = input(title="SL Trigger", defval=1)
fixedTP = input(title="TP Activation", defval=150)
trailTP = input(title="TP Trigger", defval=1)

FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2019, title = "From Year", minval = 2017)
ToMonth   = input(defval = 6, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 19, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2020, title = "To Year", minval = 2017)
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
startTimeOk()  => true // create function "within window of time" if statement true
// QUANDL:BCHAIN/ETRVU is USD-denominated daily transaction value on BTC blockchain
// QUANDL:BCHAIN/MKTCP is USD-denominated Bitcoin marketcap

hma(sig, n) => // Hull moving average definition
    wma( 2*wma(sig,round(n/2))-wma(sig,n), round(sqrt(n)))

mcg(sig,length) => // Mc Ginley MA definition
    mg = 0.0
    mg := na(mg[1]) ? ema(sig, length) : mg[1] + (sig - mg[1]) / (length * pow(sig/mg[1], 4))

tenkan(sig,len) =>
    0.5*(highest(sig,len)+lowest(sig,len))

ma(t,sig,len) =>
    sss=na
    if t =="SMA"
        sss := sma(sig,len)
    if t == "EMA"
        sss := ema(sig,len)
    if t == "HMA"
        sss := hma(sig,len)
    if t == "McG" // Mc Ginley
        sss := mcg(sig,len)
    if t == "Tenkan"
        sss := tenkan(sig,len)
    if t == "WMA"
        sss := wma(sig,len)
    sss

base(mah, mal) =>
    bbb = na
    inChannel = close<mah and close>mal
    belowChannel = close<mah and close<mal
    bbb := inChannel? bbb[1]: belowChannel? -1: 1
    uuu = bbb==1? mal: mah
    ddd = bbb==1? mah: mal
    [uuu, ddd]

maH = ma(maType, high, lb)
maL = ma(maType, low, lb)

[up, dn] = base(maH,maL)

plot(up, title="High MA", color=lime, linewidth=3)
plot(dn, title="Low MA", color=orange, linewidth=3)

long = crossover(dn,up)
short = crossover(up,dn)

// === STRATEGY - LONG POSITION EXECUTION ===
strategy.entry("Long", strategy.long, when= long and startTimeOk())
strategy.exit("Exit", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP) 
strategy.exit("Exit", when= short)
// === STRATEGY - SHORT POSITION EXECUTION ===
strategy.entry("Short", strategy.short, when= short and startTimeOk())
strategy.exit("Exit", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP)
strategy.exit("Exit", when= long)