
Chiến lược này tạo ra tín hiệu giao dịch dựa trên sự đột phá của khối lượng di chuyển, và ý tưởng chính là quan sát sự di chuyển của giá trong một khoảng thời gian nhất định để đánh giá sự thay đổi xu hướng của giá dựa trên sự đột phá của khối lượng di chuyển.
Chiến lược này dùng để đánh giá sự di chuyển của giá bằng cách tính toán giá cao nhất và giá thấp nhất trong một khoảng thời gian nhất định, tức là giá cao và giá thấp.
Cụ thể, chiến lược sẽ tính giá cao nhất của dòng N gốc K trong quá khứ là giá cao trọng số, và giá thấp nhất của dòng M gốc K trong quá khứ là giá thấp trọng số. Khi điểm cao của dòng K hiện tại vượt quá mức cao trọng số, nó sẽ tạo ra tín hiệu làm nhiều; Khi điểm thấp của dòng K hiện tại giảm xuống mức thấp trọng số, nó sẽ tạo ra tín hiệu làm trống.
Sau khi tháo lỗ và tháo lỗ, chiến lược sẽ sử dụng ATR để thiết lập dừng lỗ và dừng lỗ theo giai đoạn trong ngày. Đồng thời, chiến lược cũng sẽ thanh toán tất cả các vị trí trong một khoảng thời gian nhất định (ví dụ: 14:55).
Chiến lược này đơn giản và hiệu quả sử dụng giá phá vỡ trong một khoảng thời gian nhất định để nắm bắt xu hướng, rất phù hợp với giao dịch ngắn trong ngày.
Có thể điều chỉnh khoảng thời gian thích hợp, hoặc kết hợp các chỉ số khác để xác định thời gian nhập cảnh
Các tham số có thể được điều chỉnh thích hợp, hoặc thêm các điều kiện lọc, chẳng hạn như chỉ số xu hướng, khối lượng giao dịch, v.v.
Có thể điều chỉnh kích thước vị thế hoặc kéo dài thời gian giữ vị trí một cách thích hợp
Điều chỉnh các tham số theo các điều kiện thị trường khác nhau hoặc tự động tối ưu hóa bằng các phương pháp như học máy
Thử các dữ liệu giá khác như giá điển hình, giá trung bình, v.v.
Điều kiện lọc như tăng khối lượng giao dịch hoặc tỷ lệ biến động
Thử các tham số khác nhau
Kết hợp các chỉ số xu hướng để xác định xu hướng
Tự động tối ưu hóa tham số bằng cách sử dụng phương pháp học máy
Mở rộng đến nhiều khoảng thời gian, thay đổi thời gian vào sân
Chiến lược này có ý tưởng tổng thể rõ ràng và đơn giản, nắm bắt xu hướng ngắn hạn bằng cách sử dụng hiệu quả đột phá di động của giá, đạt được yếu tố lợi nhuận cao hơn. Các tham số chiến lược ít hơn, dễ kiểm tra và tối ưu hóa, phù hợp với hoạt động ngắn hạn trong ngày. Mặc dù có một số vấn đề về chậm trễ và tín hiệu giả, nhưng có thể được cải thiện bằng cách điều chỉnh tham số, thêm các điều kiện lọc, v.v., có rất nhiều không gian tối ưu hóa.
/*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)