Strategi Penembusan Pivot Intraday

Penulis:ChaoZhang, Tarikh: 2023-11-03 16:35:15
Tag:

img

Ringkasan

Strategi ini menjana isyarat perdagangan berdasarkan penembusan harga dalam tempoh masa tertentu.

Logika Strategi

Strategi ini mengira harga tertinggi dan terendah tertinggi dalam satu jangka masa tertentu, yang dikenali sebagai pivot tinggi dan pivot rendah, untuk mengukur pergerakan harga.

Secara khusus, ia mengira tertinggi tertinggi N bar yang lalu sebagai tinggi pusingan dan terendah terendah M bar yang lalu sebagai rendah pusingan. Isyarat panjang dihasilkan apabila bar bar semasa tinggi pecah di atas tinggi pusingan. Isyarat pendek dihasilkan apabila bar bar semasa rendah pecah di bawah rendah pusingan.

Selepas masuk, strategi menggunakan ATR untuk stop loss dan stop loss intraday. Ia juga menutup semua kedudukan pada jangka masa tertentu (contohnya 14:55).

Strategi ini berkesan menangkap trend menggunakan harga mudah pecah dalam tempoh tertentu, menjadikannya sesuai untuk perdagangan intraday. Logiknya jelas dan mudah dilaksanakan.

Kelebihan

  • Mencatatkan perubahan trend dengan boleh dipercayai menggunakan harga pecah
  • Pelaksanaan mudah dengan data OHLC asas
  • Menguruskan risiko stop loss dan intraday stop loss yang munasabah
  • Mengelakkan risiko overnight yang sesuai untuk perdagangan intraday
  • Beberapa parameter mudah untuk mengoptimumkan

Risiko dan Pengurangan

  • Potensi kelewatan, mungkin terlepas permulaan trend awal

    Sesuaikan jangka masa atau menggabungkan penunjuk lain untuk kemasukan

  • Lebih banyak isyarat palsu apabila trend tidak jelas

    Tune parameter, tambah penapis seperti penunjuk, kelantangan dan lain-lain

  • Kos modal yang lebih tinggi untuk dagangan intraday aktif

    Sesuaikan saiz kedudukan, memanjangkan tempoh penahan

  • Kepercayaan pada pengoptimuman parameter

    Sesuaikan parameter dengan perubahan keadaan pasaran menggunakan pembelajaran mesin dan lain-lain

Peluang Peningkatan

  • Uji data harga lain seperti harga biasa, harga median dan lain-lain.

  • Tambah penapis seperti jumlah, turun naik

  • Cuba kombinasi parameter yang berbeza

  • Menggabungkan penunjuk trend untuk menentukan arah

  • Mengoptimumkan parameter secara automatik menggunakan pembelajaran mesin

  • Memperluas ke pelbagai bingkai masa untuk kemasukan yang lebih baik

Kesimpulan

Strategi ini mempunyai logik yang jelas dan ringkas, dengan berkesan memanfaatkan penembusan harga untuk menangkap trend jangka pendek dengan faktor keuntungan yang baik. Dengan beberapa parameter yang mudah disesuaikan untuk ujian dan pengoptimuman, ia sangat sesuai untuk perdagangan intraday. Walaupun kelewatan dan isyarat palsu wujud, mereka boleh ditangani melalui penyesuaian parameter, menambah penapis dll. Strategi ini menyediakan kerangka perdagangan berasaskan penembusan yang mantap dengan ruang pengoptimuman yang banyak.


/*backtest
start: 2022-10-27 00:00:00
end: 2023-11-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//   ____________        _________           _____________
//  |____________|      ||________|          ||__________|
//       ||             ||        ||         ||
//       ||             ||________||         ||
//       ||     H E     ||________   U L L   ||       H A R T I S T
//       ||             ||        ||         ||
//       ||             ||________||         ||__________
//       ||             ||________|          ||__________|
  
//@version=5
// strategy("PIVOT STRATEGY [5MIN TF]",overlay=true ,commission_type = strategy.cash, commission_value = 30 , slippage = 2, default_qty_value = 60, currency = currency.NONE, pyramiding = 0)
leftbars = input(defval = 10)
rightbars = input(defval = 15)

// ═══════════════════════════ //
// ——————————> INPUTS <——————— //
// ═══════════════════════════ //

EMA1 = input.int(title='PRICE CROSS EMA', defval = 150, minval = 10 ,maxval = 400)
factor1 = input.float(title='_ATR LONG',defval = 3.2 , minval = 1 , maxval = 5 , step = 0.1, tooltip = "ATR TRAIL LONG")
factor2 = input.float(title='_ATR SHORT',defval = 3.2 , minval = 1 , maxval = 5 , step = 0.1, tooltip = "ATR TRAIL SHORT")
risk = input.float(title='RISK',defval = 200 , minval = 1 , maxval = 5000 , step = 50, tooltip = "RISK PER TRADE")

var initialCapital = strategy.equity
t = time(timeframe.period, '0935-1400:1234567')
time_cond = true

// ══════════════════════════════════ //
// ———————————> EMA DATA <——————————— //
// ══════════════════════════════════ //
ema1 = ta.ema(close, EMA1)

plot(ema1, color=color.new(color.yellow, 0), style=plot.style_linebr, title='ema1')

// ══════════════════════════════════ //
// ————————> TRAIL DATA <———————————— //
// ══════════════════════════════════ //
// *******Calculate LONG TRAIL data*****
ATR_LO = ta.atr(14)*factor1

// *******Calculate SHORT TRAIL data*****
ATR_SH = ta.atr(14)*factor2

longStop = close - ATR_LO
shortStop = close + ATR_SH

// Plot atr data
//plot(longStop, color=color.new(color.green, 0), style=plot.style_linebr, title='Long Trailing Stop')
//plot(shortStop , color=color.new(color.red, 0), style=plot.style_linebr, title='Short Trailing Stop')

// ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ //
// ————————————————————————————————————————————————————————> PIVOT DATA <———————————————————————————————————————————————————————————————————————————————————————————————————— //
// ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ //

ph = ta.pivothigh(close,leftbars, rightbars)
pl = ta.pivotlow(close,leftbars, rightbars)

pvt_condition1 = not na(ph)

upper_price = 0.0
upper_price := pvt_condition1 ? ph : upper_price[1]

pvt_condition2 = not na(pl)

lower_price = 0.0
lower_price := pvt_condition2 ? pl : lower_price[1]

// Signals
long  = ta.crossover(high, upper_price + syminfo.mintick)
short = ta.crossunder(low, lower_price - syminfo.mintick)

plot(upper_price, color= close > ema1  ? color.green : na, style=plot.style_line, title='PH')

plot(lower_price,  color= close <  ema1  ? color.red : na, style=plot.style_line, title='PL')


// ══════════════════════════════════//
// ————————> LONG POSITIONS <————————//
// ══════════════════════════════════//
//******barinstate.isconfirmed used to avoid repaint in real time*******

if ( long and strategy.opentrades==0 and barstate.isconfirmed and time_cond and close >= ema1 )
    strategy.entry(id= "Long" ,direction = strategy.long, comment = "B")
    
//plot(longStop , color=color.new(color.blue, 0), style=plot.style_linebr, title='long Stop')

if strategy.position_size > 0 
    strategy.exit("long tsl", "Long" , stop = longStop ,comment='S')
 

// ═════════════════════════════════════//
// ————————> SHORT POSITIONS <————————— //
// ═════════════════════════════════════//
if ( short and strategy.opentrades==0 and barstate.isconfirmed and time_cond and close <= ema1 )
    strategy.entry(id = "Short" ,direction = strategy.short,  comment = "S") 

if strategy.position_size < 0
    strategy.exit("short tsl", "Short" ,  stop = shortStop ,comment='B')

// ════════════════════════════════════════════════//
// ————————> CLOSE ALL POSITIONS BY 3PM <————————— //
// ════════════════════════════════════════════════//
strategy.close_all(when = hour == 14 and minute == 55)

// ════════════════════════════════════════//
// ————————> MAX INTRADAY LOSS  <————————— //
// ════════════════════════════════════════//
// strategy.risk.max_intraday_loss(type = strategy.cash, value = risk)



Lebih lanjut