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.
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.
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 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.
Mengintegrasikan beberapa penunjuk untuk isyarat yang agak boleh dipercayai, mengurangkan kerugian daripada pecah palsu.
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.
Struktur kod yang bersih dengan parameter yang boleh diselaraskan untuk pengoptimuman di seluruh produk dan jangka masa yang berbeza.
Menggabungkan pengesanan trend dan isyarat pecah untuk keuntungan dalam trend yang kuat, dan mengelakkan whipsaws di pasaran yang terhad.
Terdapat beberapa risiko pecah palsu, terutamanya dalam senario terhad julat, yang membawa kepada kerugian.
Sifat penyambungan MA membawa risiko membeli puncak atau menjual bahagian bawah selepas pembalikan trend yang besar.
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.
Tambah penapis jumlah atau RSI untuk mengesahkan perubahan trend yang boleh dipercayai, menetapkan penapis yang ketat untuk mengelakkan kerugian daripada pecah palsu.
Tuning MA dan parameter saluran untuk produk yang berbeza untuk menyesuaikan ciri mereka.
Tambahkan mekanisme stop loss melalui trailing stop loss, stop limit order untuk mengehadkan kerugian setiap perdagangan.
Mengambil pendekatan penyesuaian untuk berdagang kurang kerap semasa pasaran yang terikat julat dan lebih kerap semasa trend yang kuat.
Latih model pembelajaran mendalam untuk menjana isyarat beli / jual dan bukannya hanya menggunakan penunjuk teknikal, memanfaatkan rangkaian saraf
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")