Terobosan garis tren ganda, strategi kuantitatif persilangan

ATR SMA
Tanggal Pembuatan: 2024-12-20 14:26:41 Akhirnya memodifikasi: 2024-12-20 14:26:41
menyalin: 1 Jumlah klik: 427
1
fokus pada
1617
Pengikut

Terobosan garis tren ganda, strategi kuantitatif persilangan

Tinjauan Strategi

Strategi ini adalah sistem perdagangan cerdas yang didasarkan pada beberapa trend line breakout. Strategi ini secara dinamis mengidentifikasi titik-titik resistensi pendukung utama, menghitung garis tren dalam kombinasi dengan berbagai indikator teknis, dan melakukan perdagangan ketika harga menembus garis tren. Strategi ini tidak hanya dapat menangkap titik-titik perubahan tren pasar, tetapi juga dapat beradaptasi dengan lingkungan pasar yang berbeda melalui pengoptimalan parameter.

Prinsip Strategi

Logika inti dari strategi ini terdiri dari tiga bagian utama: pertama, identifikasi titik tinggi dan rendah yang penting melalui periode lookback, yang membentuk titik resistensi dukungan awal; kedua, secara dinamis menghitung kemiringan garis tren, sesuai dengan metode perhitungan yang dipilih (ATR, standard deviation atau linear regression), yang memungkinkan garis tren untuk beradaptasi lebih baik dengan fluktuasi pasar; dan terakhir, dengan memantau hubungan harga dengan garis tren, memicu sinyal perdagangan ketika terjadi terobosan. Sistem ini juga mencakup mekanisme untuk mencegah over-modeling dari pengemasan ulang, yang mensimulasikan lingkungan perdagangan nyata dengan parameter backpainting.

Keunggulan Strategis

  1. Adaptif: Strategi dapat beradaptasi dengan berbagai kondisi pasar dengan berbagai metode perhitungan slope dan parameter yang dapat disesuaikan
  2. Pengendalian risiko yang lebih baik: kemampuan untuk menyesuaikan garis tren secara dinamis dapat membantu mengidentifikasi perubahan tren secara tepat waktu dan mengurangi kerugian akibat terobosan palsu
  3. Efek visual yang baik: Strategi memberikan umpan balik visual yang jelas, termasuk perpanjangan garis tren dan penembusan tanda
  4. Mekanisme Konfirmasi Sinyal: Memastikan keandalan sinyal perdagangan melalui verifikasi multi-kondisi

Risiko Strategis

  1. Pasar yang bergejolak bisa menghasilkan sinyal palsu
  2. Keterlambatan dalam perhitungan garis tren dapat menyebabkan keterlambatan waktu masuk
  3. Pilihan parameter yang tidak tepat dapat menyebabkan overtrading atau kehilangan peluang penting
  4. Sinyal-sinyal palsu yang mungkin sering terjadi dalam pasar horizontal

Arah optimasi strategi

  1. Masukkan indikator volume lalu lintas untuk memvalidasi terobosan
  2. Tambahkan filter volatilitas pasar untuk menyesuaikan parameter selama volatilitas tinggi
  3. Integrasi dengan indikator teknis lainnya untuk meningkatkan akurasi sinyal
  4. Mengembangkan mekanisme penyesuaian parameter adaptif
  5. Metode Perhitungan Cerdas untuk Meningkatkan Stop Loss dan Profitabilitas

Meringkaskan

Strategi ini membangun sistem perdagangan yang dapat diandalkan untuk menembus garis tren dengan menggunakan beberapa metode analisis teknis secara komprehensif. Kelebihannya adalah kemampuan untuk secara dinamis beradaptasi dengan perubahan pasar sambil memberikan sinyal perdagangan yang jelas. Meskipun ada beberapa risiko yang melekat, stabilitas dan profitabilitas strategi dapat ditingkatkan secara signifikan dengan pengaturan parameter yang masuk akal dan pengoptimalan berkelanjutan.

Kode Sumber Strategi
/*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")