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

ATR ADX MA
Ngày tạo: 2024-04-26 15:34:28 sửa đổi lần cuối: 2024-04-26 15:34:28
sao chép: 2 Số nhấp chuột: 859
1
tập trung vào
1617
Người theo dõi

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

Tổng quan

Chiến lược này sử dụng các điểm hỗ trợ (PivotHigh và PivotLow) để xác định các điểm cao và thấp của giá và vẽ đường xu hướng lên và xuống dựa trên đó. Độ lệch của đường xu hướng được tính bằng các phương pháp như ATR (Phạm vi thực trung bình), chênh lệch tiêu chuẩn hoặc hồi quy tuyến tính và điều chỉnh bằng nhân một yếu tố độ lệch.

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

  1. Sử dụng hàm ta.pivothigh () và ta.pivotlow () để phát hiện các điểm biến động cao (ph) và thấp (pl) trong một chu kỳ nhất định trong quá khứ.
  2. Tính lệch của đường xu hướng được tính theo phương pháp tính toán đã chọn ((ATR, chênh lệch tiêu chuẩn hoặc hồi quy tuyến tính) và điều chỉnh bằng nhân độ lệch ((mult)).
  3. Sử dụng độ dốc và giá điểm để tính giá trị hiện tại của đường xu hướng lên (upper) và đường xu hướng xuống (lower).
  4. Xác định liệu giá đóng cửa hiện tại có phá vỡ đường xu hướng hay không: Nếu giá đóng cửa cao hơn đường xu hướng lên, sẽ tạo ra tín hiệu phá vỡ lên; Nếu giá đóng cửa thấp hơn đường xu hướng xuống, sẽ tạo ra tín hiệu phá vỡ xuống.
  5. Bạn có thể vẽ một đường xu hướng trên biểu đồ và có thể chọn kéo dài đường xu hướng.
  6. Giao dịch theo tín hiệu đột phá: Bước lên mở nhiều lệnh, xuống mở lệnh trống.

Lợi thế chiến lược

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

Rủi ro chiến lược

  1. Chiến lược này có thể tạo ra các tín hiệu sai lệch thường xuyên khi thị trường hoặc xu hướng không rõ ràng, 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 thiết lập tham số, tham số không phù hợp có thể dẫn đến thất bại của chiến lược hoặc tạo ra quá nhiều giao dịch.
  3. Trong chế độ tín hiệu trễ, kết quả giao dịch thực tế có thể khác với kết quả kiểm tra lịch sử do có phản hồi.

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

  1. Tiếp tục giới thiệu nhiều chỉ số kỹ thuật hoặc các đặc điểm hành vi giá như khối lượng giao dịch, tỷ lệ biến động, để hỗ trợ xác nhận tín hiệu phá vỡ đường xu hướng và cải thiện chất lượng tín hiệu.
  2. Các tín hiệu giao dịch được lọc bằng cách tính đến các yếu tố như thời gian phá vỡ đường xu hướng, mức độ phá vỡ để giảm tín hiệu giả.
  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 cường độ của xu hướng thị trường hoặc biến động của tỷ lệ biến động, thiết lập vị trí dừng lỗ và dừng hợp lý.
  4. Tối ưu hóa các tham số, chẳng hạn như sử dụng học máy hoặc thuật toán tối ưu hóa, tìm kiếm sự kết hợp tham số tốt nhất.

Tóm tắt

Chiến lược này sử dụng các điểm hỗ trợ và độ lệch đường xu hướng để xây dựng một hệ thống giao dịch đường xu hướng trong thời gian thực. Bằng cách nắm bắt các sự kiện phá vỡ đườ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 này có một số lợi thế, nhưng vẫn cần chú ý đến rủi ro của nó trong thị trường biến động và tiếp tục nâng cao tính ổn định và khả năng sinh lợi của chiến lược bằng cách giới thiệu nhiều thông tin hơn, lọc tín hiệu tối ưu hóa và quản lý vị trí.

Mã nguồn chiến lượ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')

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