Strategi Mengikuti Tren Berdasarkan Indikator OBV


Tanggal Pembuatan: 2024-02-20 15:35:08 Akhirnya memodifikasi: 2024-02-20 15:35:08
menyalin: 0 Jumlah klik: 904
1
fokus pada
1617
Pengikut

Strategi Mengikuti Tren Berdasarkan Indikator OBV

Ringkasan

Strategi ini menggunakan jarak rata-rata dua EMA untuk menilai tren multi-kamar dalam indikator OBV, dengan pendekatan jangka pendek sesuai dengan arah tren. Di antaranya, indikator OBV dapat lebih jelas mencerminkan hubungan harga dan volume transaksi, menilai keinginan para peserta pasar, dan karenanya dapat digunakan untuk menangkap tren pasar. Strategi ini dikombinasikan dengan pengolahan indikator rata-rata bergerak yang dapat secara efektif menyaring kebisingan pasar dan menangkap tren utama.

Prinsip Strategi

Strategi ini terutama didasarkan pada apakah indikator OBV berada dalam tren naik untuk menilai waktu masuk multihead. Secara khusus, adalah menghitung 6 hari EMA dan 24 hari EMA dari OBV, yang menghasilkan sinyal multihead ketika 6 hari EMA di atas melewati 24 hari EMA. Demikian pula, ketika 6 hari EMA di bawah melewati 24 hari EMA, menghasilkan sinyal kosong. Selain itu, strategi ini juga menetapkan 3% stop loss.

Kunci dari strategi ini untuk menilai tren adalah indikator OBV. Indikator OBV mencerminkan kemauan kolektif dari modal besar, yang dapat secara efektif mencerminkan sikap para peserta pasar. Dikombinasikan dengan pemrosesan rata-rata bergerak, dapat menghapus sebagian dari kebisingan, yang membuat sinyal lebih jelas dan dapat diandalkan. Strategi ini menggunakan garis EMA cepat dan garis EMA lambat untuk membangun sinyal perdagangan, yang dapat meluruskan data harga, dan juga dapat menangkap perubahan tren dengan lebih sensitif.

Analisis Keunggulan

Strategi ini memiliki beberapa keuntungan:

  1. Indikator OBV berdasarkan volume transaksi dapat dengan jelas menilai keinginan peserta pasar, dan sinyalnya lebih dapat diandalkan.

  2. Pengolahan EMA ganda dapat menghapus sebagian dari kebisingan dan membuat sinyal lebih jelas.

  3. Menggunakan kombinasi garis EMA cepat dan lambat dapat memperlancar harga dan menangkap perubahan tren.

  4. Operasi strategi sederhana dan mudah diterapkan.

Analisis risiko

Strategi ini juga memiliki beberapa risiko:

  1. Indikator OBV kadang-kadang memberikan sinyal yang salah, dan pada saat itu strategi dapat mengalami kerugian.

  2. Dalam situasi yang ekstrim, EMA dapat mengalami keterlambatan dalam proses pengolahan dan mungkin akan melewatkan titik masuk yang optimal.

  3. Pengaturan stop loss yang tetap mungkin terlalu kaku dan tidak dapat beradaptasi dengan perubahan pasar.

Tanggapan:

  1. Untuk mengkonfirmasi dengan indikator lain, hindari sinyal yang salah.

  2. Pengaturan parameter yang dioptimalkan untuk membuat baris EMA lebih sensitif.

  3. Tetapkan stop loss dinamis.

Arah optimasi

Strategi ini dapat dioptimalkan dari beberapa arah:

  1. Optimalkan kombinasi parameter EMA untuk menemukan parameter garis rata yang lebih cocok.

  2. Menambahkan indikator lain untuk konfirmasi sinyal, seperti MACD, RSI dan lain-lain, meningkatkan akurasi sinyal.

  3. Pengaturan Stop Loss Dinamis, yang dapat menyesuaikan Stop Loss secara real-time sesuai dengan fluktuasi pasar.

  4. Optimalkan kombinasi parameter untuk menemukan kombinasi parameter optimal.

Meringkaskan

Strategi ini secara keseluruhan merupakan strategi pelacakan tren yang relatif sederhana dan dapat diandalkan. Strategi ini menggabungkan indikator OBV dan garis lurus EMA ganda untuk mencapai penilaian tren. Kelebihannya adalah operasi yang sederhana, sinyal yang jelas, dan kemampuan untuk secara efektif melacak tren. Kelemahannya adalah kemungkinan munculnya sinyal yang salah, dan pemrosesan garis EMA yang tertunda.

Kode Sumber Strategi
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("OBV EMA X BF 🚀", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// Time Frame ///////////////
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true

/////////////// OBV /////////////// 
src = close
atr = atr(input(title="ATR Period", defval=3, minval=1))
atrmult = input(title="ATR Mult", defval=1, minval=0)
obv = cum(change(src) > 0 ? volume * (volume / atr) : change(src) < 0 ? -volume * (volume / atr) : 0 * volume / atr)
e1 = ema(obv, input(24))
e2 = ema(obv, input(6))

///////////////  Strategy  /////////////// 
long = crossover(e2, e1)
short = crossunder(e2, e1)

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) 
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) 

//////////////// Stop loss /////////////// 
sl_inp = input(3.0, title='Stop Loss %') / 100
tp_inp = input(5000.0, title='Take Profit %') / 100
 
take_level_l = strategy.position_avg_price * (1 + tp_inp)
take_level_s = strategy.position_avg_price * (1 - tp_inp)

slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na

/////////////// Execution /////////////// 
if testPeriod()
    strategy.entry("L", strategy.long, when=long)
    strategy.entry("S", strategy.short, when=short)
    strategy.exit("L SL", "L", stop=long_sl, when=since_longEntry > 0)
    strategy.exit("S SL", "S", stop=short_sl, when=since_shortEntry > 0)

/////////////// Plotting /////////////// 
plot(e1, color = e1 > e1[1] ? color.lime : e1 < e1[1] ? color.red : color.white, linewidth = 2, offset = 0)
plot(e2, color = e2 > e2[1] ? color.lime : e2 < e2[1] ? color.red : color.white, linewidth = 1)
bgcolor(strategy.position_size > 0 ? color.lime : strategy.position_size < 0 ? color.red : color.white, transp=90)
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=60)