Perdagangan trendline masa nyata berdasarkan titik pusingan dan cerun

Penulis:ChaoZhang, Tarikh: 2024-04-26 15:34:28
Tag:ATRADXMA

img

Ringkasan

Strategi ini menggunakan titik-titik pivot (PivotHigh dan PivotLow) untuk mengenal pasti swing high dan low dalam harga dan menarik trendline ke atas dan ke bawah berdasarkan titik-titik ini. kemiringan trendline dikira menggunakan kaedah seperti ATR (Rentang Benar Purata), penyimpangan standard, atau regresi linear, dan kemudian disesuaikan dengan faktor kemiringan. Apabila harga memecahkan trendline, strategi menghasilkan isyarat beli atau jual.

Prinsip Strategi

  1. Gunakan fungsi ta.pivothigh (() dan ta.pivotlow (()) untuk mengesan swing high (ph) dan swing lows (pl) dalam tempoh kemunculan tertentu.
  2. Mengira cerun garis trend berdasarkan kaedah pengiraan yang dipilih (ATR, penyimpangan standard, atau regresi linear) dan menyesuaikannya dengan mengalikan dengan faktor cerun (mult).
  3. Menggunakan harga cerun dan titik pivot, mengira nilai semasa garis trend menaik (atas) dan trend trend (bawah).
  4. Tentukan sama ada harga penutupan semasa telah menembusi garis trend: jika harga penutupan di atas garis trend menaik, isyarat pecah menaik dihasilkan; jika harga penutupan di bawah garis trend menaik, isyarat pecah menaik dihasilkan.
  5. Merangka garis trend pada carta, dengan pilihan untuk memanjangkan garis.
  6. Perdagangan berdasarkan isyarat pecah: pergi panjang pada pecah ke atas dan pergi pendek pada pecah ke bawah.

Kelebihan Strategi

  1. Strategi menghasilkan isyarat perdagangan berdasarkan fakta objektif tingkah laku harga (titik-titik pusat dan garis trend), memberikan tahap kebolehpercayaan dan kestabilan.
  2. Kemiringan garis trend boleh diselaraskan secara dinamik berdasarkan turun naik pasaran, menyesuaikan diri dengan keadaan pasaran yang berbeza.
  3. Pengguna boleh memilih dengan fleksibel kaedah pengiraan cerun dan tetapan parameter untuk mengoptimumkan prestasi strategi.
  4. Strategi ini menyediakan kedua-dua mod isyarat masa nyata dan tertunda untuk memenuhi keperluan pengguna yang berbeza.
  5. Fungsi amaran terbina dalam dapat membantu pengguna menangkap peluang perdagangan tepat pada masanya.

Risiko Strategi

  1. Dalam pasaran yang berbelit-belit atau apabila trend tidak jelas, strategi boleh menghasilkan isyarat palsu yang kerap, yang membawa kepada penurunan keuntungan.
  2. Prestasi strategi bergantung kepada tetapan parameter; parameter yang tidak sesuai boleh menyebabkan strategi gagal atau menghasilkan perdagangan berlebihan.
  3. Dalam mod isyarat tertunda, disebabkan oleh kewujudan backtesting, hasil dagangan sebenar mungkin berbeza dari hasil ujian sejarah.

Arahan Pengoptimuman Strategi

  1. Memperkenalkan lebih banyak penunjuk teknikal atau ciri tingkah laku harga, seperti jumlah dagangan dan turun naik, untuk membantu mengesahkan isyarat pecah trendline dan meningkatkan kualiti isyarat.
  2. Menyaring isyarat perdagangan dengan mempertimbangkan faktor-faktor seperti tempoh dan besar penembusan trendline untuk mengurangkan isyarat palsu.
  3. Mengoptimumkan pengurusan kedudukan dan kawalan risiko, seperti menyesuaikan saiz kedudukan secara dinamik berdasarkan kekuatan trend atau turun naik, dan menetapkan tahap stop loss dan mengambil keuntungan yang munasabah.
  4. Mengoptimumkan parameter menggunakan pembelajaran mesin atau algoritma pengoptimuman untuk mencari kombinasi parameter terbaik.

Ringkasan

Strategi ini menggunakan titik pivot dan cerun trendline untuk membina sistem perdagangan trendline masa nyata. Dengan menangkap peristiwa pecah trendline, strategi ini dapat berdagang pada peringkat awal pembentukan trend. Walaupun strategi ini mempunyai kelebihan tertentu, masih perlu untuk menyedari risikonya di pasaran yang bergolak dan meningkatkan lagi kekuatan dan keuntungan strategi dengan memperkenalkan lebih banyak maklumat, mengoptimumkan penapisan isyarat, pengurusan kedudukan, dan kaedah lain.


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