Strategi Mengikuti Purata Pergerakan Pemecahan Saluran


Tarikh penciptaan: 2024-01-15 12:25:26 Akhirnya diubah suai: 2024-01-15 12:25:26
Salin: 0 Bilangan klik: 639
1
fokus pada
1617
Pengikut

Strategi Mengikuti Purata Pergerakan Pemecahan Saluran

Gambaran keseluruhan

Strategi ini adalah strategi penembusan berdasarkan Saluran Harga, yang menggabungkan indikator garis rata dan pengesanan berhenti / berhenti untuk masuk dan keluar. Ia menggunakan garis rata untuk membina Saluran Harga dengan harga yang tinggi dan rendah, masuk lebih / kosong apabila harga menembusi Saluran, dan menggunakan stop loss tetap atau trailing stop untuk mengawal risiko.

Prinsip Strategi

Strategi ini membentuk Saluran Harga dengan mengira garis purata harga tinggi dan rendah. Secara khusus, adalah mengira garis purata harga tinggi dan harga rendah SMA dengan panjang 10, membentuk saluran atas dan bawah Saluran. Apabila harga menerobos dari bawah ke atas Saluran, masuk lebih banyak; Apabila harga menerobos dari atas ke bawah Saluran, masuk kosong.

Selepas masuk, strategi menggunakan hentian tetap atau trailing stop untuk keluar dari pegangan. Trailing stop terdiri daripada dua parameter: hentian tetap dan offset pengaktifan. Apabila harga mencapai pengalihan pengaktifan, hentian akan dilacak. Ini dapat mengunci keuntungan sambil mengekalkan ruang untuk membuat keuntungan.

Strategi ini juga menggabungkan penapisan jangka masa, dan hanya dilakukan pada tarikh sejarah yang ditetapkan, untuk menguji prestasi di peringkat pasaran yang berbeza.

Analisis kelebihan

Strategi ini menggunakan Price Channel dan trend tracking stop loss, yang dapat menangkap arah trend garis tengah dan panjang. Berbanding dengan strategi moving averages semata-mata, ia mengurangkan perdagangan yang tidak berkesan yang disebabkan oleh pergerakan harga. Dengan trailing stop, anda boleh secara dinamik mengesan harga untuk mengunci keuntungan.

Secara keseluruhannya, strategi ini mempunyai logik yang jelas, menggunakan lebih sedikit petunjuk dan parameter, mudah diukur, sesuai untuk perdagangan trend garis tengah dan panjang, dan boleh mendapat keuntungan dalam keadaan yang kuat.

Analisis risiko

Strategi ini mudah terkunci dan keluar dalam keadaan yang bergolak, tidak dapat menghasilkan keuntungan yang berkekalan. Di samping itu, dalam keadaan yang melampau, harga mungkin langsung menembusi paras stop loss dan menyebabkan kerugian yang besar.

Tetapan parameter adalah agak subjektif, parameter perlu disesuaikan pada peringkat pasaran yang berbeza. Penangguhan tetap dan pengalihan aktif tidak dapat disesuaikan dengan tahap turun naik pasaran.

Arah pengoptimuman

Anda boleh mempertimbangkan untuk menyaring isyarat masuk ke pasaran dengan menggunakan indikator lain, seperti jumlah dagangan, Bollinger Bands, dan lain-lain, untuk mengelakkan terhad. Atau anda boleh menggunakan Stop Loss Dinamik untuk menetapkan Stop Loss berdasarkan ATR atau kadar turun naik harga.

Peraturan keluar boleh dioptimumkan untuk berhenti bergerak atau keluar Chandelier. Peraturan keluar separa boleh dipertimbangkan apabila harga memasuki semula Channel.

ringkaskan

Strategi ini secara keseluruhannya adalah strategi kuantitatif berdasarkan Channel Harga, trend tracking, dan pengurusan hentian / hentian. Ia mempunyai struktur logik yang jelas, struktur parameter yang mudah, mudah difahami dan diukur, sesuai untuk belajar perdagangan kuantitatif.

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