Bitcoin Momentum Trailing Stop Strategi

Penulis:ChaoZhang, Tanggal: 2024-03-08 16:20:16
Tag:

img

Tinjauan Strategi

Bitcoin Momentum Trailing Stop Strategy adalah strategi berbasis momentum yang dirancang untuk menangkap tren naik Bitcoin sambil mengurangi risiko penurunan melalui stop-loss yang disesuaikan secara dinamis. Strategi ini menggunakan teknik stop trailing momentum yang sederhana namun cerdas, yang memperketat stop loss selama volatilitas bearish tinggi untuk melindungi keuntungan terbuka dan melonggarkan stop loss selama momentum bullish berkelanjutan untuk membiarkan keuntungan berjalan. Strategi ini tetap diinvestasikan selama harga Bitcoin berada di atas rata-rata bergerak eksponensial (EMA) 20 minggu dan keluar ketika harga ditutup di bawahnya.

Prinsip Strategi

  1. Harga Bitcoin saat ini harus diperdagangkan di atas EMA jangka waktu yang lebih tinggi (20-minggu EMA).
  2. Bitcoin tidak boleh berada dalam keadaan hati-hati, yang didefinisikan sebagai swing high baru-baru ini dikurangi bars low saat ini yang lebih besar dari 1,5 kali ATR, atau penutupan harian yang lebih rendah dari 20 EMA harian.
  3. Stop-loss ditetapkan pada swing high terakhir dikurangi 1 ATR, atau dikurangi 20% dari ATR (yaitu 0,2 ATR) jika berada dalam keadaan hati-hati.
  4. Exit pada bar berikutnya dibuka ketika harga ditutup di bawah stop-loss.

Strategi ini menggunakan grafik mingguan dan EMA 20 minggu sebagai filter tren, hanya masuk ketika harga berada di atas EMA 20 minggu. ATR 5 periode digunakan untuk menyesuaikan jarak trailing stop secara dinamis, yang memperketat dalam keadaan hati-hati. Negara hati-hati didefinisikan oleh dua kondisi: jarak dari swing high baru-baru ini ke level terendah saat ini lebih dari 1,5 kali ATR, atau penutupan harian berada di bawah 20 EMA harian. Pendekatan penyesuaian stop-loss dinamis ini memungkinkan ruang mundur yang lebih besar ketika tren kuat dan dengan cepat mengunci keuntungan ketika tren melemah.

Keuntungan Strategi

  1. Kesederhanaan dan efektivitas: Logika strategi sederhana, jelas, mudah dimengerti dan diimplementasikan, sementara secara efektif menangkap tren naik utama Bitcoin.

  2. Stop-loss dinamis: Posisi stop-loss disesuaikan secara dinamis berdasarkan kondisi volatilitas pasar, mengendalikan penarikan sementara membiarkan keuntungan berjalan, yang merupakan pendekatan yang relatif seimbang dan kuat untuk manajemen stop-loss.

  3. Penyaringan tren: Dengan menyaring dengan rata-rata bergerak tingkat yang lebih tinggi (20-minggu EMA), strategi hanya masuk selama tren naik yang jelas, sangat meningkatkan tingkat kemenangan strategi dan rasio risiko-manfaat.

  4. Ukuran Posisi: Standarnya adalah untuk berdagang dengan posisi penuh, memaksimalkan pemanfaatan modal dan meningkatkan efisiensi modal.

  5. Penerapan luas: Logika strategi dapat dengan mudah dipindahkan ke aset dan pasar lain, memiliki generalisasi yang baik.

Risiko Strategi

  1. Ketersediaan parameter: Parameter strategi ditetapkan berdasarkan karakteristik pasar Bitcoin, dan ketersediaan mereka untuk pasar lain perlu divalidasi dan mungkin memerlukan optimasi parameter untuk aset yang berbeda.

  2. Identifikasi tren: Strategi ini terutama mengandalkan indikator teknis seperti EMA tingkat tinggi dan ATR untuk menilai tren, yang tidak komprehensif seperti analisis fundamental dalam memahami kondisi pasar dan rentan terhadap kesalahan pada titik balik pasar.

  3. Risiko stop-loss: Meskipun stop-loss dinamis dapat mengendalikan risiko sampai batas tertentu, penarikan yang signifikan masih dapat terjadi dalam kondisi pasar yang ekstrim (seperti penurunan tajam atau fluktuasi mendalam yang cepat).

  4. Potensi keuntungan: Strategi ini berkinerja baik dalam tren naik unidirectional tetapi lebih cenderung jatuh ke dalam dilema stop-loss yang sering di pasar rangebound, berpotensi membatasi potensi keuntungan keseluruhan.

  5. Kinerja langsung: Sementara strategi berkinerja baik dalam backtesting, perdagangan langsung dipengaruhi oleh faktor-faktor seperti slippage dan komisi, dan hasil aktual mungkin berbeda dari pengembalian teoritis, yang membutuhkan evaluasi yang cermat.

Arahan Optimasi

  1. Penentuan tren: Pertimbangkan untuk memperkenalkan rata-rata bergerak tingkat yang lebih tinggi, indikator volatilitas, atau bahkan data fundamental untuk meningkatkan akurasi dan keandalan identifikasi tren.

  2. Parameter dinamis: Posisi stop loss dan parameter ATR dapat dioptimalkan lebih lanjut dengan memperkenalkan mekanisme penyesuaian dinamis yang terkait dengan harga atau volatilitas untuk beradaptasi dengan kondisi pasar yang berbeda.

  3. Ukuran Posisi: Sesuaikan ukuran posisi secara dinamis berdasarkan indikator seperti kekuatan tren dan volatilitas, meningkatkan ukuran posisi ketika tren kuat dan mengurangi ukuran posisi selama volatilitas tinggi untuk meningkatkan rasio risiko-manfaat.

  4. Mekanisme long/short: Memperkenalkan mekanisme short selling di pasar bear untuk memperluas penerapan strategi dan potensi profitabilitas.

  5. Kombinasi strategi: Gabungkan strategi ini dengan strategi lain (seperti reversi rata-rata) untuk melengkapi kekuatan satu sama lain dan meningkatkan stabilitas dan profitabilitas strategi.

Ringkasan Strategi

Bitcoin Momentum Trailing Stop Strategy adalah strategi momentum yang sederhana dan efektif yang menangkap tren naik Bitcoin yang kuat menggunakan rata-rata bergerak tingkat yang lebih tinggi dan indikator ATR sambil mengendalikan risiko penurunan melalui stop-loss yang disesuaikan secara dinamis. Logika strategi jelas, mudah diterapkan dan dioptimalkan, dan cocok untuk investor jangka menengah hingga panjang yang mencari pengembalian yang stabil. Strategi ini dapat berfungsi sebagai templat dasar, dan investor dapat lebih menyempurnakannya berdasarkan kebutuhan dan pengalaman mereka sendiri di bidang seperti penentuan tren, optimasi parameter, manajemen posisi, dan mekanisme panjang / pendek, atau menggabungkannya dengan strategi lain untuk mencapai rasio risiko / imbalan yang lebih tinggi. Namun, harus dicatat bahwa kinerja langsung strategi dapat berbeda dari hasil backtesting, yang membutuhkan penilaian dan kontrol risiko yang cermat. Setiap strategi harus diuji secara menyeluruh pada data historis dan diuji ke depan sebelum digunakan, dan disesuaikan secara dinamis berdasarkan perubahan pasar.


/*backtest
start: 2023-03-08 00:00:00
end: 2024-03-07 00:00:00
period: 1d
basePeriod: 1h
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/
// © ZenAndTheArtOfTrading
// ------------------------------------------------------------------------------------------------------
// System Concept: Capture as much Bitcoin upside volatility as possible while side-stepping downside volatility.
//  Entry Rule #1: Bitcoin must be trading above higher-timeframe EMA (Weekly 20 EMA)
//  Entry Rule #2: Bitcoin must not be in 'caution' condition
//      -> Caution: True if BTC's recent swing high minus its current low is > 1.5x ATR OR close < Daily EMA
//  Trailing Stop: Stop is trailed 1 ATR from recent swing high, OR 20% of ATR if in caution condition
// ------------------------------------------------------------------------------------------------------
// @version=5
strategy("Bitcoin Momentum Strategy", 
     overlay=true)

// Get user input
var const string    G_STRATEGY  = "Strategy Entry Settings"
var const string    G_EXIT      = "Strategy Exit Settings"
var const string    G_FILTER    = "Strategy Filters"
i_HigherTimeframe   = input.timeframe("W", "Higher Timeframe", group=G_STRATEGY, tooltip="Higher timeframe MA reference")
i_EmaLength         = input.int(20, "EMA Length", group=G_STRATEGY, tooltip="Moving average period length")
i_AtrLength         = input.int(5, "ATR Length", group=G_STRATEGY, tooltip="ATR period length")
i_TrailStopSource   = input.source(low, "Trail Stop Source", group=G_EXIT, tooltip="Lowest price source for trailing stop")
i_TrailStopLookback = input.int(7, "Trail Stop Lookback", group=G_EXIT, tooltip="How many bars to look back for trailing price source")
i_TrailStopMulti    = input.float(0.2, "Trailing Stop Ratchet Multiplier", group=G_EXIT, tooltip="When momentum is yellow (caution), shrink ATR distance for TS by this much")
i_StartTime         = input(timestamp("01 Jan 2000 13:30 +0000"), "Start Filter", group=G_FILTER, tooltip="Start date & time to begin searching for setups")
i_EndTime           = input(timestamp("1 Jan 2099 19:30 +0000"), "End Filter", group=G_FILTER, tooltip="End date & time to stop searching for setups")

// Define custom security function which does not repaint
RequestSecurity_NonRP(_market, _res, _exp) => request.security(_market, _res, _exp[barstate.isrealtime ? 1 : 0])[barstate.isrealtime ? 0 : 1]

// Define date filter check
DateFilter(int start, int end) => time >= start and time <= end

// Get indicator values
float   atrValue    = ta.atr(i_AtrLength)
float   emaValue    = ta.ema(close, i_EmaLength)
float   htfEmaValue = RequestSecurity_NonRP(syminfo.tickerid, i_HigherTimeframe, emaValue)
float   marketPrice = close

// Check for bullishness / bearish volatility caution
bool    isBullish   = marketPrice > htfEmaValue
bool    isCaution   = isBullish and (ta.highest(high, 7) - low > (atrValue * 1.5) or marketPrice < emaValue) 

// Set momentum color
color bgCol = color.red
if isBullish[1]
    bgCol := color.green
if isCaution[1]
    bgCol := color.orange

// Handle strategy entry, and reset trailing stop
var float trailStop = na
if isBullish and strategy.position_size == 0 and not isCaution
    strategy.entry(id="Buy", direction=strategy.long)
    trailStop := na

// Update trailing stop
float temp_trailStop = ta.highest(i_TrailStopSource, i_TrailStopLookback) - (isCaution[1] ? atrValue * i_TrailStopMulti : atrValue)
if strategy.position_size > 0
    if temp_trailStop > trailStop or na(trailStop)
        trailStop := temp_trailStop

// Handle strategy exit
if (close < trailStop or close < htfEmaValue) and barstate.isconfirmed
    strategy.close("Buy", comment="Sell")

// Draw trailing stop, HTF EMA and color-coded momentum indicator
plotshape(true, color=bgCol, style=shape.square, location=location.bottom, size=size.auto, title="Momentum Strength")
plot(htfEmaValue, color=close > htfEmaValue ? color.green : color.red, linewidth=2, title="HTF EMA")
plot(emaValue, color=close > emaValue ? color.green : color.red, linewidth=1, title="CTF EMA")
plot(strategy.position_size[1] > 0 ? trailStop : na, style=plot.style_linebr, color=color.red, title="Stop Loss")

Lebih banyak