Strategi Rata-rata Gerak Perlahan

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

img

Gambaran umum

Strategi ini menggunakan saluran Donchian 24 periode dikombinasikan dengan rata-rata bergerak 200 periode sebagai sinyal perdagangan utama. posisi pendek dibuka ketika harga berfluktuasi ke bawah dan posisi panjang ketika berfluktuasi ke atas.

Logika Strategi

Logika strategi didasarkan pada poin-poin berikut:

  1. Saluran Donchian dibangun dengan menggunakan tertinggi tertinggi dan terendah terendah selama 24 periode terakhir.

  2. Rata-rata bergerak 200 periode bertindak sebagai filter untuk bias panjang/pendek. Jika harga melanggar Saluran Donchian dan berada di sisi lain dari rata-rata bergerak, pembalikan mungkin terjadi.

  3. Sinyal masuk adalah:

  • Pendek: Penutupan bar sebelumnya berada di atas pita atas Saluran Donchian dan di bawah MA 200 periode.
  • Panjang: Penutupan bar sebelumnya berada di bawah pita bawah Saluran Donchian dan di atas MA 200 periode.
  1. Stop loss untuk posisi pendek ditetapkan pada level tertinggi selama 3 bar terakhir. Take profit ditetapkan pada harga masuk dikurangi 3 kali perbedaan antara stop loss dan harga masuk. Logika posisi panjang stop loss dan take profit adalah sebaliknya.

  2. Keuntungan dari strategi ini adalah bahwa dengan menggabungkan saluran Donchian dan filter rata-rata bergerak, ia menghindari sinyal palsu dari mengandalkan satu indikator, secara signifikan meningkatkan tingkat kemenangan.

Analisis Keuntungan

Strategi ini memiliki keuntungan berikut:

  1. Tingkat kemenangan yang tinggi: Dengan menggabungkan saluran Donchian dan filter rata-rata bergerak, kerugian yang tidak perlu karena sinyal palsu dari satu indikator dihindari.

  2. Risiko yang dapat dikendalikan: Menggunakan level stop loss tertinggi tertinggi/rendah terendah terbaru secara efektif mengelola penurunan pada perdagangan yang kalah.

  3. Sederhana dan mudah diterapkan: Logika menggunakan indikator sederhana dan intuitif yang mudah dipahami dan dieksekusi.

  4. Kekuatan di seluruh pasar dan kerangka waktu: Dengan relatif sedikit parameter, strategi stabil di berbagai produk dan kerangka waktu.

Analisis Risiko

Risiko utama yang dihadapi oleh strategi ini adalah:

  1. Gerakan pasar yang ekstrim: Tren satu arah yang sangat kuat dapat memicu stop loss yang menyebabkan kerugian yang diperkuat. Hal ini dapat dikurangi dengan memperluas stop atau mengurangi ukuran posisi.

  2. Risiko sinyal keluar yang prematur: Keluar pada sinyal yang berlawanan baru dapat menyebabkan over-trading di pasar yang bergolak karena masuk dan keluar berulang.

  3. Risiko pengoptimalan parameter: Penyesuaian parameter periode lookback saluran Donchian atau moving average yang buruk dapat menyebabkan sinyal tertunda atau sering. Hal ini dapat diminimalkan melalui pengoptimalan yang ketat dan pengujian kombinasi.

Peluang Peningkatan

Strategi dapat ditingkatkan dengan cara berikut:

  1. Mengoptimalkan saluran Donchian dan periode lookback rata-rata bergerak untuk menemukan kombinasi terbaik dari parameter.

  2. Uji stop loss yang berbeda untuk mengambil rasio keuntungan untuk menyeimbangkan tingkat kemenangan versus reward/risiko.

  3. Masukkan filter tambahan pada sinyal masuk menggunakan indikator seperti MACD, RSI dll untuk meningkatkan ketahanan.

  4. Mengoptimalkan logika keluar untuk menghindari keluar yang tidak perlu di pasar bergolak. Metrik tren juga dapat dipertimbangkan untuk keluar.

  5. Mengembangkan kombinasi baru menggunakan kerangka strategi ini, misalnya dengan saluran lain, indikator band dll.

Kesimpulan

Strategi Slow Moving Average memiliki logika yang jelas dan mudah dimengerti dengan menggunakan kombinasi Donchian Channel dan moving average untuk generasi sinyal. Pendekatan hibrida ini secara signifikan meningkatkan stabilitas dan tingkat kemenangan. Rasio laba rugi 3: 1 juga memberikan potensi imbalan yang baik. Sementara risiko ada dalam hal gerakan ekstrem dan kesalahan sinyal, banyak peluang optimasi dapat meningkatkan kinerja dan memperluas strategi inti.


/*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 banyak