Strategi ini menggabungkan tanda silang Hull Moving Average dan WT Indicator untuk memanfaatkan kelebihan masing-masing untuk membuat keputusan yang lebih tepat dalam penilaian trend dan pilihan masa masuk.
Strategi ini terdiri daripada Hull Moving Average dan WT Indicator Cross Signal.
Hull Moving Average Bahagian, untuk menentukan arah trend dengan mengira Hull MA jangka pendek dan jangka panjang, dan mengisi warna.
Hull MA jangka pendek = WMA*WMA(n/2) - WMA(n), sqrt(n))
Hull MA jangka panjang = WMA ((WMA ((n/3))*3 - WMA(n/2), n/2)
Di mana WMA adalah purata bergerak bertimbangan. Apabila garis jangka pendek melintasi garis panjang, ia adalah isyarat bullish, jika tidak, ia adalah isyarat bearish.
Bahagian Indeks WT, untuk menentukan kemasukan dengan mengira garis rata-rata WT dan melihat persilangan garis rata-rata. Formula pengiraan adalah:
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 tahap penyimpangan harga dan EMA garis tengah saluran; WT1 adalah nilai peluruskan EMA TCI, WT2 adalah nilai SMA WT1, m biasanya mengambil 4. Apabila WT1 melintasi WT2 adalah isyarat multihead, apabila WT1 melintasi WT2 adalah isyarat kosong.
Penghakiman trend Hull MA yang digabungkan dengan isyarat silang WT boleh dimasukkan ke dalam permainan jika arah trend betul.
Strategi ini menggabungkan kelebihan Hull MA dan WT dengan beberapa kelebihan:
Hull MA dengan mengubah cara pengiraan purata bergerak, dapat menangkap trend perubahan harga dengan lebih cepat, dan dengan berkesan menyaring bunyi pasaran, menilai trend dengan tepat dan boleh dipercayai.
WT Indeks menggunakan ciri-ciri turun naik harga dalam saluran, dapat menangkap titik-titik perubahan dengan cepat, dan menghantar isyarat perdagangan yang lebih tepat.
Kedua-duanya digabungkan, kedua-dua penilaian trend dan isyarat silang dapat digunakan untuk mengawal risiko semasa kekuatan trend.
Parameter kelancaran Hull MA dan parameter penunjuk WT boleh disesuaikan dan dapat disesuaikan dan dioptimumkan mengikut ciri-ciri dan keutamaan perdagangan yang berbeza.
Anda boleh berdagang dengan menggunakan isyarat silang Hull MA atau WT secara berasingan, atau anda boleh berdagang dengan menggunakan isyarat silang Hull MA atau WT secara berpasangan.
Anda boleh menetapkan strategi Hentikan Kerosakan untuk mengawal risiko perdagangan tunggal.
Strategi ini mempunyai beberapa risiko utama:
Indeks Hull MA dan WT sama-sama melakukan pengendalian harga yang agak kabur, yang mungkin sedikit ketinggalan, menyebabkan waktu masuk tidak cukup tepat.
Indeks WT mudah menghasilkan isyarat palsu yang mempunyai banyak punggung dan punggung kosong, yang akan meningkatkan risiko perdagangan jika tidak digabungkan dengan penilaian trend.
Penetapan parameter yang tidak betul juga akan memberi kesan kepada hasil urus niaga, yang memerlukan ujian dan pengoptimuman berterusan berdasarkan ciri-ciri varieti.
Apabila trend bergoyang, stop loss mungkin sering tercetus dan menyebabkan kerugian kepada perdagangan.
Menghadapi risiko boleh dioptimumkan dan dipertingkatkan dengan:
Menyesuaikan parameter Hull MA dan WT untuk mencari titik keseimbangan terbaik. Anda juga boleh menguji penggunaan indikator lain dengan kombinasi Hull MA.
Menambah mekanisme penilaian trend, mengelakkan isyarat salah WT apabila tiada trend yang jelas.
Menggunakan pengesanan semula dan perdagangan simulasi untuk mencari parameter terbaik dan menetapkan marjin stop loss yang munasabah.
Apabila trend tidak jelas, kurangkan saiz kedudukan atau tidak berdagang sementara.
Strategi ini boleh dioptimumkan dengan cara berikut:
Uji gabungan purata bergerak yang berbeza dengan WT untuk mencari titik keseimbangan yang lebih baik. Seperti KAMA, TEMA dan sebagainya.
Menambah penilaian indikator lain, seperti indikator getaran, Bollinger Bands, dan lain-lain, untuk meningkatkan ketepatan keputusan.
Pengaturan parameter optimum, mencari kombinasi parameter terbaik melalui pengesanan balik dan simulasi. Program pengoptimuman parameter boleh dibina untuk mencari parameter optimum dengan cepat.
Mengoptimumkan strategi hentikan kerugian, seperti penggunaan hentikan bergerak, hentikan getaran, hentikan dekat dan jauh, dan lain-lain, untuk mengurangkan kemungkinan hentikan kerugian yang dicetuskan.
Mengoptimumkan strategi pengurusan kedudukan, secara proaktif mengurangkan frekuensi perdagangan dan saiz kedudukan apabila trend tidak jelas, mengurangkan risiko.
Menambah teknologi canggih seperti pembelajaran mesin untuk membuat keputusan perdagangan yang lebih bijak dan menyesuaikan parameter.
Strategi ini mengintegrasikan Hull MA rata-rata bergerak yang lancar dan WT ciri-ciri penyambung indikator, serta penilaian trend dan keunggulan pengesahan silang. Melakukan perdagangan dengan memastikan arah yang betul, risiko dapat dikawal dengan berkesan. Dengan cara menetapkan parameter yang dioptimumkan, strategi hentikan kerugian, dan pengurusan kedudukan, anda dapat meningkatkan lagi kestabilan dan keberkesanan perdagangan 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 ///