Strategi Pivot Breakout intraday

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

img

Gambaran umum

Strategi ini menghasilkan sinyal perdagangan berdasarkan price breakout dalam periode waktu tertentu. Ide utamanya adalah untuk mengamati pergerakan harga selama periode tertentu dan menggunakan breakout dalam kisaran harga untuk menentukan perubahan tren.

Logika Strategi

Strategi ini menghitung harga tertinggi dan terendah tertinggi dalam jangka waktu tertentu, yang dikenal sebagai pivot high dan pivot low, untuk mengukur pergerakan harga.

Secara khusus, ini menghitung tertinggi dari N bar yang lalu sebagai pivot tinggi dan terendah dari M bar yang lalu sebagai pivot rendah. Sinyal panjang dihasilkan ketika bars saat ini tinggi pecah di atas pivot tinggi. Sinyal pendek dihasilkan ketika bars saat ini rendah pecah di bawah pivot rendah.

Setelah masuk, strategi menggunakan ATR untuk stop loss dan stop loss intraday.

Strategi ini secara efektif menangkap tren menggunakan price breakout sederhana selama periode tertentu, menjadikannya ideal untuk perdagangan intraday.

Keuntungan

  • Mencatatkan perubahan tren secara andal menggunakan harga yang pecah
  • Implementasi sederhana dengan data dasar OHLC
  • Manajemen risiko stop loss dan stop loss intraday yang wajar
  • Menghindari risiko overnight yang cocok untuk perdagangan intraday
  • Beberapa parameter mudah dioptimalkan

Risiko dan Pengurangan

  • Potensi keterlambatan, mungkin melewatkan awal awal tren

    Sesuaikan kerangka waktu atau gabungkan indikator lain untuk masuk

  • Lebih banyak sinyal palsu ketika tren tidak jelas

    Tune parameter, tambahkan filter seperti indikator, volume dll

  • Biaya modal yang lebih tinggi untuk perdagangan intraday aktif

    Sesuaikan ukuran posisi, perpanjang masa ditahan

  • Keandalan pada optimasi parameter

    Sesuaikan parameter dengan perubahan kondisi pasar menggunakan pembelajaran mesin dll.

Peluang Peningkatan

  • Uji data harga lainnya seperti harga rata-rata, harga median dll.

  • Tambahkan filter seperti volume, volatilitas

  • Coba kombinasi parameter yang berbeda

  • Masukkan indikator tren untuk menentukan arah

  • Otomatis mengoptimalkan parameter menggunakan pembelajaran mesin

  • Mengembangkan ke beberapa kerangka waktu untuk entri yang lebih baik

Kesimpulan

Strategi ini memiliki logika yang jelas dan ringkas, secara efektif memanfaatkan price breakout untuk menangkap tren jangka pendek dengan faktor keuntungan yang baik. Dengan beberapa parameter yang dapat disesuaikan yang mudah untuk pengujian dan pengoptimalan, itu sangat cocok untuk perdagangan intraday. Sementara lag dan sinyal palsu ada, mereka dapat ditangani melalui penyesuaian parameter, menambahkan filter dll. Strategi ini menyediakan kerangka kerja perdagangan berbasis breakout yang kuat dengan ruang pengoptimalan yang cukup.


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