Strategi perdagangan berdasarkan Hull Moving Average dan WT Cross

Penulis:ChaoZhang, Tanggal: 2023-09-26 20:00:32
Tag:

Gambaran umum

Strategi ini terutama menggabungkan sinyal silang Hull Moving Average dan WT untuk memanfaatkan keuntungan dari masing-masing indikator untuk penilaian tren yang lebih akurat dan waktu masuk.

Logika Strategi

Strategi ini terdiri dari Hull Moving Average dan WT cross signals.

Bagian Hull Moving Average menghitung Hull MAs jangka pendek dan jangka panjang dan mengisi warna untuk menentukan arah tren.

Short Hull MA = WMA ((2*WMA ((n/2) - WMA ((n), sqrt ((n))

Long Hull MA = WMA(WMA(n/3) *3 - WMA(n/2), n/2)

Di mana WMA adalah Rata-rata Bergerak Bertimbang. Ketika MA pendek melintasi MA panjang, itu adalah sinyal bullish, jika tidak sinyal bearish.

Bagian WT menghitung garis WT dan mengamati persimpangan mereka untuk menentukan entri.

TCI = (Close - EMA(Close,n1)) / (k * STD(Close - EMA(Close,n1),n1))

WT1 = EMA (TCI,n2)

WT2 = SMA(WT1,m)

Di mana TCI adalah Indeks Komposit Tren, yang mencerminkan penyimpangan harga dari EMA; WT1 adalah EMA dari TCI, WT2 adalah SMA dari WT1, m biasanya 4. Perpindahan WT1 ke atas WT2 menunjukkan sinyal bullish, sementara penyeberangan WT1 di bawah WT2 menunjukkan sinyal bearish.

Dengan menggabungkan penilaian tren Hull MA dan sinyal penyeberangan WT, kita dapat memasuki pasar ke arah yang benar.

Analisis Keuntungan

Keuntungan dari strategi ini adalah:

  1. Hull MA menangkap perubahan harga lebih cepat dengan memodifikasi perhitungan, dan menyaring kebisingan pasar secara efektif untuk penilaian tren yang andal.

  2. WT menggunakan fluktuasi harga dalam saluran untuk menangkap titik balik dengan cepat dan menghasilkan sinyal perdagangan yang relatif akurat.

  3. Kombinasi ini mempertimbangkan tren dan persimpangan untuk pengendalian risiko yang lebih baik ketika tren sejajar.

  4. Parameter Hull MA dan WT dapat disesuaikan untuk penyesuaian dan optimalisasi berdasarkan karakteristik simbol dan preferensi perdagangan.

  5. Sinyal Hull MA dan WT dapat digunakan sendiri-sendiri atau bersama-sama untuk validasi trend dan penyeberangan.

  6. Stop loss dan take profit dapat diatur untuk mengontrol risiko perdagangan tunggal secara efektif.

Analisis Risiko

Risiko utama dari strategi ini adalah:

  1. Baik Hull MA dan WT meratakan harga sampai batas tertentu, yang dapat menyebabkan sinyal masuk yang tertinggal.

  2. WT dapat menghasilkan sinyal divergensi bullish/bearish palsu tanpa tren yang jelas.

  3. Pengaturan parameter yang tidak tepat dapat memengaruhi kinerja perdagangan dan membutuhkan optimalisasi yang berkelanjutan.

  4. Stop loss dapat dipicu sering selama konsolidasi tren, menyebabkan beberapa kerugian.

Risiko dapat ditangani dan dioptimalkan sebagai berikut:

  1. Sesuaikan Hull MA dan WT parameter untuk menemukan keseimbangan yang optimal. indikator lain juga dapat diuji dengan Hull MA.

  2. Tambahkan mekanisme validasi tren untuk menghindari sinyal WT palsu tanpa tren yang dikonfirmasi.

  3. Mengoptimalkan parameter melalui backtesting dan demo trading, dan menetapkan rentang stop loss yang wajar.

  4. Mengurangi ukuran posisi atau menghentikan perdagangan ketika tren tidak jelas.

Arahan Optimasi

Strategi dapat dioptimalkan lebih lanjut dari aspek berikut:

  1. Uji rata-rata bergerak yang berbeda dikombinasikan dengan WT, untuk menemukan keseimbangan yang lebih baik, misalnya KAMA, TEMA dll.

  2. Tambahkan indikator lain seperti osilator, Bollinger Bands untuk meningkatkan akurasi keputusan.

  3. Mengoptimalkan parameter melalui backtesting dan demo trading Membangun program optimasi parameter untuk penyesuaian cepat.

  4. Mengoptimalkan strategi stop loss misalnya trailing stop, volatility-based stop, bergerak dari dekat ke jauh dll, untuk mengurangi pemicu yang tidak diinginkan.

  5. Mengoptimalkan strategi ukuran posisi, mengurangi ukuran dan frekuensi dalam tren yang tidak jelas untuk mengurangi risiko.

  6. Memperkenalkan pembelajaran mesin dan teknik canggih lainnya untuk keputusan perdagangan yang lebih cerdas dan parameter adaptif.

Ringkasan

Strategi ini menggabungkan kekuatan smoothing Hull MA dan WT crossing untuk penilaian dan validasi tren. Trading dengan arah yang dikonfirmasi membantu mengendalikan risiko. Perbaikan lebih lanjut dapat dilakukan pada optimasi parameter, strategi stop loss, ukuran posisi dll. Mengintegrasikan indikator lain dan teknik cerdas juga merupakan arah optimasi masa depan. Secara keseluruhan, ini adalah tren praktis mengikuti strategi dengan kesederhanaan, keandalan dan kemudahan optimasi.


/*backtest
start: 2023-08-26 00:00:00
end: 2023-09-25 00:00:00
period: 1h
basePeriod: 15m
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/
// WT CROSS @author [© LazyBear]
// © pigsq
// @version=5

strategy("Kahlman HullMA / WT Cross Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100)

_1 = input(false, '───────── SP/TP SETTINGS ─────────')

stoploss1 = input(title='Stop Loss On/Off?', defval=true)
stoploss = input.float(5, "Stop Loss", minval = 1, step = 1)/100
takeprofit1 = input(title='Take Profit On/Off?', defval=true)
takeprofit = input.float(10, "Take Profit", minval = 1, step = 1)/100

_2 = input(false, '──────── WT CROSS SETTINGS ────────')

wtcross = input(title='WT Cross On/Off?', defval=true)
wtcross2 = input(title='Change WT Cross Method ( If WT Cross ON )', defval=false)

/// WT CROSS ///

n1 = input(10, 'Channel Length')
n2 = input(21, 'Average Length')

ap = hlc3
esa = ta.ema(ap, n1)
r = ta.ema(math.abs(ap - esa), n1)
ci = (ap - esa) / (0.015 * r)
tci = ta.ema(ci, n2)

wt1 = tci
wt2 = ta.sma(wt1, 4)

/// WT CROSS ///

/// HULL TREND WITH KAHLMAN ///

_3 = input(false, '──────── HULLMA SETTINGS ────────')

srchull = input(hl2, 'Source')
lengthhull = input(24, 'Lookback')
gain = input(10000, 'Gain')
kh = input(true, 'Use Kahlman')

hma(_srchull, _lengthhull) =>
    ta.wma((2 * ta.wma(_srchull, _lengthhull / 2)) - ta.wma(_srchull, _lengthhull), math.round(math.sqrt(_lengthhull)))

hma3(_srchull, _lengthhull) =>
    p = lengthhull / 2
    ta.wma(ta.wma(close, p / 3) * 3 - ta.wma(close, p / 2) - ta.wma(close, p), p)

kahlman(x, g) =>
    kf = 0.0
    dk = x - nz(kf[1], x)
    smooth = nz(kf[1], x) + dk * math.sqrt(g / 10000 * 2)
    velo = 0.0
    velo := nz(velo[1], 0) + g / 10000 * dk
    kf := smooth + velo
    kf

a = kh ? kahlman(hma(srchull, lengthhull), gain) : hma(srchull, lengthhull)
b = kh ? kahlman(hma3(srchull, lengthhull), gain) : hma3(srchull, lengthhull)
c = b > a ? color.lime : color.red
crossdn = a > b and a[1] < b[1]
crossup = b > a and b[1] < a[1]

p1hma = plot(a, color=c, linewidth=1, title='Long Plot', transp=75)
p2hma = plot(b, color=c, linewidth=1, title='Short Plot', transp=75)
fill(p1hma, p2hma, color=c, title='Fill', transp=55)

/// HULL TREND WITH KAHLMAN ///

/// DATE ///

_4 = input(false, '───────── DATE SETTINGS ─────────')

FromMonth = input.int(defval=1, title='From Month', minval=1, maxval=12)
FromDay = input.int(defval=1, title='From Day', minval=1, maxval=31)
FromYear = input.int(defval=999, title='From Year', minval=999)
ToMonth = input.int(defval=1, title='To Month', minval=1, maxval=12)
ToDay = input.int(defval=1, title='To Day', minval=1, maxval=31)
ToYear = input.int(defval=9999, title='To Year', minval=999)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)
window() =>
    time >= start and time <= finish ? true : false

/// DATE ///

/// LONG/SHORT CONDITION ///

longCondition = crossup and ta.crossover(wt1,wt2)
longCondition1 = crossup
longCondition2 = crossup and wt1 > wt2

if (wtcross == true ? longCondition : wtcross == false ? longCondition1:na)
    strategy.entry("LONG", strategy.long, when=window(), comment="Enter Long")
else if (wtcross2 == true ? longCondition2 : wtcross2 == false ? longCondition:na)
    strategy.entry("LONG", strategy.long, when=window(), comment="Enter Long")
    
shortCondition = crossdn and ta.crossunder(wt1,wt2)
shortCondition1 = crossdn
shortCondition2 = crossdn and wt1 < wt2

if (wtcross == true ? shortCondition : wtcross == false ? shortCondition1:na)
    strategy.entry("SHORT", strategy.short, when=window(), comment="Enter Short")
else if (wtcross2 == true ? shortCondition2 : wtcross2 == false ? shortCondition:na)
    strategy.entry("LONG", strategy.long, when=window(), comment="Enter Short")

/// LONG/SHORT CONDITION ///

/// CLOSE STRATEGY ///

strategy.close("LONG", when=wtcross == true ? shortCondition : wtcross == false ? shortCondition1:na, comment = "Close Long")
strategy.close("SHORT", when=wtcross == true ? longCondition : wtcross == false ? longCondition1:na, comment = "Close Short")

/// EXIT STRATEGY ///

strategy.exit("LONG", when=strategy.position_size > 0, stop=stoploss1 == true ? strategy.position_avg_price * (1 - stoploss):na, limit=takeprofit1 == true ? strategy.position_avg_price * (1 + takeprofit):na, comment="Exit Long")
strategy.exit("SHORT", when=strategy.position_size < 0, stop=stoploss1 == true ? strategy.position_avg_price * (1 + stoploss):na, limit=takeprofit1 == true ? strategy.position_avg_price * (1 - takeprofit):na, comment ="Exit Short")

/// LONG SL/TP LINE ///

plot(strategy.position_size > 0 ? strategy.position_avg_price * (1 - stoploss) : na, title='Long Stop Loss', color=stoploss1 == true ? color.new(color.red, 0):na, style=plot.style_linebr)
plot(strategy.position_size > 0 ? strategy.position_avg_price * (1 + takeprofit) : na, title='Long Take Profit', color=takeprofit1 == true ? color.new(color.green, 0):na, style=plot.style_linebr)

/// LONG SL/TP LINE ///

/// SHORT SL/TP LINE ///

plot(strategy.position_size < 0 ? strategy.position_avg_price * (1 + stoploss) : na, title='Short Stop Loss', color=stoploss1 == true ? color.new(color.red, 0):na, style=plot.style_linebr)
plot(strategy.position_size < 0 ? strategy.position_avg_price * (1 - takeprofit) : na, title='Short Take Profit', color=takeprofit1 == true ? color.new(color.green, 0):na, style=plot.style_linebr)

/// SHORT SL/TP LINE ///


Lebih banyak