
Strategi ini menggunakan dua rata-rata bergerak Hall dalam jangka pendek dan jangka panjang untuk menghasilkan dan memfilter sinyal perdagangan. Rata-rata bergerak Hall dalam jangka pendek digunakan untuk menghasilkan sinyal, sedangkan rata-rata bergerak Hall dalam jangka panjang digunakan untuk memfilter sinyal, dan hanya menghasilkan sinyal perdagangan ketika rata-rata Hall dalam jangka pendek dan rata-rata Hall dalam jangka panjang berubah secara paralel.
Strategi ini menggunakan indikator ATR untuk mengatur stop loss dan stop loss secara bersamaan. Setiap kali membuka posisi, stop loss dan stop loss untuk posisi saat ini akan diatur secara dinamis berdasarkan nilai ATR.
Hull Moving Average jangka pendek digunakan untuk menangkap tren jangka pendek dan titik balik harga. Ketika arah Hull Moving Average jangka pendek bergeser, menunjukkan perubahan tren jangka pendek harga.
Long-term Hall Moving Average digunakan untuk menentukan pergerakan harga secara keseluruhan. Misalnya, ketika arah long-term Hall Moving Average naik, harga berada dalam tren naik secara keseluruhan.
Sinyal perdagangan hanya dihasilkan ketika Hall Moving Average jangka pendek bergeser dan arah pergeserannya sesuai dengan arah pergerakan keseluruhan Hall Moving Average jangka panjang. Artinya, sinyal perdagangan hanya dilakukan ketika harga bergeser dalam arah yang sama dengan pergerakan keseluruhan. Ini dapat secara efektif memfilter sinyal yang salah yang disebabkan oleh kebisingan pasar jangka pendek.
Setelah membuka posisi, stop loss dan stop loss akan diatur berdasarkan ukuran indikator ATR. Indikator ATR dapat mencerminkan tingkat fluktuasi dan tingkat risiko pasar. Posisi stop loss akan ditempatkan di bawah titik rendah harga, sedangkan posisi stop loss akan ditempatkan di atas titik tinggi harga, dan semuanya akan tergantung pada nilai ATR, sesuai dengan tingkat fluktuasi pasar untuk menyesuaikan ruang lingkup stop loss.
Strategi ini menggabungkan sinyal jangka pendek dan pemfilteran jangka panjang untuk secara efektif mengidentifikasi tren harga jangka menengah dan menangkap titik-titik perubahan tepat waktu. Dibandingkan dengan indikator seperti rata-rata bergerak tunggal, kemungkinan tertipu oleh kebisingan pasar dapat dikurangi.
Dinamis menyesuaikan posisi stop loss, dapat mengatur stop loss yang masuk akal sesuai dengan tingkat fluktuasi pasar, menghindari terlalu radikal dan mengurangi risiko kerugian, sambil menjamin keuntungan.
Dengan keuntungan dari Hall Moving Average, pergerakan harga dapat dinilai dengan lebih fleksibel dan akurat, dan memiliki kemampuan pelacakan yang lebih kuat dibandingkan dengan Moving Average biasa.
Strategi ini bergantung pada persilangan dua rata-rata bergerak Hall dalam jangka pendek dan jangka panjang sebagai sinyal, dan jika terjadi persilangan palsu antara dua rata-rata bergerak, mungkin akan menyebabkan entri yang salah. Dalam hal ini, perlu diputuskan apakah sinyal tersebut disaring berdasarkan struktur pasar jangka panjang.
Dalam situasi yang bergolak, harga mungkin bergolak dalam kisaran perdagangan yang lebih kecil, yang akan meningkatkan tingkat kesalahan sinyal dan meningkatkan kemungkinan perdagangan yang tidak berarti. Dalam hal ini, Anda dapat menghindari perdagangan yang tidak berarti dengan memperluas kondisi penyaringan sinyal perdagangan.
Pengaturan stop loss bergantung pada indikator ATR, dan jika indikator ATR mencerminkan fluktuasi pasar yang tidak akurat, posisi stop loss juga tidak akan berlaku. Dalam hal ini, Anda dapat mempertimbangkan untuk memperbaiki nilai ATR dalam kombinasi dengan indikator volatilitas lainnya.
Anda dapat mempertimbangkan untuk menggabungkan indikator jangka pendek lainnya untuk membantu penilaian sinyal, seperti indikator overbought dan oversold seperti RSI, untuk meningkatkan efisiensi penyaringan.
Hubungan logis penyaringan antara rata-rata bergerak Hall jangka panjang dan jangka pendek dapat ditambahkan atau dioptimalkan, sehingga aturan penyaringan lebih ketat dan menghindari sinyal yang salah.
Berbagai pengaturan parameter dapat dipelajari untuk memengaruhi stabilitas strategi dan profitabilitas. Berbagai kombinasi parameter seperti parameter moving average, parameter ATR, dan lain-lain dapat menghasilkan kinerja perdagangan yang berbeda.
Strategi ini menggunakan sinyal jangka pendek untuk menangkap sinyal Hall Moving Average, jangka panjang untuk memfilter sinyal Hall Moving Average dan ATR untuk mengatur stop loss, untuk membentuk sistem strategi pelacakan tren jangka menengah yang lebih lengkap. Strategi ini dapat secara efektif menemukan titik-titik perubahan harga jangka menengah, menghindari gangguan oleh kebisingan pasar jangka pendek, dan merupakan alat pilihan saham penting untuk membangun sistem perdagangan tren.
/*backtest
start: 2023-12-04 00:00:00
end: 2024-01-03 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Hull Filtered Strategy", overlay=true, pyramiding=0, default_qty_type= strategy.percent_of_equity, default_qty_value = 10, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0)
// Parameters for Hull Moving Averages
src = input(close, title="Source")
signal_period = input(50, title="Period of signal HMA")
filter_period = input(200, title="Period of filter HMA")
strat_dir_input = input(title="Strategy Direction", defval="all", options=["long", "short", "all"])
// Set allowed trading directions
strat_dir_value = strat_dir_input == "long" ? strategy.direction.long : strat_dir_input == "short" ? strategy.direction.short : strategy.direction.all
strategy.risk.allow_entry_in(strat_dir_value)
// stop loss and take profit
sl_factor = input(2,title="Stop Loss Factor")
tp_factor = input(3,title="Take Profit Factor")
atr_period = input(14, title="ATR Period (SL/TP)")
// Testing Start dates
testStartYear = input(2010, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
//Stop date if you want to use a specific range of dates
testStopYear = input(2030, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
// -----------------------------------------------------------------------------
// Global variables
// -----------------------------------------------------------------------------
var float tp = na
var float sl = na
var float position = na
// -----------------------------------------------------------------------------
// Functions
// -----------------------------------------------------------------------------
testWindow() =>
time >= testPeriodStart and time <= testPeriodStop ? true : false
// -----------------------------------------------------------------------------
// The engine
// -----------------------------------------------------------------------------
hma_signal = hma(src, signal_period)
hma_filter = hma(src, filter_period)
// Used to determine exits and stop losses
atr_e = atr(atr_period)
// if hma_filter increases hma_trend is set to 1, if it decreases hma_trend is set to -1. If no trend is available, hma_trend is set to ß0
trend = hma_filter > hma_filter[1] ? 1 : hma_filter < hma_filter[1] ? -1 : 0
signal = hma_signal > hma_signal[1] ? 1 : hma_signal < hma_signal[1] ? -1 : 0
// -----------------------------------------------------------------------------
// signals
// -----------------------------------------------------------------------------
if signal[0] == 1 and signal[1] != 1 and trend == 1 and testWindow()
sl := close - sl_factor*atr_e
tp := close + tp_factor*atr_e
strategy.entry("HMA_LNG", strategy.long)
strategy.exit("LE", "HMA_LNG", profit=100*tp_factor*atr_e, loss=100*sl_factor*atr_e)
if signal[0] == -1 and signal[1] != -1 and trend == -1 and testWindow()
sl := close + sl_factor*atr_e
tp := close - tp_factor*atr_e
strategy.entry("HMA_SHRT", strategy.short)
strategy.exit("SE", "HMA_SHRT", profit=100*tp_factor*atr_e, loss=100*sl_factor*atr_e)
if strategy.position_size != 0
sl := sl[1]
tp := tp[1]
// -----------------------------------------------------------------------------
// PLOT
// -----------------------------------------------------------------------------
hma_s = plot(hma_signal, title="SIGNAL", color = signal == 1 ? color.green : color.red)
hma_l = plot(hma_filter, title="TREND", color = trend == 1 ? color.green : color.red)
plot(tp, title="TAKE PROFIT", color= strategy.position_size != 0 ? color.blue: na, linewidth=1)
plot(sl, title="STOP LOSS", color= strategy.position_size != 0 ? color.red: na, linewidth = 1)