Strategi Crossover Indeks Tubuh Relatif

Penulis:ChaoZhang, Tanggal: 2023-10-18 11:16:53
Tag:

img

Gambaran umum

Strategi ini terutama menggunakan sinyal crossover rata-rata bergerak dari rasio tubuh relatif (RB) lilin harian untuk menentukan tren, bersama dengan stop loss dan mengambil keuntungan untuk perdagangan otomatis.

Logika Strategi

Strategi ini didasarkan pada indikator RBI Vitelot, yang menghitung rata-rata bergerak dari rasio tubuh relatif (RB) lilin harian.

Rumus ini menghitung rasio tubuh riil terhadap panjang penuh candlestick untuk lilin bullish, mengambil nilai positif; dan nilai negatif untuk lilin bearish. RB berkisar dari -1 hingga 1.

Indikator RBI menggunakan rata-rata bergerak RB untuk menyaring kebisingan dan menangkap esensi tren pasar.

Untuk menghindari sinyal palsu selama fase bullish yang tidak pasti, strategi juga memeriksa apakah harga penutupan di atas EMA 13 periode sebelum menghasilkan sinyal beli yang benar untuk posisi panjang.

Strategi ini juga menerapkan stop loss dan take profit untuk mengendalikan risiko dan mengunci keuntungan.

Analisis Keuntungan

  • RBI menyaring kebisingan yang signifikan dan menangkap karakteristik tren pasar, menghindari sinyal palsu dari berbagai pasar.

  • Menggunakan filter rata-rata bergerak menghindari sinyal palsu secara efektif selama fase bullish yang tidak pasti, mengurangi kerugian dari short.

  • Stop loss and take profit membantu mengurangi risiko kerugian pada posisi individu dan mengunci keuntungan, meningkatkan profitabilitas secara keseluruhan.

  • Strategi ini memiliki beberapa parameter dan mudah dipahami, cocok untuk perdagangan otomatis.

Analisis Risiko

  • Strategi ini hanya bergantung pada RBI, setiap sinyal yang salah dari indikator dapat menyebabkan kegagalan.

  • Penyesuaian parameter indikator yang buruk juga dapat memperburuk kualitas sinyal perdagangan.

  • Tidak ada indikator teknis yang dapat sepenuhnya menghindari kerugian dalam kondisi pasar tertentu.

  • Stop loss yang diatur terlalu ketat dapat mengakibatkan stop out yang terlalu sering; terlalu luas dapat menyebabkan kerugian besar pada posisi tunggal.

  • Pengendalian pengambilan yang tidak memadai dapat menyebabkan risiko penghapusan akun.

Arahan Optimasi

  • Kombinasi parameter yang berbeda dapat diuji untuk mengoptimalkan parameter RBI.

  • Indikator tambahan dapat ditambahkan untuk penyaringan sinyal dan peningkatan kualitas.

  • Pembelajaran mesin dapat digunakan untuk melatih dan mengoptimalkan parameter stop loss dan take profit.

  • Strategi manajemen risiko dapat ditambahkan untuk mengontrol ukuran posisi secara keseluruhan dan eksposur risiko.

  • Periode kepemilikan yang berbeda seperti kepemilikan overnight atau scalping jangka pendek dapat dieksplorasi.

Kesimpulan

Secara keseluruhan ini adalah strategi trend following yang relatif sederhana dan mudah. Ini menggunakan RBI crossover untuk menentukan arah tren, dengan filter tambahan dan stop loss / take profit untuk mengendalikan risiko, secara efektif menghindari sinyal palsu dari berbagai pasar. Tapi tidak ada indikator teknis yang dapat sepenuhnya menghindari risiko. Perbaikan berkelanjutan seperti optimasi parameter, manajemen risiko masih diperlukan untuk pengembalian kelebihan yang stabil jangka panjang. Logika jelas dan mudah dipahami, cocok untuk perdagangan otomatis. Ini adalah strategi trend following yang sangat praktis.


/*backtest
start: 2022-10-11 00:00:00
end: 2023-10-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("RBI Backtest /w TSSL", shorttitle="RBI Strategy", overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 10000, slippage = 5)
// RBI:
//  The EMA of the relative body (RB) of Japanese candles is evaluated.
//  The RB of a candle (my definition) is simply the ratio of the body with respect to its full length
//  and taken positive for bull candles and negative for bear candles:
//      e.g. a bull "marubozo" has RB=1 a bear "marubozo" has RB=-1;
//      a "doji" has RB=0.
//  This simple indicator grasps the essence of the market by filtering out a great deal of noise.
//
//  A flag can be selected to calculate its very basic binary version, where a bull candle counts as a one
//  and a bear candle counts as a minus one.
//
//  Enter (or exit) the market when the signal line crosses the base line.
//  When the market is choppy we have a kind of alternating bear and bull candles so that
//  RBI is FLAT and usually close to zero. 
//  Therefore avoid entering the market when RBI is FLAT and INSIDE the Exclusion level.
//  The exclusion level is to be set by hand: go back in history and check when market was choppy; a good
//  way to set it is to frame the oscillations of RBI whe price was choppy.
//
//  RBI is more effective when an EMA of price is used as filtering. I found EMA(13) to be
//  a decent filter: go long when base crosses signal upwards AND closing price is above EMA(13);
//  same concept for going short.
//
//  As any other indicator, use it with responsibility: THERE CAN'T BE A SINGLE MAGIC INDICATOR winning
//  all trades.
//
//  Above all, have fun.
//
// Vitelot/Yanez/Vts March 31, 2019

par1 = input(5, title="MA1 Period")
par2 = input(5, title="Signal Period")
exclusion = input(0.2, title="Exclusion level")

useBin = input(false, title="Calculate the binary version")

treshold_long = input(0, title="Treshold Long")
treshold_short = input(0, title="Treshold Short")

fixedSL = input(title="SL Activation", defval=300)
trailSL = input(title="SL Trigger", defval=1)
fixedTP = input(title="TP Activation", defval=120)
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

ynSimple(t) =>
    s = (close>open)? 1: -1
    ema(sum(s,t),t)

ynRel(t) =>
    s = (close-open)/(high-low)
    ema(sum(s,t),t)

yn = useBin? ynSimple(par1): ynRel(par1) 
sig = ema(yn,par2)


plot(yn, color=aqua, title="RBI", linewidth=3, transp=0)
plot(sig, color=orange, title="Signal", linewidth=2, transp=0)

hline(0, color=white, title="Zero level", editable=false)
hline(exclusion, color=yellow, title="Exclusion level +", editable=true, linestyle=line)
hline( 0-exclusion, color=yellow, title="Exclusion level -", editable=true, linestyle=line)

long = crossover(yn,sig) and yn < treshold_long
short = crossover(sig,yn)  and yn > treshold_short

// === 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)


Lebih banyak