
Strategi ini menghasilkan isyarat dagangan berdasarkan pergerakan kuantiti yang bergerak, idea utamanya adalah untuk melihat pergerakan harga dalam tempoh masa yang ditetapkan dan menilai perubahan trend harga berdasarkan pergerakan kuantiti yang bergerak.
Strategi ini menilai pergerakan harga dengan mengira harga tertinggi dan terendah dalam tempoh masa tertentu, iaitu tinggi dan rendah.
Khususnya, strategi akan mengira 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. Apabila titik tertinggi pada garis K semasa melebihi pivot high, ia akan menghasilkan isyarat melakukan banyak; apabila titik rendah pada garis K semasa jatuh di bawah pivot low, ia akan menghasilkan isyarat melakukan kosong.
Selepas melakukan over dan short, strategi akan menggunakan ATR untuk menetapkan stop loss, dan berhenti secara beransur-ansur dalam hari. Pada masa yang sama, strategi juga akan membersihkan semua kedudukan dalam tempoh masa tertentu (misalnya 14:55).
Strategi ini mudah dan berkesan menggunakan harga untuk menangkap trend dalam jangka masa tertentu, sangat sesuai untuk perdagangan jangka pendek dalam sehari.
Tempoh masa boleh diselaraskan dengan sewajarnya, atau gabungan penunjuk lain untuk menentukan masa masuk
Anda boleh menyesuaikan parameter atau menambah syarat penapisan seperti trend indicator, volume transaksi dan sebagainya.
Anda boleh menyesuaikan saiz kedudukan anda atau memanjangkan tempoh kedudukan anda dengan sewajarnya.
Parameter harus disesuaikan mengikut keadaan pasaran yang berbeza, atau mengoptimumkan secara automatik dengan kaedah pembelajaran mesin
Cuba data harga lain seperti harga tipikal, harga purata dan sebagainya
Syarat penapisan seperti peningkatan jumlah atau kadar turun naik
Cuba kombinasi parameter yang berbeza
Menentukan arah trend dengan menggunakan penunjuk trend
Mengoptimumkan parameter secara automatik menggunakan kaedah pembelajaran mesin
Meluas ke beberapa tempoh masa, gantikan masa masuk ke tempat
Strategi ini mempunyai pemikiran keseluruhan yang jelas dan ringkas, dengan memanfaatkan harga yang bergerak untuk menangkap trend jangka pendek, faktor keuntungan yang lebih tinggi dicapai. Terdapat sedikit parameter strategi, mudah diuji dan dioptimumkan, sesuai untuk operasi garis pendek dalam sehari. Walaupun terdapat beberapa tahap ketinggalan dan masalah isyarat palsu, tetapi dapat diperbaiki dengan cara seperti penyesuaian parameter, penambahan syarat penapis, dan banyak ruang untuk pengoptimuman.
/*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)