Sumber dimuat naik... memuat...

Strategi Kuantitatif Multi-Trendline Breakout Momentum

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

img

Ringkasan Strategi

Strategi ini adalah sistem perdagangan pintar berdasarkan pelbagai trendline breakout. Ia secara dinamik mengenal pasti tahap sokongan dan rintangan utama, menggabungkan beberapa penunjuk teknikal untuk mengira cerun trendline, dan melaksanakan perdagangan apabila harga memecahkan trendline. Strategi ini bukan sahaja menangkap titik perubahan trend pasaran tetapi juga boleh dioptimumkan untuk menyesuaikan diri dengan keadaan pasaran yang berbeza.

Prinsip Strategi

Logik teras merangkumi tiga komponen utama: Pertama, ia mengenal pasti paras tertinggi dan terendah utama menggunakan tempoh melihat kembali untuk menubuhkan tahap sokongan dan rintangan awal; Kedua, ia secara dinamik mengira cerun garis trend berdasarkan kaedah yang dipilih (ATR, Penyimpangan Standard, atau Regresi Linear) untuk menyesuaikan diri dengan lebih baik dengan turun naik pasaran; Akhirnya, ia memantau hubungan harga dengan garis trend dan mencetuskan isyarat perdagangan apabila pecah. Sistem ini juga merangkumi mekanisme untuk mencegah overfit backtest melalui parameter backpainting, mensimulasikan keadaan perdagangan sebenar.

Kelebihan Strategi

  1. Kebolehsesuaian yang tinggi: Melalui pelbagai kaedah pengiraan cerun dan parameter yang boleh disesuaikan, strategi dapat disesuaikan dengan persekitaran pasaran yang berbeza
  2. Kawalan Risiko yang kukuh: Keupayaan penyesuaian dinamik garis trend membantu mengenal pasti perubahan trend dengan segera, mengurangkan kerugian daripada pecah palsu
  3. Visualisasi yang sangat baik: Strategi memberikan maklum balas visual yang jelas, termasuk sambungan trendline dan penanda pecah
  4. Mekanisme Pengesahan Isyarat: Menggunakan pengesahan pelbagai keadaan untuk memastikan kebolehpercayaan isyarat dagangan

Risiko Strategi

  1. Boleh menghasilkan isyarat palsu semasa turun naik pasaran yang melampau
  2. Latensi pengiraan trendline mungkin membawa kepada titik kemasukan yang sedikit tertunda
  3. Pemilihan parameter yang tidak betul boleh menyebabkan perdagangan berlebihan atau kehilangan peluang penting
  4. Isyarat pecah palsu yang kerap boleh berlaku di pasaran pelbagai

Arahan Pengoptimuman Strategi

  1. Memasukkan penunjuk jumlah untuk mengesahkan kesahihan pecah
  2. Tambah penapis turun naik pasaran untuk menyesuaikan parameter semasa tempoh turun naik yang tinggi
  3. Mengintegrasikan penunjuk teknikal tambahan untuk meningkatkan ketepatan isyarat
  4. Membangunkan mekanisme penyesuaian parameter adaptif
  5. Melaksanakan kaedah pengiraan stop-loss dan mengambil keuntungan yang pintar

Ringkasan

Strategi ini membina sistem perdagangan trendline breakout yang boleh dipercayai dengan menggunakan pelbagai kaedah analisis teknikal secara komprehensif. Kekuatannya terletak pada keupayaan untuk menyesuaikan diri secara dinamik dengan perubahan pasaran sambil memberikan isyarat perdagangan yang jelas. Walaupun terdapat beberapa risiko yang wujud, kestabilan dan keuntungan strategi dapat ditingkatkan dengan ketara melalui tetapan parameter yang betul dan pengoptimuman berterusan.


/*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 lanjut