
Strategi ini menggunakan gabungan penunjuk pergerakan ((DMI) dan purata bergerak Hull ((HMA) untuk menentukan arah pasaran, HMA mengesahkan kekuatan trend, dan perdagangan yang tidak tertakluk kepada pengurusan risiko.
Hitung lebar gelombang sebenar (TRUE RANGE), penunjuk pergerakan kepala (DIPlus), penunjuk pergerakan kepala kosong (DIMinus) dan indeks arah purata (ADX).
Hitung purata Hull pantas ((fasthull) dan purata Hull perlahan ((slowhull)
Trigger dengan pelbagai syarat: DIPlus memakai DIMinus dan fasthull memakai slowhull。
Mencetus keadaan kosong: DIMinus melalui DIPlus dan fasthull melalui slowhull
Isyarat melakukan lebih dan mengosongkan selepas memenuhi syarat melakukan lebih.
Strategi ini digabungkan dengan pengesahan dua kali ganda pada indikator DMI dan Hull Average untuk menilai trend, yang dapat mengenal pasti arah trend pasaran dengan berkesan, dan mengelakkan pengulangan pasaran overhead dan kosong. Pengurusan tanpa risiko mengurangkan frekuensi perdagangan, dengan tahap keuntungan keseluruhan yang baik dalam jangka panjang.
Risiko terbesar dalam strategi ini ialah tanpa kawalan kerugian, tidak dapat mengawal kerugian dengan berkesan apabila terdapat turun naik yang teruk. Selain itu, ruang pengoptimuman parameter yang terhad dan kurang sasaran juga merupakan kelemahan besar.
Risiko boleh dikurangkan dengan cara-cara seperti menambah stop loss bergerak, mengoptimumkan kombinasi parameter.
Menambah ATR stop loss, menggunakan real bandwidth trailing stop loss.
Mengoptimumkan parameter kitaran Hull untuk mencari kombinasi terbaik.
Pelancaran parameter yang lebih banyak dikosongkan.
Penambahan penapis seperti penunjuk tenaga kuantitatif untuk memastikan trend berterusan.
Strategi gabungan DMI dan HMA, penghakiman yang tepat, mudah dan berkesan, sesuai untuk operasi garis tengah dan panjang. Apabila ditambah dengan hentian yang sesuai dan pengoptimuman parameter, ia boleh menjadi sistem pengesanan trend yang sangat baik.
/*backtest
start: 2022-12-28 00:00:00
end: 2024-01-03 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/
// © Tuned_Official
//@version=4
strategy(title="DMI + HMA - No Risk Management", overlay = false, pyramiding=1, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.025)
//Inputs
hullLen1 = input(title="Hull 1 length", type=input.integer, defval=29)
hullLen2 = input(title="Hull 2 length", type=input.integer, defval=2)
len = input(title="Length for DI", type=input.integer, defval=76)
//Calculations
TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0
SmoothedTrueRange = 0.0
SmoothedTrueRange := nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange
SmoothedDirectionalMovementPlus = 0.0
SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus = 0.0
SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus
//Indicators
fasthull = hma(close, hullLen1)
slowhull = hma(close, hullLen2)
DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100
ADX = sma(DX, len)
//Plots
plot(DIPlus, color=color.green, title="DI+")
plot(DIMinus, color=color.red, title="DI-")
plot(ADX, color=color.black, title="ADX")
//conditions
go_long = crossover(DIPlus, DIMinus) and fasthull > slowhull //crossover(fasthull, slowhull) and DIPlus > DIMinus
go_short = crossover(DIMinus, DIPlus) and fasthull < slowhull //crossunder(fasthull, slowhull) and DIMinus > DIPlus
//Entry
if strategy.position_size < 0 or strategy.position_size == 0
strategy.order("long", strategy.long, when=go_long)
if strategy.position_size > 0 or strategy.position_size == 0
strategy.order("Short", strategy.short, when=go_short)