Strategi purata bergerak perlahan

Penulis:ChaoZhang, Tarikh: 2023-12-07 15:21:45
Tag:

img

Ringkasan

Strategi ini menggunakan Saluran Donchian 24 tempoh digabungkan dengan purata bergerak 200 tempoh sebagai isyarat perdagangan utama. Posisi pendek dibuka apabila harga turun naik dan kedudukan panjang apabila ia turun naik.

Logika Strategi

Logik strategi ini terutamanya berdasarkan perkara-perkara berikut:

  1. Saluran Donchian dibina menggunakan tertinggi tertinggi dan terendah terendah selama 24 tempoh yang lalu. Apabila harga keluar dari saluran ini, ia menunjukkan potensi pergerakan yang lebih besar ke atas atau ke bawah.

  2. Purata bergerak 200 tempoh bertindak sebagai penapis bias panjang/pendek. Jika harga memecahkan Saluran Donchian dan berada di sisi lain purata bergerak, pembalikan mungkin berlaku.

  3. Isyarat masuk adalah:

  • Pendek: Penutupan bar sebelumnya berada di atas jalur atas Saluran Donchian dan di bawah MA 200-periode.
  • Panjang: Penutupan bar sebelumnya berada di bawah jalur bawah Saluran Donchian dan di atas MA 200-periode. Pembukaan bar semasa berada di atas penutupan sebelumnya dan tinggi di atas 200-MA.
  1. Stop loss untuk kedudukan pendek ditetapkan pada paras tertinggi dalam 3 bar yang lalu. Ambil keuntungan ditetapkan pada harga masuk dikurangkan 3 kali perbezaan antara harga stop loss dan harga masuk. Logik stop loss dan mengambil keuntungan kedudukan panjang adalah sebaliknya.

  2. Kelebihan strategi ini adalah bahawa dengan menggabungkan Saluran Donchian dan penapis purata bergerak, ia mengelakkan isyarat palsu bergantung pada satu penunjuk tunggal, meningkatkan kadar kemenangan dengan ketara.

Analisis Kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Kadar kemenangan yang tinggi: Dengan menggabungkan Saluran Donchian dan penapis purata bergerak, kerugian yang tidak perlu disebabkan oleh isyarat palsu dari satu penunjuk dielakkan.

  2. Risiko yang boleh dikawal: Menggunakan paras tertinggi tertinggi / terendah terendah sebagai paras stop loss secara berkesan menguruskan penurunan pada perdagangan yang rugi. nisbah keuntungan / kerugian 3: 1 menarik.

  3. Sederhana dan mudah dilaksanakan: Logik menggunakan petunjuk mudah dan intuitif yang mudah difahami dan dilaksanakan.

  4. Kekuatan merentasi pasaran dan jangka masa: Dengan parameter yang agak sedikit, strategi stabil merentasi produk dan jangka masa yang berbeza.

Analisis Risiko

Risiko utama yang dihadapi oleh strategi ini adalah:

  1. Pergerakan pasaran yang melampau: Trend satu hala yang sangat kuat boleh mencetuskan kerugian berhenti yang menyebabkan kerugian yang diperkuat. Ini boleh dikurangkan dengan meluaskan berhenti atau mengurangkan saiz kedudukan.

  2. Risiko isyarat keluar yang terlalu awal: Keluar pada isyarat bertentangan baru boleh menyebabkan perdagangan berlebihan di pasaran yang bergolak kerana kemasukan dan keluar yang berulang.

  3. Risiko pengoptimuman parameter: Penyesuaian parameter yang tidak baik untuk tempoh kemunculan semula saluran Donchian atau purata bergerak boleh menyebabkan isyarat tertunda atau kerap. Ini dapat diminimumkan melalui pengoptimuman yang ketat dan ujian kombinasi.

Peluang Peningkatan

Strategi ini boleh ditingkatkan dengan cara berikut:

  1. Mengoptimumkan Saluran Donchian dan tempoh melihat semula purata bergerak untuk mencari kombinasi parameter yang terbaik.

  2. Uji stop loss yang berbeza untuk mengambil nisbah keuntungan untuk mengimbangi kadar kemenangan berbanding ganjaran / risiko.

  3. Masukkan penapis tambahan pada isyarat kemasukan menggunakan penunjuk seperti MACD, RSI dan lain-lain untuk meningkatkan ketahanan.

  4. Mengoptimumkan logik keluar untuk mengelakkan keluar yang tidak perlu dalam pasaran bergolak. Metrik trend juga boleh dipertimbangkan untuk keluar.

  5. Membangunkan kombinasi baru menggunakan rangka kerja strategi ini, sebagai contoh dengan saluran lain, penunjuk jalur dll.

Kesimpulan

Strategi purata bergerak perlahan mempunyai logik yang jelas dan mudah difahami menggunakan gabungan Saluran Donchian dan purata bergerak untuk penjanaan isyarat. Pendekatan hibrid ini meningkatkan kestabilan dan kadar kemenangan dengan ketara. nisbah keuntungan hingga kerugian 3: 1 juga memberikan potensi ganjaran yang baik. Walaupun risiko wujud dari segi pergerakan yang melampau dan kesilapan isyarat, banyak peluang pengoptimuman dapat meningkatkan prestasi dan mengembangkan strategi teras.


/*backtest
start: 2023-11-06 00:00:00
end: 2023-12-06 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/
// © Mysteriown

//@version=4

strategy("Lagged Donchian Channel + EMA", overlay = true)

//tradePeriod = time(timeframe.period,"0000-0000:1234567")?true:false


// ------------------------------------------ //
// ----------------- Inputs ----------------- //
// ------------------------------------------ //

period = input(24, title="Channel's periods")
Pema = input(200, title="EMA's periods ?")
ratio = input(3, title="Ratio TP", type=input.float)
loss = input(20, title="Risk Loss ($)")
lev = input(5, title="Leverage *...")
chan = input(title="Plot channel ?", type=input.bool, defval=false)
Bpos = input(title="Plot Bull positions ?", type=input.bool, defval=false)
bpos = input(title="Plot Bear positions ?", type=input.bool, defval=false)
labels = input(title="Plot labels of bets ?", type=input.bool, defval=true)
supp = input(title="Delete last labels ?", type=input.bool, defval=true)


// ------------------------------------------ //
// ---------- Canal, EMA and arrow ---------- //
// ------------------------------------------ //

pema = ema(close,Pema)
plot(pema, title="EMA", color=color.blue)

canalhaut = highest(period)[1]
canalbas = lowest(period)[1]

bear = close[1] > canalhaut[1] and close < open and high > pema
bull = close[1] < canalbas[1] and open < close and low < pema

canalhautplot = plot(chan? canalhaut:na, color=color.yellow)
canalbasplot = plot(chan? canalbas:na, color=color.yellow)

plotshape(bear, title='Bear', style=shape.triangledown, location=location.abovebar, color=color.red, offset=0)
plotshape(bull, title='Bull', style=shape.triangleup, location=location.belowbar, color=color.green, offset=0)


// ------------------------------------------ //
// ------------- Position Short ------------- //
// ------------------------------------------ //

SlShort = highest(3)
BidShort = close[1]

TpShort = BidShort-((SlShort-BidShort)*ratio)
deltaShort = (SlShort-BidShort)/BidShort
betShort = round(loss/(lev*deltaShort)*100)/100
cryptShort = round(betShort*lev/BidShort*1000)/1000

// if bear[1] and labels //and low < low[1]
//     Lbear = label.new(bar_index, na, text="SHORT\n\nSL: " + tostring(SlShort) + "\n\nBid: " + tostring(BidShort) + "\n\nTP: " + tostring(TpShort) + "\n\nMise: " + tostring(betShort) + "\n\nCryptos: " + tostring(cryptShort), color=color.red, textcolor=color.white, style=label.style_labeldown, yloc=yloc.abovebar)
//     label.delete(supp ? Lbear[1] : na)

var bentry=0.0
var bsl=0.0
var btp=0.0

if bear[1] and low < low[1]
    bentry:=BidShort
    bsl:=SlShort
    btp:=TpShort
    
pbentry = plot(bpos? bentry:na, color=color.orange)
plot(bpos? (bentry+btp)/2:na, color=color.gray)
pbsl = plot(bpos? bsl:na, color=color.red)
pbtp = plot(bpos? btp:na, color=color.green)

fill(pbentry,pbsl, color.red, transp=70)
fill(pbentry,pbtp, color.green, transp=70)


// ------------------------------------------ //
// ------------- Position Long -------------- //
// ------------------------------------------ //

SlLong = lowest(3)
BidLong = close[1]

TpLong = BidLong + ((BidLong - SlLong) * ratio)
deltaBull = (BidLong - SlLong)/BidLong
betLong = round(loss/(lev*deltaBull)*100)/100
cryptLong = round(betLong*lev/BidLong*1000)/1000

// if bull[1] and labels //and high > high[1]
//     Lbull = label.new(bar_index, na, text="LONG\n\nSL: " + tostring(SlLong) + "\n\nBid: " + tostring(BidLong) + "\n\nTP: " + tostring(TpLong) + "\n\nMise: " + tostring(betLong) + "\n\nCryptos: " + tostring(cryptLong), color=color.green, textcolor=color.white, style=label.style_labelup, yloc=yloc.belowbar)
//     label.delete(supp ? Lbull[1] : na)

var Bentry=0.0
var Bsl=0.0
var Btp=0.0

if bull[1] and high > high[1]
    Bentry:=BidLong
    Bsl:=SlLong
    Btp:=TpLong
    
pBentry = plot(Bpos?Bentry:na, color=color.orange)
plot(Bpos?(Bentry+Btp)/2:na, color=color.gray)
pBsl = plot(Bpos?Bsl:na, color=color.red)
pBtp = plot(Bpos?Btp:na, color=color.green)

fill(pBentry,pBsl, color.red, transp=70)
fill(pBentry,pBtp, color.green, transp=70)


// ------------------------------------------ //
// --------------- Strategie ---------------- //
// ------------------------------------------ //

Bear = bear[1] and low < low[1]
Bull = bull[1] and high > high[1]

if (Bear and strategy.opentrades==0)
    strategy.order("short", false, 1, limit=BidShort)
    strategy.exit("exit", "short", limit = TpShort, stop = SlShort)

strategy.cancel("short", when = high > SlShort or low < (BidShort+TpShort)/2)
strategy.close("short", when=bull)

if (Bull and strategy.opentrades==0)
    strategy.order("long", true, 1, limit=BidLong)
    strategy.exit("exit", "long", limit = TpLong, stop = SlLong)
    
strategy.cancel("long", when = low < SlLong or high > (BidLong+TpLong)/2)
strategy.close("long", when=bear)


Lebih lanjut