Strategi perdagangan berdasarkan persilangan Hull Moving Average dan indikator WT


Tanggal Pembuatan: 2023-09-26 20:00:32 Akhirnya memodifikasi: 2023-09-26 20:00:32
menyalin: 1 Jumlah klik: 1000
1
fokus pada
1617
Pengikut

Ringkasan

Strategi ini terutama menggabungkan sinyal silang dari Hull Moving Average dan WT Indicator untuk memanfaatkan keunggulan masing-masing indikator, dan membuat keputusan yang lebih akurat dalam menilai tren dan memilih waktu masuk.

Prinsip Strategi

Strategi ini terutama terdiri dari Hull Moving Average dan WT Indicator Cross Signal.

Bagian Hull Moving Average, dengan menghitung Hull MA jangka pendek dan jangka panjang, dan mengisi warna untuk menilai arah tren.

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

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

Di mana WMA adalah rata-rata bergerak berbobot. Jika garis pendek melewati garis panjang, maka sinyal bullish, jika tidak, maka sinyal bearish.

WT Indikator Bagian, dengan menghitung garis rata-rata WT Indikator dan melihat persimpangan garis rata-rata untuk menilai masuk.

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

WT1 = EMA(TCI,n2)

WT2 = SMA(WT1,m)

Di mana TCI adalah Trend Composite Index, yang mencerminkan tingkat penyimpangan harga dari EMA garis tengah saluran; WT1 adalah nilai smoothing EMA TCI, WT2 adalah nilai SMA WT1, m umumnya mengambil 4 ⋅ sinyal multihead ketika WT1 melewati WT2, dan WT1 di bawah WT2 adalah sinyal kosong.

Kombinasi penilaian tren dari Hull MA dan sinyal silang dari indikator WT, dapat masuk ke dalam permainan dengan asumsi bahwa arah tren benar.

Analisis Keunggulan

Strategi ini menggabungkan keuntungan dari Hull MA dan WT, dengan beberapa keuntungan:

  1. Hull MA dapat menangkap tren perubahan harga lebih cepat dengan mengubah cara menghitung rata-rata bergerak, dan secara efektif memfilter kebisingan pasar untuk menilai tren secara akurat dan andal.

  2. Indikator WT memanfaatkan karakteristik fluktuasi harga dalam saluran, dapat dengan cepat menangkap titik-titik perubahan, dan mengirimkan sinyal perdagangan yang lebih akurat.

  3. Dengan menggunakan kombinasi keduanya, Anda dapat mempertimbangkan penilaian tren dan fokus pada sinyal silang untuk mengendalikan risiko seiring dengan kekuatan tren.

  4. Hull MA smoothing parameter dan WT indicator parameter dapat disesuaikan dan dioptimalkan sesuai dengan karakteristik varietas dan preferensi perdagangan.

  5. Dapat digunakan secara terpisah untuk perdagangan sinyal silang dari indikator Hull MA atau WT, atau dapat dikombinasikan dengan penggunaan, baik untuk pelacakan tren dan verifikasi silang.

  6. Anda dapat mengatur strategi stop loss dan stop loss untuk mengontrol risiko perdagangan.

Analisis risiko

Strategi ini memiliki beberapa risiko utama:

  1. Indeks Hull MA dan WT keduanya memiliki tingkat pembusukan harga yang mungkin sedikit terlambat, sehingga waktu masuk tidak cukup tepat.

  2. Indeks WT mudah menghasilkan sinyal palsu dari backlink multihead dan backlink kosong, yang meningkatkan risiko perdagangan jika tidak digabungkan dengan penilaian tren.

  3. Penetapan parameter yang tidak tepat juga dapat mempengaruhi hasil transaksi, yang perlu terus diuji dan dioptimalkan sesuai dengan karakteristik varietas.

  4. Stop loss dapat sering dipicu pada saat tren bergejolak, yang menyebabkan kerugian pada perdagangan.

Risiko dapat dioptimalkan dan ditingkatkan melalui:

  1. Menyesuaikan parameter Hull MA dan WT untuk menemukan titik keseimbangan optimal. Anda juga dapat menguji indikator lain dengan kombinasi Hull MA.

  2. Menambahkan mekanisme penilaian tren untuk menghindari sinyal yang salah dari indikator WT ketika tidak ada tren yang jelas.

  3. Menggunakan pengembalian dan simulasi perdagangan untuk menemukan parameter terbaik dan mengatur stop loss yang masuk akal.

  4. Pada saat tren tidak jelas, kurangi ukuran posisi, atau jangan berdagang sementara.

Arah optimasi

Strategi ini dapat dioptimalkan lebih lanjut dari beberapa arah:

  1. Uji berbagai kombinasi dari moving average dan WT untuk menemukan titik keseimbangan yang lebih baik.

  2. Menambahkan penilaian indikator lainnya, seperti indikator getaran, Bollinger Bands, dan lain-lain, untuk meningkatkan akurasi keputusan.

  3. Pengaturan parameter yang dioptimalkan, mencari kombinasi parameter yang optimal melalui pengukuran dan simulasi. Program pengoptimalan parameter dapat dibuat untuk mencari parameter yang optimal dengan cepat.

  4. Optimalkan strategi stop loss, seperti penggunaan stop loss bergerak, stop loss berosilasi, dan stop loss jarak dekat dan jarak jauh, untuk mengurangi kemungkinan stop loss yang dipicu.

  5. Optimalkan strategi manajemen posisi, secara proaktif mengurangi frekuensi perdagangan dan ukuran posisi ketika tren tidak jelas, mengurangi risiko.

  6. Menambahkan teknologi canggih seperti pembelajaran mesin untuk membuat keputusan perdagangan yang lebih cerdas dan beradaptasi dengan parameter.

Meringkaskan

Strategi ini mengintegrasikan Hull MA Smooth Moving Average dan WT Indikator cross-feature, serta penilaian tren dan keuntungan cross-verifikasi. Berdagang dengan asumsi memastikan arah yang benar, dapat mengontrol risiko secara efektif. Dengan cara mengoptimalkan pengaturan parameter, strategi stop-loss, manajemen posisi, dan lain-lain, dapat meningkatkan stabilitas dan efektivitas strategi.

Kode Sumber Strategi
/*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 ///