Momentum Breakout Strategi Pelacakan Bidirectional

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

img

Gambaran umum

Strategi ini menggabungkan indikator momentum dan indikator pelacakan dua arah untuk menangkap sinyal pecah dalam tren yang kuat untuk pelacakan tren.

Logika Strategi

  1. Indikator HiLo Activator menghitung harga titik tengah menggunakan titik tengah tertinggi tertinggi dan terendah terendah. Ketika harga pecah di atas titik tengah, sinyal beli dihasilkan. Ketika harga pecah di bawah titik tengah, sinyal jual dihasilkan.

  2. Indeks Arah Rata-rata (ADX) digunakan untuk mengukur kekuatan tren. Semakin tinggi nilai ADX, semakin kuat tren. Strategi ini menggunakan ADX dengan ambang untuk menyaring sinyal, hanya menghasilkan sinyal ketika tren cukup kuat.

  3. Indikator arah DI+ dan DI- mewakili kekuatan tren naik dan turun masing-masing. Strategi ini juga menggunakan ambang DI+ dan DI- untuk mengkonfirmasi kekuatan untuk menghindari sinyal yang salah.

  4. Sinyal beli dihasilkan ketika harga pecah di atas titik tengah, ADX lebih tinggi dari ambang batas, dan DI + lebih tinggi dari ambang batas. Sinyal jual dihasilkan ketika harga pecah di bawah titik tengah, ADX lebih tinggi dari ambang batas, dan DI- lebih tinggi dari ambang batas.

Analisis Keuntungan

Strategi ini menggabungkan keuntungan dari momentum dan indikator trend-mengikuti untuk menangkap awal breakouts dan mengikuti tren erat. kondisi filter tren yang ketat juga membantu menghindari sinyal yang salah dalam konsolidasi dan periode berkisar.

Dibandingkan dengan menggunakan indikator momentum saja, strategi ini menambahkan evaluasi kekuatan tren untuk menyaring sinyal dan meningkatkan profitabilitas.

Secara keseluruhan, strategi dapat melacak tren dengan lancar, masuk dan keluar tepat waktu, dan menghindari terjebak dalam konsolidasi sekaligus mengurangi kerugian dari pembalikan tren.

Analisis Risiko

Strategi ini memiliki beberapa risiko whipsaw dari pembalikan harga sementara yang menghasilkan sinyal yang salah.

Untuk mengurangi risiko whipsaw, tweak parameter HiLo Activator untuk meningkatkan rentang breakout. untuk menangkap lebih banyak kesempatan, menurunkan ambang ADX dan DI dengan mengorbankan kualitas sinyal.

Pengguna juga harus memperhatikan perbedaan antara produk dan lingkungan pasar. ambang yang lebih tinggi umumnya bekerja lebih baik untuk komoditas sementara ambang yang lebih rendah sesuai dengan saham dan forex.

Arahan Optimasi

Cara utama untuk mengoptimalkan strategi ini meliputi:

  1. Sesuaikan periode HiLo Activator dan tingkat pemicu untuk menyeimbangkan risiko whipsaw dan waktu.

  2. Sesuaikan periode dan ambang ADX untuk menyeimbangkan kualitas sinyal dan frekuensi.

  3. Tetapkan ambang batas yang terpisah untuk DI+ dan DI- untuk mengakomodasi perbedaan antara tren naik dan penurunan.

  4. Tambahkan strategi stop loss dengan tingkat stop loss untuk mengendalikan kerugian perdagangan tunggal.

  5. Gabungkan dengan indikator tambahan lainnya untuk meningkatkan stabilitas keseluruhan.

Kesimpulan

Strategi ini mempertimbangkan baik momentum dan indikator trend-mengikuti untuk menghasilkan sinyal selama tren yang kuat. Ini memiliki keuntungan mengikuti tren dengan lancar dan erat, cocok untuk menangkap peluang tren awal. Ini juga memiliki kemampuan kontrol risiko yang wajar untuk mengurangi kerugian dari sinyal yang salah dan whipsaws. Dengan penyesuaian parameter dan penambahan stop loss, dapat mencapai kinerja yang stabil. Sebagai strategi pelacakan tren serbaguna yang sesuai dengan produk dan pasar yang berbeda, ini layak mendapat perhatian dan aplikasi yang baik dari pedagang 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 banyak