Perubahan Strategi Perdagangan Kuantitatif OBV dan MACD

Penulis:ChaoZhang, Tanggal: 2023-11-15 17:58:42
Tag:

img

Gambaran umum

Strategi ini menggunakan volume pada saldo (OBV) dan MACD yang diubah untuk menghasilkan sinyal perdagangan. Ini menggabungkan indeks harga MACD dan OBV yang diubah sebagai indikator komprehensif untuk volume dan harga, yang bertujuan untuk menangkap peluang perdagangan ketika harga dan kekuatan volume pecah.

Logika Strategi

  1. Menghitung rata-rata bergerak sederhana (SMA) untuk menentukan tren pasar.

  2. Menghitung OBV yang diubah. Ini memodifikasi perhitungan OBV berdasarkan harga dekat dan hubungan harga dekat sebelumnya untuk membuat OBV lebih sensitif.

  3. Menghitung MACD pada OBV yang diubah. MACD terdiri dari garis cepat, garis lambat dan histogram untuk mengidentifikasi perubahan momentum volume.

  4. Ketika MACD melintasi emas dan naik, sinyal beli dihasilkan.

  5. Ketika MACD mati silang dan turun, sinyal jual dipicu.

  6. Periksa SMAs untuk menghindari perdagangan yang tidak perlu selama pasar tanpa tren.

Analisis Keuntungan

  1. OBV yang diubah lebih sensitif untuk menangkap perubahan volume awal.

  2. MACD dengan jelas menunjukkan perubahan momentum volume dan tingkat kunci.

  3. Sinyal yang dikombinasikan dengan volume dan harga meningkatkan akurasi.

  4. SMA menyaring sinyal palsu dengan menentukan tren pasar.

  5. Logika strategi yang jelas dan ruang pengoptimalan yang besar.

Analisis Risiko

  1. OBV yang diubah dapat menghasilkan sinyal palsu, filter kebutuhan dengan indikator lain.

  2. Pengaturan parameter MACD yang tidak benar dapat kehilangan perdagangan atau menyebabkan sinyal palsu.

  3. Perhatikan spesifikasi saham untuk menghindari kerugian.

  4. Memantau kondisi pasar karena strategi mungkin tidak bekerja untuk skenario khusus.

  5. Risiko overfit backtest dapat menyebabkan kinerja yang lebih buruk dalam perdagangan langsung.

Arahan Optimasi

  1. Uji kombinasi periode SMA yang berbeda untuk mengoptimalkan penentuan tren pasar.

  2. Uji parameter MACD untuk lebih mengidentifikasi perubahan momentum volume.

  3. Tambahkan indikator lain sebagai filter, seperti KDJ, RSI dll.

  4. Tambahkan stop loss ke limit loss per trade.

  5. Mengoptimalkan pengelolaan uang untuk meningkatkan profitabilitas keseluruhan.

  6. Perbedaan parameter pengujian antara stok.

Kesimpulan

Strategi ini menggabungkan OBV dan MACD yang diubah untuk mencapai sintesis volume dan harga. Ini dapat menangkap perubahan momentum volume lebih awal dan menghasilkan sinyal perdagangan. Dibandingkan dengan menggunakan OBV atau MACD saja, strategi ini memberikan peluang perdagangan yang lebih dapat diandalkan. Namun, risiko sinyal palsu ada dan pengoptimalan lebih lanjut pada indikator dan parameter, ditambah manajemen uang diperlukan untuk mendapatkan keuntungan yang stabil dalam perdagangan langsung. Secara keseluruhan, strategi ini memiliki logika yang jelas dan layak diuji dan dioptimalkan untuk mengeksplorasi potensinya.


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


Lebih banyak