Strategi Mengikuti Trend Berdasarkan Petunjuk OBV


Tarikh penciptaan: 2024-02-20 15:35:08 Akhirnya diubah suai: 2024-02-20 15:35:08
Salin: 0 Bilangan klik: 904
1
fokus pada
1617
Pengikut

Strategi Mengikuti Trend Berdasarkan Petunjuk OBV

Gambaran keseluruhan

Strategi ini menggunakan dua EMA rata-rata garis julat untuk menilai trend OBV yang berlainan, mengikut arah trend. Di antaranya, indikator OBV dapat mencerminkan hubungan harga dan jumlah transaksi dengan lebih jelas, menilai kehendak peserta pasaran, dan oleh itu dapat digunakan untuk menangkap trend pasaran. Strategi ini digabungkan dengan pengolahan indikator rata-rata bergerak, yang dapat menghaluskan kebisingan pasaran dengan berkesan dan menangkap trend utama.

Prinsip Strategi

Strategi ini berdasarkan kepada apakah indikator OBV berada dalam trend naik untuk menilai masa masuk bermulut. Secara khusus, adalah dengan mengira 6 hari EMA dan 24 hari EMA OBV, yang menghasilkan isyarat bermulut apabila 6 hari EMA melintasi 24 hari EMA. Begitu juga, apabila 6 hari EMA melintasi 24 hari EMA, menghasilkan isyarat kosong.

Kunci strategi ini untuk menilai trend adalah indikator OBV. Indikator OBV mencerminkan kehendak kolektif modal besar, yang dapat mencerminkan sikap peserta pasaran dengan berkesan. Digabungkan dengan pemprosesan purata bergerak, ia dapat memadamkan sebahagian daripada kebisingan, menjadikan isyarat lebih jelas dan boleh dipercayai. Strategi ini menggunakan garis EMA cepat dan garis EMA perlahan untuk membina isyarat perdagangan, yang dapat meratakan data harga, dan juga dapat menangkap perubahan trend dengan lebih sensitif.

Analisis kelebihan

Strategi ini mempunyai beberapa kelebihan:

  1. Indikator OBV berdasarkan jumlah transaksi dapat menilai dengan jelas kehendak peserta pasaran, dan isyaratnya lebih dipercayai.

  2. Proses EMA dua hala dapat menghapuskan sebahagian bunyi, menjadikan isyarat lebih jelas.

  3. Kombinasi garis EMA perlahan dan cepat boleh digunakan untuk meratakan harga dan menangkap perubahan trend.

  4. Operasi strategi mudah dan mudah dilaksanakan.

Analisis risiko

Strategi ini mempunyai beberapa risiko:

  1. Indeks OBV kadang-kadang memberi isyarat yang salah, di mana strategi mungkin rugi.

  2. Dalam keadaan yang teruk, EMA mungkin terlewat dalam pengendalian talian dan mungkin terlepas titik masuk yang optimum.

  3. Tetapan stop loss tetap mungkin terlalu kaku dan tidak dapat menyesuaikan diri dengan perubahan pasaran.

Kaedah pencegahan:

  1. Ia juga boleh digunakan untuk mengesan tanda-tanda yang tidak sesuai dengan tanda-tanda lain.

  2. Pengaturan parameter yang dioptimumkan untuk menjadikan EMA lebih sensitif.

  3. Tetapkan hentian dinamik.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa arah:

  1. Mengoptimumkan kombinasi parameter EMA untuk mencari parameter garis purata yang lebih sesuai.

  2. Menambah petunjuk lain untuk pengesahan isyarat, seperti MACD, RSI dan lain-lain, meningkatkan ketepatan isyarat.

  3. Tetapkan hentian dinamik, yang dapat menyesuaikan titik hentian dalam masa nyata mengikut turun naik pasaran.

  4. Mengoptimumkan set parameter untuk mencari set parameter yang terbaik.

ringkaskan

Strategi ini secara keseluruhannya adalah strategi pengesanan trend yang lebih mudah dan boleh dipercayai. Ia menggabungkan penunjuk OBV dan garis lurus EMA ganda untuk mencapai keputusan mengenai trend. Kelebihannya adalah operasi yang mudah, isyarat jelas, dan dapat mengesan trend dengan berkesan; Kelemahannya adalah mungkin terdapat isyarat yang salah, dan pemprosesan garis EMA mempunyai kelewatan.

Kod 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)