Momentum Breakout Strategi Pengesanan Dua Arah

Penulis:ChaoZhang, Tarikh: 2023-12-18 10:47:46
Tag:

img

Ringkasan

Strategi ini menggabungkan penunjuk momentum dan penunjuk penjejakan dua arah untuk menangkap isyarat pecah dalam trend yang kuat untuk penjejakan trend. Ia pergi lama apabila harga pecah ke atas dan pergi pendek apabila harga pecah ke bawah. Ia tergolong dalam kategori strategi penjejakan trend.

Logika Strategi

  1. Indikator HiLo Activator mengira harga titik tengah menggunakan titik tengah tertinggi tertinggi dan terendah terendah. Apabila harga pecah di atas titik tengah, isyarat beli dihasilkan. Apabila harga pecah di bawah titik tengah, isyarat jual dihasilkan.

  2. Indeks Arah Purata (ADX) digunakan untuk mengukur kekuatan trend. Semakin tinggi nilai ADX, semakin kuat trend. Strategi ini menggunakan ADX dengan ambang untuk menapis isyarat, hanya menghasilkan isyarat apabila trend cukup kuat.

  3. Indikator Arah DI + dan DI- mewakili kekuatan aliran naik dan penurunan masing-masing. Strategi ini juga menggunakan ambang DI + dan DI- untuk mengesahkan kekuatan untuk mengelakkan isyarat yang salah.

  4. Isyarat beli dihasilkan apabila harga pecah di atas titik tengah, ADX lebih tinggi daripada ambang, dan DI + lebih tinggi daripada ambang. Isyarat jual dihasilkan apabila harga pecah di bawah titik tengah, ADX lebih tinggi daripada ambang, dan DI- lebih tinggi daripada ambang.

Analisis Kelebihan

Strategi ini menggabungkan kelebihan momentum dan penunjuk trend-mengikuti untuk menangkap awal breakouts dan mengikuti trend dengan teliti.

Berbanding dengan menggunakan penunjuk momentum sahaja, strategi ini menambah penilaian kekuatan trend untuk menapis isyarat dan meningkatkan keuntungan.

Secara keseluruhan, strategi ini dapat mengesan trend dengan lancar, masuk dan keluar tepat pada masanya, dan mengelakkan terjebak dalam penyatuan sambil juga mengurangkan kerugian akibat pembalikan trend.

Analisis Risiko

Strategi ini mempunyai beberapa risiko dari pembalikan harga sementara yang menghasilkan isyarat yang salah.

Untuk mengurangkan risiko whipsaw, tweak parameter HiLo Activator untuk meningkatkan julat breakout. Untuk menangkap lebih banyak peluang, menurunkan ambang ADX dan DI dengan mengorbankan kualiti isyarat.

Pengguna juga harus memperhatikan perbezaan di antara produk dan persekitaran pasaran. ambang yang lebih tinggi biasanya lebih baik untuk komoditi sementara ambang yang lebih rendah sesuai dengan saham dan forex.

Arahan pengoptimuman

Cara utama untuk mengoptimumkan strategi ini termasuk:

  1. Sesuaikan tempoh HiLo Activator dan tahap pencetus untuk mengimbangi risiko dan masa.

  2. Tukar tempoh ADX dan ambang untuk mengimbangi kualiti isyarat dan kekerapan.

  3. Tetapkan ambang yang berasingan untuk DI + dan DI- untuk menampung perbezaan antara aliran naik dan penurunan.

  4. Tambah strategi stop loss dengan paras stop loss untuk mengawal kerugian perdagangan tunggal.

  5. Gabungkan dengan penunjuk tambahan lain untuk meningkatkan kestabilan keseluruhan.

Kesimpulan

Strategi ini mempertimbangkan kedua-dua momentum dan penunjuk trend-mengikuti untuk menjana isyarat semasa trend yang kuat. Ia mempunyai kelebihan mengikuti trend dengan lancar dan rapat, sesuai untuk menangkap peluang trend awal. Ia juga mempunyai keupayaan kawalan risiko yang munasabah untuk mengurangkan kerugian daripada isyarat yang salah dan whipsaws. Dengan penyesuaian parameter dan penambahan stop loss, ia dapat mencapai prestasi yang stabil. Sebagai strategi penjejakan trend serba boleh yang sesuai dengan produk dan pasaran yang berbeza, ia layak mendapat perhatian dan aplikasi yang baik dari peniaga kuant.


/*backtest
start: 2022-12-11 00:00:00
end: 2023-12-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("HiLo Activator with ADX", shorttitle="HASB_ADX", overlay=true)

// Parameters for the HiLo Activator
length_ha = input(14, title="HiLo Activator Period")
offset_ha = input(0, title="Offset")
trigger_ha = input(1, title="Trigger for Buy/Sell")

// Parameters for ADX
adx_length = input(14, title="ADX Period", minval=1)
adx_threshold = input(25, title="ADX Threshold")
di_threshold = input(50, title="DI Threshold")

// Parameter for choosing the number of candles for backtest
backtest_candles = input(1000, title="Number of Candles for Backtest", minval=1)

// Function to get backtest data
getBacktestData() =>
    var float data = na
    if bar_index >= backtest_candles
        data := security(syminfo.tickerid, "D", close[backtest_candles])
    data

// HiLo Activator calculations
ha = (highest(high, length_ha) + lowest(low, length_ha)) / 2

// ADX calculations
trh = high - high[1]
trl = low[1] - low
tr = max(trh, trl)
atr = sma(tr, adx_length)
plus_dm = high - high[1] > low[1] - low ? max(high - high[1], 0) : 0
minus_dm = low[1] - low > high - high[1] ? max(low[1] - low, 0) : 0
smoothed_plus_dm = sma(plus_dm, adx_length)
smoothed_minus_dm = sma(minus_dm, adx_length)
di_plus = 100 * (smoothed_plus_dm / atr)
di_minus = 100 * (smoothed_minus_dm / atr)
dx = 100 * abs(di_plus - di_minus) / (di_plus + di_minus)
adx = sma(dx, adx_length)

// Buy and Sell signals based on HiLo Activator and ADX
signalLong = crossover(close, ha) and adx > adx_threshold and di_plus > di_threshold
signalShort = crossunder(close, ha) and adx > adx_threshold and di_minus > di_threshold

// Plot HiLo Activator and ADX
plot(ha, color=color.blue, title="HiLo Activator")
plot(offset_ha, color=color.red, style=plot.style_histogram, title="Offset")
plot(adx, color=color.purple, title="ADX")

// Backtest strategy
strategy.entry("Buy", strategy.long, when = signalLong)
strategy.entry("Sell", strategy.short, when = signalShort)
strategy.close("Buy", when = signalShort)
strategy.close("Sell", when = signalLong)

// Accuracy percentage
var accuracy = 0.0
var totalTrades = 0
var winningTrades = 0

if (signalLong or signalShort)
    totalTrades := totalTrades + 1

if (signalLong and (not na(signalLong[1]) and (not signalLong[1])))
    winningTrades := winningTrades + 1

if (signalShort and (not na(signalShort[1]) and (not signalShort[1])))
    winningTrades := winningTrades + 1

accuracy := totalTrades > 0 ? (winningTrades / totalTrades) * 100 : 0

// Plot accuracy percentage on the chart
plot(accuracy, title="Accuracy Percentage", color=color.purple, style=plot.style_histogram)


Lebih lanjut