Dual Trend Breakout Strategi

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

img

Gambaran umum

Strategi Breakout Trend Dual mengintegrasikan beberapa indikator teknis termasuk garis tren, crossover rata-rata bergerak, dan breakout saluran harga untuk mengidentifikasi titik balik potensial di pasar.

Logika Strategi

Tren garis

Strategi ini pertama-tama menggunakan pivot high dan low untuk membagi tren bullish dan bearish. Ketika harga melanggar garis tren, itu menandakan potensi pembalikan tren. Kemiringan dihitung menggunakan metode ATR untuk mengikuti fluktuasi aktual.

Rata-rata bergerak crossover

Strategi ini mengadopsi rata-rata bergerak jangka pendek 5 hari dan rata-rata bergerak jangka panjang 34 hari untuk perdagangan silang cepat dan lambat. MA pendek yang melintasi di atas MA panjang memberikan sinyal beli, sementara melintasi di bawah memberikan sinyal jual. MA cepat menangkap tren jangka pendek dan MA lambat melacak tren jangka panjang.

Saluran Harga

Sebuah saluran harga 5 hari juga dikonfigurasi dalam strategi. Patah di atas band atas memicu entri panjang dan pecah di bawah band bawah memicu entri pendek untuk menangkap harga jangka pendek.

Tiga jenis indikator teknis diintegrasikan ke dalam satu strategi untuk membentuk mekanisme konfirmasi ganda yang kuat, menghindari perdagangan palsu.

Keuntungan

  1. Mengintegrasikan beberapa indikator untuk sinyal yang relatif dapat diandalkan, mengurangi kerugian dari false breakout.

  2. MA cepat dan saluran harga menangkap perubahan tren jangka pendek dengan cepat MA lambat dan garis tren melacak tren jangka panjang untuk masuk dan keluar yang stabil.

  3. Struktur kode yang bersih dengan parameter yang dapat disesuaikan untuk optimasi di berbagai produk dan kerangka waktu.

  4. Menggabungkan pelacakan tren dan sinyal breakout untuk profitabilitas dalam tren yang kuat, dan menghindari whipsaws di pasar yang terikat rentang.

Risiko

  1. Ada beberapa risiko terjadinya kegagalan yang salah, terutama dalam skenario yang terbatas pada rentang, yang mengarah pada kerugian.

  2. Sifat keterlambatan penyeberangan MA membawa risiko membeli puncak atau menjual dasar setelah pembalikan tren besar.

  3. Beberapa indikator terintegrasi membutuhkan backtesting yang berat dan perhitungan untuk pengaturan parameter.

  • Indikator volume dapat ditambahkan untuk validasi breakout, misalnya membutuhkan perluasan volume pada breakout.

  • Indikator oversold/overbought mencegah skenario pembelian/penjualan habis.

  • Stop loss untuk mengendalikan kerugian pada perdagangan palsu.

  • Pembelajaran mesin untuk menemukan parameter optimal dengan cepat melalui data historis yang besar.

Peningkatan

  1. Tambahkan volume atau RSI filter untuk mengkonfirmasi perubahan tren yang dapat diandalkan, mengatur filter yang ketat untuk menghindari kerugian dari pecah palsu.

  2. Tune MA dan parameter saluran untuk produk yang berbeda agar sesuai dengan karakteristik mereka.

  3. Tambahkan mekanisme stop loss melalui trailing stop loss, stop limit order untuk membatasi loss per trade.

  4. Mengadopsi pendekatan adaptatif untuk berdagang kurang sering selama pasar yang terikat rentang dan lebih sering selama tren yang kuat.

  5. Latih model pembelajaran mendalam untuk menghasilkan sinyal beli/jual alih-alih hanya menggunakan indikator teknis, memanfaatkan jaringan saraf kemampuan pengenalan pola untuk menemukan strategi yang lebih prediktif.

Kesimpulan

Strategi ini membentuk sistem konfirmasi ganda dengan menggabungkan beberapa indikator teknis populer, mampu secara efektif menangkap perubahan tren dengan hasil backtest yang relatif 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 banyak