Strategi Penembusan Trend Berganda

Penulis:ChaoZhang, Tarikh: 2024-02-19 11:52:40
Tag:

img

Ringkasan

Strategi Penembusan Trend Dual mengintegrasikan pelbagai penunjuk teknikal termasuk trendline, crossover purata bergerak, dan penembusan saluran harga untuk mengenal pasti titik perubahan yang berpotensi di pasaran.

Logika Strategi

Barisan Trend

Strategi ini mula-mula menggunakan titik tinggi dan rendah untuk membahagikan trend bullish dan bearish. Apabila harga memecahkan garis trend, ia menandakan pembalikan trend yang berpotensi. Kemiringan dikira menggunakan kaedah ATR untuk mengikuti turun naik sebenar.

Rata-rata Bergerak Crossover

Strategi ini menggunakan purata bergerak jangka pendek 5 hari dan purata bergerak jangka panjang 34 hari untuk perdagangan silang pantas dan perlahan. MA pendek yang melintasi di atas MA panjang memberikan isyarat beli, sementara melintasi di bawah memberikan isyarat jual. MA pantas menangkap trend jangka pendek dan MA perlahan mengesan trend jangka panjang.

Saluran Harga

Saluran harga 5 hari juga dikonfigurasikan dalam strategi ini. Penembusan di atas band atas mencetuskan masuk panjang dan pecah di bawah band bawah mencetuskan masuk pendek untuk menangkap penembusan harga jangka pendek. Ia berfungsi dengan persilangan MA untuk menentukan kebolehpercayaan isyarat pecah.

Ketiga-tiga jenis penunjuk teknikal disatukan ke dalam satu strategi untuk membentuk mekanisme pengesahan berganda yang kukuh, mengelakkan perdagangan palsu.

Kelebihan

  1. Mengintegrasikan beberapa penunjuk untuk isyarat yang agak boleh dipercayai, mengurangkan kerugian daripada pecah palsu.

  2. MA pantas dan saluran harga menangkap perubahan trend jangka pendek dengan cepat. MA perlahan dan garis trend mengesan trend jangka panjang untuk kemasukan dan keluar yang stabil.

  3. Struktur kod yang bersih dengan parameter yang boleh diselaraskan untuk pengoptimuman di seluruh produk dan jangka masa yang berbeza.

  4. Menggabungkan pengesanan trend dan isyarat pecah untuk keuntungan dalam trend yang kuat, dan mengelakkan whipsaws di pasaran yang terhad.

Risiko

  1. Terdapat beberapa risiko pecah palsu, terutamanya dalam senario terhad julat, yang membawa kepada kerugian.

  2. Sifat penyambungan MA membawa risiko membeli puncak atau menjual bahagian bawah selepas pembalikan trend yang besar.

  3. Pelbagai penunjuk bersepadu memerlukan pengujian balik yang berat dan pengiraan untuk penyesuaian parameter.

  • Penunjuk jumlah boleh ditambah untuk pengesahan pecah, contohnya memerlukan pengembangan jumlah pada pecah.

  • Penunjuk terlalu banyak dijual/terlalu banyak dibeli menghalang senario pembelian/penjualan habis.

  • Hentikan kerugian untuk mengawal kerugian pada perdagangan palsu.

  • Pembelajaran mesin untuk mencari parameter optimum dengan cepat melalui data sejarah yang besar.

Peningkatan

  1. Tambah penapis jumlah atau RSI untuk mengesahkan perubahan trend yang boleh dipercayai, menetapkan penapis yang ketat untuk mengelakkan kerugian daripada pecah palsu.

  2. Tuning MA dan parameter saluran untuk produk yang berbeza untuk menyesuaikan ciri mereka.

  3. Tambahkan mekanisme stop loss melalui trailing stop loss, stop limit order untuk mengehadkan kerugian setiap perdagangan.

  4. Mengambil pendekatan penyesuaian untuk berdagang kurang kerap semasa pasaran yang terikat julat dan lebih kerap semasa trend yang kuat.

  5. Latih model pembelajaran mendalam untuk menjana isyarat beli / jual dan bukannya hanya menggunakan penunjuk teknikal, memanfaatkan rangkaian saraf keupayaan pengenalan corak untuk mencari strategi yang lebih ramalan.

Kesimpulan

Strategi ini membentuk sistem pengesahan berganda dengan menggabungkan beberapa penunjuk teknikal yang popular, yang mampu menangkap perubahan trend dengan berkesan dengan hasil backtest yang agak stabil.


/*backtest
start: 2024-02-11 00:00:00
end: 2024-02-18 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Scriptâ„¢ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © FinanceUpPvtLtd

//@version=5
strategy("FINANCE UP FREE STRATEGY (+919665229664)", overlay=true)

// Script 01 - Trendlines
length_tl = input.int(14, 'Swing Detection Lookback')
mult_tl = input.float(1., 'Slope', minval=0, step=.1)
calcMethod_tl = input.string('Atr', 'Slope Calculation Method', options=['Atr', 'Stdev', 'Linreg'])
backpaint_tl = input(true, tooltip='Backpainting offset displayed elements in the past. Disable backpainting to see real-time information returned by the indicator.')
upCss_tl = input(color.teal, 'Up Trendline Color', group='Style')
dnCss_tl = input(color.red, 'Down Trendline Color', group='Style')
showExt_tl = input(true, 'Show Extended Lines')

var upper_tl = 0.
var lower_tl = 0.
var slope_ph_tl = 0.
var slope_pl_tl = 0.
var offset_tl = backpaint_tl ? length_tl : 0
n_tl = bar_index
src_tl = close
ph_tl = ta.pivothigh(length_tl, length_tl)
pl_tl = ta.pivotlow(length_tl, length_tl)
slope_tl = switch calcMethod_tl
    'Atr'    => ta.atr(length_tl) / length_tl * mult_tl
    'Stdev'  => ta.stdev(src_tl, length_tl) / length_tl * mult_tl
    'Linreg' => math.abs(ta.sma(src_tl * n_tl, length_tl) - ta.sma(src_tl, length_tl) * ta.sma(n_tl, length_tl)) / ta.variance(n_tl, length_tl) / 2 * mult_tl
slope_ph_tl := ph_tl ? slope_tl : slope_ph_tl
slope_pl_tl := pl_tl ? slope_tl : slope_pl_tl
upper_tl := ph_tl ? ph_tl : upper_tl - slope_ph_tl
lower_tl := pl_tl ? pl_tl : lower_tl + slope_pl_tl
var upos_tl = 0
var dnos_tl = 0
upos_tl := ph_tl ? 0 : close > upper_tl - slope_ph_tl * length_tl ? 1 : upos_tl
dnos_tl := pl_tl ? 0 : close < lower_tl + slope_pl_tl * length_tl ? 1 : dnos_tl

// var uptl_tl = line.new(na, na, na, na, color=upCss_tl, style=line.style_dashed, extend=extend.right)
// var dntl_tl = line.new(na, na, na, na, color=dnCss_tl, style=line.style_dashed, extend=extend.right)
// if ph_tl and showExt_tl
//     uptl_tl.set_xy1(n_tl - offset_tl, backpaint_tl ? ph_tl : upper_tl - slope_ph_tl * length_tl)
//     uptl_tl.set_xy2(n_tl - offset_tl + 1, backpaint_tl ? ph_tl - slope_tl : upper_tl - slope_ph_tl * (length_tl + 1))
// if pl_tl and showExt_tl
//     dntl_tl.set_xy1(n_tl - offset_tl, backpaint_tl ? pl_tl : lower_tl + slope_pl_tl * length_tl)
//     dntl_tl.set_xy2(n_tl - offset_tl + 1, backpaint_tl ? pl_tl + slope_tl : lower_tl + slope_pl_tl * (length_tl + 1))

plot(backpaint_tl ? upper_tl : upper_tl - slope_ph_tl * length_tl, 'Upper', color=ph_tl ? na : upCss_tl, offset=-offset_tl)
plot(backpaint_tl ? lower_tl : lower_tl + slope_pl_tl * length_tl, 'Lower', color=pl_tl ? na : dnCss_tl, offset=-offset_tl)

plotshape(upos_tl > upos_tl[1] ? low : na, "Upper Break", shape.labelup, location.absolute, upCss_tl, text="B", textcolor=color.white, size=size.tiny)
plotshape(dnos_tl > dnos_tl[1] ? high : na, "Lower Break", shape.labeldown, location.absolute, dnCss_tl, text="B", textcolor=color.white, size=size.tiny)

alertcondition(upos_tl > upos_tl[1], 'Upward Breakout', 'Price broke the down-trendline upward')
alertcondition(dnos_tl > dnos_tl[1], 'Downward Breakout', 'Price broke the up-trendline downward')

// Script 02 - Channel Breakout
length_channel = input.int(title="Channel Length", minval=1, maxval=1000, defval=5)
upBound_channel = ta.highest(high, length_channel)
downBound_channel = ta.lowest(low, length_channel)
if (not na(close[length_channel]))
    strategy.entry("LE-LE", strategy.long, stop=upBound_channel + syminfo.mintick, comment="LE-LE")
strategy.entry("BECH-DE", strategy.short, stop=downBound_channel - syminfo.mintick, comment="BECH-DE")

// Script 03 - MA Cross
shortlen_ma = input.int(5, "Short MA Length", minval=1)
longlen_ma = input.int(34, "Long MA Length", minval=1)
short_ma = ta.sma(close, shortlen_ma)
long_ma = ta.sma(close, longlen_ma)
plot(short_ma, color=#FF6D00, title="Short MA")
plot(long_ma, color=#43A047, title="Long MA")
plot(ta.cross(short_ma, long_ma) ? short_ma : na, color=#2962FF, style=plot.style_cross, linewidth=4, title="Cross")


Lebih lanjut