Strategi perdagangan kuantitatif berdasarkan OBV dan MACD yang diubah suai


Tarikh penciptaan: 2023-11-15 17:58:42 Akhirnya diubah suai: 2023-11-15 17:58:42
Salin: 0 Bilangan klik: 858
1
fokus pada
1617
Pengikut

Strategi perdagangan kuantitatif berdasarkan OBV dan MACD yang diubah suai

Gambaran keseluruhan

Strategi ini berdasarkan kepada perubahan dalam indikator gelombang tenaga (OBV) dan MACD untuk membuat keputusan isyarat perdagangan, termasuk dalam strategi komprehensif kuantitatif. Ia menggabungkan indeks harga saham MACD dan OBV yang berubah sebagai isyarat komprehensif kuantitatif, yang bertujuan untuk mencari peluang perdagangan yang kuat untuk menembusi harga saham.

Prinsip Strategi

  1. Hitung purata bergerak sederhana (SMA) untuk menilai trend pasaran besar.

  2. Ia mengubah cara pengiraan OBV berdasarkan hubungan antara harga penutupan dan harga penutupan hari sebelumnya, menjadikan OBV lebih sensitif.

  3. Mengira MACD pada OBV yang diubah. MACD terdiri daripada garis cepat, garis lambat dan tiang MACD, yang dapat melihat trend perubahan kuantiti.

  4. Apabila MACD bercabang ke atas, ia dianggap sebagai isyarat beli.

  5. Apabila MACD mati dan ke bawah, ia dianggap sebagai isyarat menjual.

  6. Berpadu dengan penilaian SMA, mengelakkan transaksi yang tidak perlu.

Analisis kelebihan

  1. Perubahan OBV lebih sensitif dan dapat menangkap perubahan kuantitatif lebih awal.

  2. MACD dapat menilai dengan jelas perubahan trend dan titik-titik penting.

  3. Sinyal gabungan harga dan kuantiti untuk meningkatkan ketepatan isyarat.

  4. SMA menilai trend saham besar, membantu menyaring isyarat yang salah.

  5. Strategi yang jelas dan mudah difahami, ruang untuk pengoptimuman parameter yang besar.

Analisis risiko

  1. Perubahan OBV mudah menimbulkan isyarat salah dan perlu disaring dengan penapis indikator lain.

  2. Setting parameter MACD yang tidak betul akan kehilangan peluang perdagangan atau menghasilkan isyarat yang salah.

  3. Perlu memberi perhatian kepada maklumat saham itu sendiri, untuk mengelakkan kerugian akibat masalah saham individu.

  4. Ia perlu dipertimbangkan dalam keadaan pasaran dan tidak sesuai untuk situasi tertentu.

  5. Data yang dikumpulkan dari pengkajian semula adalah berisiko, dan mungkin kurang berkesan.

Arah pengoptimuman

  1. Uji kombinasi kitaran SMA yang berbeza untuk mengoptimumkan penilaian trend pasaran besar.

  2. Uji tetapan parameter MACD untuk menilai perubahan kuantiti optimum.

  3. Tambahkan penapis isyarat palsu untuk petunjuk lain, seperti KDJ, RSI dan sebagainya.

  4. Tambah strategi hentikan kerugian untuk mengawal kerugian tunggal.

  5. Mengoptimumkan strategi pengurusan wang dan meningkatkan keberkesanan keuntungan keseluruhan.

  6. Uji perbezaan parameter strategi saham yang berbeza.

ringkaskan

Strategi ini menggabungkan perubahan OBV dan MACD, mewujudkan penggabungan kuantitatif, dapat menangkap perubahan dalam keadaan kuantitatif saham lebih awal, dan menghasilkan isyarat perdagangan. Strategi ini dapat memberikan peluang jual beli yang lebih dipercayai berbanding dengan penggunaan OBV atau MACD sahaja. Tetapi strategi ini juga mempunyai risiko isyarat yang salah, memerlukan pengoptimuman lebih lanjut kepada kumpulan indikator dan parameter, dan dilengkapi dengan kaedah pengurusan dana, untuk mendapatkan keuntungan yang stabil dalam saham.

Kod sumber strategi
/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-14 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/
// © stocktechbot

//@version=5
strategy("Altered OBV On MACD", overlay=true, margin_long=100, margin_short=100)

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © stocktechbot
//@version=5
//SMA Tredline
out = ta.sma(close, 200)
outf = ta.sma(close, 50)
outn = ta.sma(close, 90)
outt = ta.sma(close, 21)
outthree = ta.sma(close, 9)
//sma plot
offset = input.int(title="Offset", defval=0, minval=-500, maxval=500)
plot(out, color=color.blue, title="MA200", offset=offset)
plot(outf, color=color.maroon, title="MA50", offset=offset)
plot(outn, color=color.orange, title="MA90", offset=offset)
plot(outt, color=color.olive, title="MA21", offset=offset)
plot(outthree, color=color.fuchsia, title="MA9", offset=offset)

fast_length = input(title="Fast Length", defval=12)
slow_length = input(title="Slow Length", defval=26)
chng = 0
obv = ta.cum(math.sign(ta.change(close)) * volume)
if close < close[1] and (open < close)
    chng := 1
else if close > close[1]
    chng := 1
else
    chng := -1
obvalt = ta.cum(math.sign(chng) * volume)
//src = input(title="Source", defval=close)
src = obvalt
signal_length = input.int(title="Signal Smoothing",  minval = 1, maxval = 50, defval = 9)
sma_source = input.string(title="Oscillator MA Type",  defval="EMA", options=["SMA", "EMA"])
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])

// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal
//hline(0, "Zero Line", color=color.new(#787B86, 50))
//plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below)))
//plot(macd, title="MACD", color=col_macd)
//plot(signal, title="Signal", color=col_signal)
[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9)
//BUY Signal
mafentry =ta.sma(close, 50) > ta.sma(close, 90)
//matentry = ta.sma(close, 21) > ta.sma(close, 50)
matwohun = close > ta.sma(close, 200)
twohunraise = ta.rising(out, 2)
twentyrise = ta.rising(outt, 2)
macdrise = ta.rising(macd,2)
macdlong = ta.crossover(macd, signal)
longCondition=false
if macdlong and macdrise
    longCondition := true

if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)
//Sell Signal
mafexit =ta.sma(close, 50) < ta.sma(close, 90)
matexit = ta.sma(close, 21) < ta.sma(close, 50)
matwohund = close < ta.sma(close, 200)
twohunfall = ta.falling(out, 3)
twentyfall = ta.falling(outt, 2)
shortmafall = ta.falling(outthree, 1)
macdfall = ta.falling(macd,1)
macdsell = macd < signal
shortCondition = false
if macdfall and macdsell and (macdLine < signalLine) and ta.falling(low,2)
    shortCondition := true


if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)