
Strategi ini menghasilkan sinyal perdagangan berdasarkan pergerakan volume, dengan gagasan utama adalah mengamati pergerakan harga dalam jangka waktu tertentu dan menilai perubahan tren harga berdasarkan pergerakan volume.
Strategi ini menilai pergerakan harga dengan menghitung harga tertinggi dan terendah dalam periode waktu tertentu, yaitu pivot high dan pivot low.
Secara khusus, strategi ini akan menghitung harga tertinggi pada garis N-root K yang lalu sebagai pivot high, dan harga terendah pada garis M-root K yang lalu sebagai pivot low. Ketika titik tinggi pada garis K saat ini melebihi pivot high, maka akan dihasilkan sinyal do lebih; dan ketika titik rendah pada garis K saat ini jatuh di bawah pivot low, maka akan dihasilkan sinyal do kosong.
Setelah melakukan over dan short, strategi akan menggunakan ATR untuk mengatur stop loss dan melakukan stop loss bertahap dalam sehari. Selain itu, strategi juga akan melakukan posisi kosong dalam jangka waktu tertentu (misalnya 14:55).
Strategi ini sederhana dan efektif memanfaatkan harga untuk menangkap tren dalam rentang waktu tertentu, sangat cocok untuk perdagangan short-line dalam sehari.
Waktu masuk dapat disesuaikan sesuai dengan periode waktu, atau kombinasi dari indikator lain
Parameter dapat disesuaikan sesuai, atau menambahkan kondisi penyaringan, seperti indikator tren, volume transaksi, dan sebagainya
Anda dapat menyesuaikan ukuran posisi Anda atau memperpanjang jangka waktu yang sesuai.
Parameter harus disesuaikan sesuai dengan kondisi pasar yang berbeda, atau mengoptimalkan secara otomatis dengan metode seperti pembelajaran mesin
Cobalah data harga lain, seperti harga tipikal, harga rata-rata, dan lain-lain.
Kondisi penyaringan seperti peningkatan volume transaksi atau volatilitas
Mencoba kombinasi parameter yang berbeda
Mengidentifikasi arah tren dengan indikator tren
Parameter yang dioptimalkan secara otomatis menggunakan metode pembelajaran mesin
Perkembangan ke berbagai periode waktu, dan perubahan waktu masuk ke lapangan
Strategi ini memiliki konsepsi yang jelas dan ringkas, dengan memanfaatkan pergerakan harga untuk menangkap tren jangka pendek, dan menghasilkan faktor keuntungan yang lebih tinggi. Strategi ini memiliki sedikit parameter, mudah diuji dan dioptimalkan, dan cocok untuk operasi garis pendek dalam sehari. Meskipun ada tingkat keterlambatan dan masalah sinyal palsu, namun dapat ditingkatkan dengan cara penyesuaian parameter, penambahan kondisi penyaringan, dan lain-lain.
/*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)