Strategi Crossover Indeks Tubuh Relatif

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

img

Ringkasan

Strategi ini terutamanya menggunakan isyarat crossover purata bergerak nisbah badan relatif (RB) lilin harian untuk menentukan trend, bersama dengan stop loss dan mengambil keuntungan untuk perdagangan automatik.

Logika Strategi

Strategi ini berdasarkan kepada penunjuk RBI Vitelot, yang mengira purata bergerak nisbah badan relatif (RB) lilin harian.

Rumus ini mengira nisbah badan sebenar kepada panjang penuh candlestick untuk lilin bullish, mengambil nilai positif; dan nilai negatif untuk lilin bearish.

Penunjuk RBI menggunakan purata bergerak RB untuk menapis bunyi bising dan menangkap intipati trend pasaran. Isyarat beli dihasilkan apabila RBI melintasi di atas garis isyaratnya, dan isyarat jual apabila melintasi di bawahnya.

Untuk mengelakkan isyarat palsu semasa fasa kenaikan yang tidak pasti, strategi ini juga memeriksa sama ada harga penutupan di atas EMA 13 tempoh sebelum menghasilkan isyarat beli yang benar untuk kedudukan panjang.

Strategi ini juga melaksanakan stop loss dan mengambil keuntungan untuk mengawal risiko dan mengunci keuntungan.

Analisis Kelebihan

  • RBI menapis bunyi bising yang signifikan dan menangkap ciri-ciri trend pasaran, mengelakkan isyarat palsu dari pasaran yang berbeza.

  • Menggunakan penapis purata bergerak mengelakkan isyarat palsu dengan berkesan semasa fasa kenaikan yang tidak pasti, mengurangkan kerugian dari pendek.

  • Hentikan kerugian dan ambil keuntungan membantu mengurangkan risiko kerugian pada kedudukan individu dan mengunci keuntungan, meningkatkan keuntungan keseluruhan.

  • Strategi ini mempunyai beberapa parameter dan mudah difahami, sesuai untuk perdagangan automatik.

Analisis Risiko

  • Strategi ini hanya bergantung kepada RBI, sebarang isyarat yang salah dari penunjuk boleh menyebabkan kegagalan.

  • Penyesuaian parameter indikator yang tidak baik juga boleh merosakkan kualiti isyarat perdagangan.

  • Tiada penunjuk teknikal dapat mengelakkan sepenuhnya kerugian dalam keadaan pasaran tertentu.

  • Stop loss yang ditetapkan terlalu ketat boleh menyebabkan stop out yang terlalu kerap; terlalu luas boleh menyebabkan kerugian besar pada kedudukan tunggal.

  • Kawalan pengambilan yang tidak mencukupi boleh membawa kepada risiko penghapusan akaun.

Arahan pengoptimuman

  • Kombinasi parameter yang berbeza boleh diuji untuk mengoptimumkan parameter RBI.

  • Penunjuk tambahan boleh ditambah untuk penapisan isyarat dan peningkatan kualiti.

  • Pembelajaran mesin boleh digunakan untuk melatih dan mengoptimumkan parameter stop loss dan mengambil keuntungan.

  • Strategi pengurusan risiko boleh ditambah untuk mengawal saiz kedudukan keseluruhan dan pendedahan risiko.

  • Tempoh pegangan yang berbeza seperti pegangan semalam atau scalping jangka pendek boleh diterokai.

Kesimpulan

Secara keseluruhan ini adalah strategi trend yang agak mudah dan mudah. Ia menggunakan persilangan RBI untuk menentukan arah trend, dengan penapis tambahan dan stop loss / mengambil keuntungan untuk mengawal risiko, dengan berkesan mengelakkan isyarat palsu dari pasaran yang berbeza. Tetapi tiada penunjuk teknikal yang dapat mengelakkan risiko sepenuhnya. Penambahbaikan berterusan seperti pengoptimuman parameter, pengurusan risiko masih diperlukan untuk pulangan berlebihan yang stabil dalam jangka panjang. Logiknya jelas dan mudah difahami, sesuai untuk perdagangan automatik.


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