Chiến lược Pivot Breakout trong ngày

Tác giả:ChaoZhang, Ngày: 2023-11-03 16:35:15
Tags:

img

Tổng quan

Chiến lược này tạo ra các tín hiệu giao dịch dựa trên sự đột phá giá trong một khoảng thời gian nhất định. Ý tưởng chính là quan sát các biến động giá trong những khoảng thời gian nhất định và sử dụng sự đột phá trong phạm vi giá để xác định sự thay đổi xu hướng.

Chiến lược logic

Chiến lược tính toán mức cao nhất và thấp nhất của giá trong một khung thời gian nhất định, được gọi là pivot high và pivot low, để đo lường chuyển động giá.

Cụ thể, nó tính toán mức cao nhất của các thanh N trong quá khứ là mức cao trung tâm và mức thấp nhất của các thanh M trong quá khứ là mức thấp trung tâm. Một tín hiệu dài được tạo ra khi mức cao của thanh hiện tại vượt qua mức cao trung tâm. Một tín hiệu ngắn được tạo ra khi mức thấp của thanh hiện tại vượt qua mức thấp trung tâm.

Sau khi vào, chiến lược sử dụng ATR để dừng lỗ và dừng lỗ trong ngày. Nó cũng đóng tất cả các vị trí trong một khung thời gian cụ thể (ví dụ: 14:55).

Chiến lược này có hiệu quả nắm bắt xu hướng bằng cách sử dụng sự đột phá giá đơn giản trong các khoảng thời gian nhất định, làm cho nó lý tưởng cho giao dịch trong ngày.

Ưu điểm

  • Nhận được sự thay đổi xu hướng một cách đáng tin cậy bằng cách sử dụng sự đột phá giá
  • Thực hiện đơn giản với dữ liệu cơ bản OHLC
  • Quản lý rủi ro dừng lỗ hợp lý và rủi ro dừng lỗ trong ngày
  • Tránh rủi ro qua đêm phù hợp với giao dịch trong ngày
  • Một số tham số dễ tối ưu hóa

Rủi ro và giảm thiểu

  • Khả năng chậm trễ, có thể bỏ lỡ sự khởi đầu xu hướng sớm

    Điều chỉnh khung thời gian hoặc kết hợp các chỉ số khác để nhập

  • Nhiều tín hiệu sai khi xu hướng không rõ ràng

    Điều chỉnh các thông số, thêm các bộ lọc như chỉ số, âm lượng vv

  • Chi phí vốn cao hơn cho giao dịch nội ngày hoạt động

    Điều chỉnh kích thước vị trí, kéo dài thời gian giữ

  • Sự dựa vào tối ưu hóa tham số

    Điều chỉnh các thông số để thay đổi điều kiện thị trường bằng cách sử dụng máy học vv

Cơ hội gia tăng

  • Kiểm tra dữ liệu giá khác như giá điển hình, giá trung bình v.v.

  • Thêm bộ lọc như khối lượng, biến động

  • Thử các kết hợp tham số khác nhau

  • Bao gồm các chỉ số xu hướng để xác định hướng

  • Tự động tối ưu hóa các tham số bằng cách sử dụng máy học

  • Mở rộng đến nhiều khung thời gian để nhập tốt hơn

Kết luận

Chiến lược này có logic rõ ràng và ngắn gọn, tận dụng hiệu quả các sự đột phá giá để nắm bắt các xu hướng ngắn hạn với các yếu tố lợi nhuận tốt. Với một số tham số có thể điều chỉnh dễ dàng để thử nghiệm và tối ưu hóa, nó rất phù hợp với giao dịch trong ngày. Trong khi sự chậm trễ và tín hiệu sai tồn tại, chúng có thể được giải quyết thông qua điều chỉnh tham số, thêm bộ lọc vv. Chiến lược cung cấp một khuôn khổ giao dịch dựa trên sự đột phá mạnh mẽ với không gian tối ưu hóa rộng rãi.


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



Thêm nữa