Sumber daya yang dimuat... Pemuatan...

Multi-Trendline Breakout Momentum Strategi Kuantitatif

Penulis:ChaoZhang, Tanggal: 2024-12-20 14:26:41
Tag:ATRSMA

img

Tinjauan Strategi

Strategi ini adalah sistem perdagangan cerdas yang didasarkan pada beberapa trendline breakout. Ini secara dinamis mengidentifikasi level support dan resistance utama, menggabungkan beberapa indikator teknis untuk menghitung kemiringan trendline, dan mengeksekusi perdagangan ketika harga menembus trendline. Strategi ini tidak hanya menangkap titik balik tren pasar tetapi juga dapat dioptimalkan untuk beradaptasi dengan kondisi pasar yang berbeda.

Prinsip Strategi

Logika inti mencakup tiga komponen utama: Pertama, ia mengidentifikasi titik tertinggi dan terendah utama menggunakan periode lookback untuk menetapkan tingkat dukungan dan resistensi awal; Kedua, secara dinamis menghitung kemiringan garis tren berdasarkan metode yang dipilih (ATR, Penyimpangan Standar, atau Regresi Linear) untuk lebih beradaptasi dengan volatilitas pasar; Akhirnya, ia memantau hubungan harga dengan garis tren dan memicu sinyal perdagangan pada saat pecah. Sistem ini juga mencakup mekanisme untuk mencegah overfit backtest melalui parameter backpainting, mensimulasikan kondisi perdagangan nyata.

Keuntungan Strategi

  1. Adaptabilitas tinggi: Melalui beberapa metode perhitungan kemiringan dan parameter yang dapat disesuaikan, strategi dapat beradaptasi dengan lingkungan pasar yang berbeda
  2. Pengendalian Risiko yang Kuat: Kemampuan penyesuaian dinamis garis tren membantu mengidentifikasi perubahan tren dengan cepat, mengurangi kerugian dari pecah palsu
  3. Visualisasi yang sangat baik: Strategi memberikan umpan balik visual yang jelas, termasuk ekstensi garis tren dan penanda pecah
  4. Mekanisme Konfirmasi Sinyal: Menggunakan verifikasi kondisi ganda untuk memastikan keandalan sinyal perdagangan

Risiko Strategi

  1. Dapat menghasilkan sinyal palsu selama volatilitas pasar yang ekstrim
  2. Latensi perhitungan garis tren dapat menyebabkan titik masuk sedikit tertunda
  3. Pemilihan parameter yang tidak tepat dapat mengakibatkan overtrading atau kehilangan peluang penting
  4. Sinyal pecah palsu yang sering dapat terjadi di pasar yang berbeda

Arah Optimasi Strategi

  1. Menggabungkan indikator volume untuk memverifikasi validitas penyusutan
  2. Tambahkan filter volatilitas pasar untuk menyesuaikan parameter selama periode volatilitas tinggi
  3. Mengintegrasikan indikator teknis tambahan untuk meningkatkan akurasi sinyal
  4. Mengembangkan mekanisme penyesuaian parameter adaptif
  5. Mengimplementasikan metode perhitungan stop loss dan profit taking yang cerdas

Ringkasan

Strategi ini membangun sistem perdagangan trendline breakout yang dapat diandalkan dengan memanfaatkan berbagai metode analisis teknis secara komprehensif. Kekuatannya terletak pada kemampuan untuk beradaptasi secara dinamis dengan perubahan pasar sambil memberikan sinyal perdagangan yang jelas. Meskipun ada beberapa risiko yang melekat, stabilitas dan profitabilitas strategi dapat ditingkatkan secara signifikan melalui pengaturan parameter yang tepat dan optimasi berkelanjutan.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-18 08:00:00
period: 1d
basePeriod: 1d
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/
// © Alexgoldhunter

//@version=5
strategy("Trendlines with Breaks Strategy [AlexGoldHunter]", overlay=true)

// Input parameters
length = input.int(14, title="Swing Detection Lookback")
mult = input.float(1.0, title="Slope", minval=0, step=0.1)
calcMethod = input.string('Atr', title="Slope Calculation Method", options=['Atr','Stdev','Linreg'])
backpaint = input(true, tooltip='Backpainting offset displayed elements in the past. Disable backpainting to see real-time information returned by the indicator.')

// Style settings
upCss = input.color(color.teal, title="Up Trendline Color", group="Style")
dnCss = input.color(color.red, title="Down Trendline Color", group="Style")
showExt = input(true, title="Show Extended Lines")

// Calculations
var upper = 0.0
var lower = 0.0
var slope_ph = 0.0
var slope_pl = 0.0

var offset = backpaint ? length : 0

n = bar_index
src = close

ph = ta.pivothigh(length, length)
pl = ta.pivotlow(length, length)

// Slope Calculation Method
slope = switch calcMethod
    'Atr'    => ta.atr(length) / length * mult
    'Stdev'  => ta.stdev(src, length) / length * mult
    'Linreg' => math.abs(ta.sma(src * n, length) - ta.sma(src, length) * ta.sma(n, length)) / ta.variance(n, length) / 2 * mult

// Get slopes and calculate trendlines
slope_ph := ph ? slope : slope_ph
slope_pl := pl ? slope : slope_pl

upper := ph ? ph : upper - slope_ph
lower := pl ? pl : lower + slope_pl

var upos = 0
var dnos = 0
upos := ph ? 0 : close > upper - slope_ph * length ? 1 : upos
dnos := pl ? 0 : close < lower + slope_pl * length ? 1 : dnos

// Extended Lines
// var uptl  = line.new(na, na, na, na, color=upCss, style=line.style_dashed, extend=extend.right)
// var dntl  = line.new(na, na, na, na, color=dnCss, style=line.style_dashed, extend=extend.right)

// if ph and showExt
//     uptl.set_xy1(n - offset, backpaint ? ph : upper - slope_ph * length)
//     uptl.set_xy2(n - offset + 1, backpaint ? ph - slope : upper - slope_ph * (length + 1))

// if pl and showExt
//     dntl.set_xy1(n - offset, backpaint ? pl : lower + slope_pl * length)
//     dntl.set_xy2(n - offset + 1, backpaint ? pl + slope : lower + slope_pl * (length + 1))

// Plots
plot(backpaint ? upper : upper - slope_ph * length, title="Upper", color=ph ? na : upCss, offset=-offset)
plot(backpaint ? lower : lower + slope_pl * length, title="Lower", color=pl ? na : dnCss, offset=-offset)

// Breakouts
plotshape(upos > upos[1] ? low : na, title="Upper Break", 
  style=shape.labelup, location=location.absolute, color=upCss, text="alex_buy_now", textcolor=color.white, size=size.tiny)
plotshape(dnos > dnos[1] ? high : na, title="Lower Break", 
  style=shape.labeldown, location=location.absolute, color=dnCss, text="alex_sell_now", textcolor=color.white, size=size.tiny)

// Strategy: Buy and Sell conditions
if (upos > upos[1])
    strategy.entry("Buy", strategy.long)
if (dnos > dnos[1])
    strategy.entry("Sell", strategy.short)

// Alerts
alertcondition(upos > upos[1], title="Upward Breakout", message="Price broke the down-trendline upward")
alertcondition(dnos > dnos[1], title="Downward Breakout", message="Price broke the up-trendline downward")


Berkaitan

Lebih banyak