Trading Trendline Real-time Berdasarkan Titik Pivot dan Slope

Penulis:ChaoZhangTanggal: 2024-04-26 15:34:28
Tag:ATRADXMA

img

Gambaran umum

Strategi ini menggunakan titik pivot (PivotHigh dan PivotLow) untuk mengidentifikasi swing high dan low dalam harga dan menggambar garis tren ke atas dan ke bawah berdasarkan titik-titik ini. kemiringan garis tren dihitung menggunakan metode seperti ATR (Average True Range), standar deviasi, atau regresi linier, dan kemudian disesuaikan dengan faktor kemiringan.

Prinsip Strategi

  1. Gunakan fungsi ta.pivothigh (() dan ta.pivotlow (()) untuk mendeteksi swing high (ph) dan swing lows (pl) selama periode pencarian tertentu.
  2. Hitung kemiringan garis tren berdasarkan metode perhitungan yang dipilih (ATR, standar deviasi, atau regresi linier) dan sesuaikan dengan perkalian dengan faktor kemiringan (mult).
  3. Menggunakan harga kemiringan dan titik pivot, hitung nilai saat ini dari garis tren naik (atas) dan garis tren turun (bawah).
  4. Tentukan apakah harga penutupan saat ini telah menembus garis tren: jika harga penutupan berada di atas garis tren naik, sinyal breakout naik dihasilkan; jika harga penutupan berada di bawah garis tren turun, sinyal breakout turun dihasilkan.
  5. Gambarkan garis tren pada grafik, dengan opsi untuk memperpanjang garis.
  6. Perdagangan berdasarkan sinyal breakout: pergi panjang pada breakout naik dan pergi pendek pada breakout turun.

Keuntungan Strategi

  1. Strategi ini menghasilkan sinyal perdagangan berdasarkan fakta obyektif dari perilaku harga (titik pivot dan garis tren), memberikan tingkat keandalan dan stabilitas.
  2. Kemiringan garis tren dapat disesuaikan secara dinamis berdasarkan volatilitas pasar, menyesuaikan dengan kondisi pasar yang berbeda.
  3. Pengguna dapat secara fleksibel memilih metode perhitungan kemiringan dan pengaturan parameter untuk mengoptimalkan kinerja strategi.
  4. Strategi ini menyediakan modus sinyal real-time dan tertunda untuk memenuhi kebutuhan pengguna yang berbeda.
  5. Fungsi peringatan built-in dapat membantu pengguna menangkap peluang perdagangan tepat waktu.

Risiko Strategi

  1. Di pasar yang bergolak atau ketika tren tidak jelas, strategi dapat menghasilkan sinyal palsu yang sering, yang menyebabkan penurunan profitabilitas.
  2. Kinerja strategi tergantung pada pengaturan parameter; parameter yang tidak tepat dapat menyebabkan strategi gagal atau menghasilkan perdagangan yang berlebihan.
  3. Dalam mode sinyal tertunda, karena adanya backtesting, hasil perdagangan yang sebenarnya mungkin berbeda dari hasil tes historis.

Arah Optimasi Strategi

  1. Memperkenalkan lebih banyak indikator teknis atau fitur perilaku harga, seperti volume perdagangan dan volatilitas, untuk membantu mengkonfirmasi sinyal trendline breakout dan meningkatkan kualitas sinyal.
  2. Filter sinyal perdagangan dengan mempertimbangkan faktor-faktor seperti durasi dan besarnya trendline breakout untuk mengurangi sinyal palsu.
  3. Mengoptimalkan manajemen posisi dan pengendalian risiko, seperti menyesuaikan ukuran posisi secara dinamis berdasarkan kekuatan tren atau volatilitas, dan menetapkan tingkat stop loss dan take profit yang wajar.
  4. Mengoptimalkan parameter menggunakan pembelajaran mesin atau algoritma pengoptimalan untuk menemukan kombinasi parameter terbaik.

Ringkasan

Strategi ini menggunakan titik pivot dan kemiringan garis tren untuk membangun sistem perdagangan garis tren real-time. Dengan menangkap peristiwa tren tren, strategi dapat diperdagangkan pada tahap awal pembentukan tren. Meskipun strategi ini memiliki keuntungan tertentu, masih perlu untuk menyadari risikonya di pasar yang bergolak dan lebih meningkatkan ketahanan dan profitabilitas strategi dengan memperkenalkan lebih banyak informasi, mengoptimalkan penyaringan sinyal, manajemen posisi, dan metode lainnya.


/*backtest
start: 2023-04-20 00:00:00
end: 2024-04-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(" only Ajay ", overlay=true)

//------------------------------------------------------------------------------
//Settings
//------------------------------------------------------------------------------{
length = input.int(14, 'Swing Detection Lookback')
mult = input.float(1., 'Slope', minval = 0, step = .1)
calcMethod = input.string('Atr', '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
upCss = input.color(color.teal, 'Up Trendline Color', group = 'Style')
dnCss = input.color(color.red, 'Down Trendline Color', group = 'Style')
showExt = input(true, 'Show Extended Lines')

//------------------------------------------------------------------------------}
//Calculations
//------------------------------------------------------------------------------{
var upper = 0.
var lower = 0.
var slope_ph = 0.
var slope_pl = 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, 'Upper', color = ph ? na : upCss, offset = -offset)
plot(backpaint ? lower : lower + slope_pl * length, 'Lower', color = pl ? na : dnCss, offset = -offset)

//Breakouts
upBreakout = upos > upos[1]
dnBreakout = dnos > dnos[1]

if (upBreakout)
    strategy.entry("Up Breakout", strategy.long)

if (dnBreakout)
    strategy.entry("Down Breakout", strategy.short)

//------------------------------------------------------------------------------}
//Alerts
//------------------------------------------------------------------------------{
alertcondition(upos > upos[1], 'Upward Breakout', 'Price broke the down-trendline upward')
alertcondition(dnos > dnos[1], 'Downward Breakout', 'Price broke the up-trendline downward')

//------------------------------------------------------------------------------}


Berkaitan

Lebih banyak