Giao dịch đường xu hướng thời gian thực dựa trên các điểm pivot và độ dốc

Tác giả:ChaoZhang, Ngày: 2024-04-26 15:34:28
Tags:ATRADXMA

img

Tổng quan

Chiến lược này sử dụng các điểm pivot (PivotHigh và PivotLow) để xác định điểm cao và thấp trong giá và vẽ các đường xu hướng lên và xuống dựa trên các điểm này. Độ nghiêng của các đường xu hướng được tính bằng các phương pháp như ATR (Mức trung bình thực sự), độ lệch chuẩn hoặc hồi quy tuyến tính, và sau đó được điều chỉnh bằng yếu tố nghiêng. Khi giá vượt qua đường xu hướng, chiến lược tạo ra tín hiệu mua hoặc bán.

Nguyên tắc chiến lược

  1. Sử dụng các hàm ta.pivothigh (()) và ta.pivotlow (()) để phát hiện các đỉnh dao động (ph) và đáy dao động (pl) trong một khoảng thời gian nhìn lại nhất định.
  2. Tính toán độ nghiêng của đường xu hướng dựa trên phương pháp tính toán đã chọn (ATR, độ lệch chuẩn hoặc hồi quy tuyến tính) và điều chỉnh nó bằng cách nhân với nhân độ nghiêng (mult).
  3. Sử dụng giá độ dốc và giá điểm pivot, tính toán các giá trị hiện tại của đường xu hướng tăng (cao) và đường xu hướng giảm (dưới).
  4. Xác định xem giá đóng hiện tại đã phá vỡ đường xu hướng: nếu giá đóng trên đường xu hướng tăng, một tín hiệu phá vỡ tăng được tạo ra; nếu giá đóng dưới đường xu hướng giảm, một tín hiệu phá vỡ giảm được tạo ra.
  5. Chụp các đường xu hướng trên biểu đồ, với tùy chọn mở rộng các đường.
  6. Giao dịch dựa trên tín hiệu đột phá: mua dài trên đột phá tăng và mua ngắn trên đột phá giảm.

Ưu điểm chiến lược

  1. Chiến lược tạo ra các tín hiệu giao dịch dựa trên các thực tế khách quan về hành vi giá (điểm trục và đường xu hướng), cung cấp một mức độ tin cậy và ổn định.
  2. Độ nghiêng của các đường xu hướng có thể được điều chỉnh năng động dựa trên sự biến động của thị trường, thích nghi với các điều kiện thị trường khác nhau.
  3. Người dùng có thể linh hoạt chọn phương pháp tính toán độ dốc và cài đặt tham số để tối ưu hóa hiệu suất chiến lược.
  4. Chiến lược cung cấp cả thời gian thực và thời gian trễ tín hiệu để đáp ứng nhu cầu của người dùng khác nhau.
  5. Chức năng cảnh báo tích hợp có thể giúp người dùng nắm bắt kịp thời các cơ hội giao dịch.

Rủi ro chiến lược

  1. Trong thị trường bất ổn hoặc khi xu hướng không rõ ràng, chiến lược có thể tạo ra các tín hiệu sai thường xuyên, dẫn đến giảm lợi nhuận.
  2. Hiệu suất của chiến lược phụ thuộc vào cài đặt tham số; các tham số không phù hợp có thể khiến chiến lược thất bại hoặc tạo ra giao dịch quá mức.
  3. Trong chế độ tín hiệu bị trì hoãn, do sự tồn tại của backtesting, kết quả giao dịch thực tế có thể khác với kết quả thử nghiệm trong lịch sử.

Hướng dẫn tối ưu hóa chiến lược

  1. Đưa ra nhiều chỉ số kỹ thuật hơn hoặc các tính năng hành vi giá, chẳng hạn như khối lượng giao dịch và biến động, để hỗ trợ xác nhận các tín hiệu đột phá đường xu hướng và cải thiện chất lượng tín hiệu.
  2. Bộ lọc tín hiệu giao dịch bằng cách xem xét các yếu tố như thời gian và cường độ của các bước đột phá đường xu hướng để giảm các tín hiệu sai.
  3. Tối ưu hóa quản lý vị trí và kiểm soát rủi ro, chẳng hạn như điều chỉnh kích thước vị trí theo động dựa trên sức mạnh hoặc biến động của xu hướng và thiết lập mức dừng lỗ và lợi nhuận hợp lý.
  4. Tối ưu hóa các tham số bằng cách sử dụng máy học hoặc các thuật toán tối ưu hóa để tìm kết hợp tham số tốt nhất.

Tóm lại

Chiến lược này sử dụng các điểm pivot và độ dốc đường xu hướng để xây dựng một hệ thống giao dịch đường xu hướng thời gian thực. Bằng cách nắm bắt các sự kiện đột phá đường xu hướng, chiến lược có thể giao dịch trong giai đoạn đầu của sự hình thành xu hướng. Mặc dù chiến lược có một số ưu điểm nhất định, nhưng vẫn cần phải nhận thức được rủi ro của nó trong các thị trường hỗn loạn và tiếp tục nâng cao độ mạnh mẽ và lợi nhuận của chiến lược bằng cách giới thiệu nhiều thông tin hơn, tối ưu hóa lọc tín hiệu, quản lý vị trí và các phương pháp khác.


/*backtest
start: 2023-04-20 00:00:00
end: 2024-04-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(" only Ajay ", overlay=true)

//------------------------------------------------------------------------------
//Settings
//------------------------------------------------------------------------------{
length = input.int(14, 'Swing Detection Lookback')
mult = input.float(1., 'Slope', minval = 0, step = .1)
calcMethod = input.string('Atr', 'Slope Calculation Method', options = ['Atr','Stdev','Linreg'])
backpaint = input(true, tooltip = 'Backpainting offset displayed elements in the past. Disable backpainting to see real time information returned by the indicator.')

//Style
upCss = input.color(color.teal, 'Up Trendline Color', group = 'Style')
dnCss = input.color(color.red, 'Down Trendline Color', group = 'Style')
showExt = input(true, 'Show Extended Lines')

//------------------------------------------------------------------------------}
//Calculations
//------------------------------------------------------------------------------{
var upper = 0.
var lower = 0.
var slope_ph = 0.
var slope_pl = 0.

var offset = backpaint ? length : 0

n = bar_index
src = close

ph = ta.pivothigh(length, length)
pl = ta.pivotlow(length, length)

//Slope Calculation Method
slope = switch calcMethod
    'Atr'    => ta.atr(length) / length * mult
    'Stdev'  => ta.stdev(src,length) / length * mult
    'Linreg' => math.abs(ta.sma(src * n, length) - ta.sma(src, length) * ta.sma(n, length)) / ta.variance(n, length) / 2 * mult

//Get slopes and calculate trendlines
slope_ph := ph ? slope : slope_ph
slope_pl := pl ? slope : slope_pl

upper := ph ? ph : upper - slope_ph
lower := pl ? pl : lower + slope_pl

var upos = 0
var dnos = 0
upos := ph ? 0 : close > upper - slope_ph * length ? 1 : upos
dnos := pl ? 0 : close < lower + slope_pl * length ? 1 : dnos

//------------------------------------------------------------------------------}
//Extended Lines
//------------------------------------------------------------------------------{
// var uptl  = line.new(na,na,na,na, color = upCss, style = line.style_dashed, extend = extend.right)
// var dntl  = line.new(na,na,na,na, color = dnCss, style = line.style_dashed, extend = extend.right)

// if ph and showExt
//     uptl.set_xy1(n-offset, backpaint ? ph : upper - slope_ph * length)
//     uptl.set_xy2(n-offset+1, backpaint ? ph - slope : upper - slope_ph * (length+1))

// if pl and showExt
//     dntl.set_xy1(n-offset, backpaint ? pl : lower + slope_pl * length)
//     dntl.set_xy2(n-offset+1, backpaint ? pl + slope : lower + slope_pl * (length+1))

//------------------------------------------------------------------------------}
//Plots
//------------------------------------------------------------------------------{
plot(backpaint ? upper : upper - slope_ph * length, 'Upper', color = ph ? na : upCss, offset = -offset)
plot(backpaint ? lower : lower + slope_pl * length, 'Lower', color = pl ? na : dnCss, offset = -offset)

//Breakouts
upBreakout = upos > upos[1]
dnBreakout = dnos > dnos[1]

if (upBreakout)
    strategy.entry("Up Breakout", strategy.long)

if (dnBreakout)
    strategy.entry("Down Breakout", strategy.short)

//------------------------------------------------------------------------------}
//Alerts
//------------------------------------------------------------------------------{
alertcondition(upos > upos[1], 'Upward Breakout', 'Price broke the down-trendline upward')
alertcondition(dnos > dnos[1], 'Downward Breakout', 'Price broke the up-trendline downward')

//------------------------------------------------------------------------------}


Có liên quan

Thêm nữa