Chiến lược phá vỡ xu hướng kép

Tác giả:ChaoZhang, Ngày: 2024-02-19 11:52:40
Tags:

img

Tổng quan

Chiến lược Breakout xu hướng kép tích hợp nhiều chỉ số kỹ thuật bao gồm đường xu hướng, đường chéo trung bình động và các điểm đột phá kênh giá để xác định các bước ngoặt tiềm năng trên thị trường. Nó nhằm mục đích nắm bắt xu hướng và tận dụng sự thay đổi động lực. Chiến lược này kết hợp theo dõi xu hướng và tín hiệu đột phá cho các bước vào và ra tương đối mạnh mẽ, nhưng nó cũng mang lại một số rủi ro của sự đột phá sai.

Chiến lược logic

Xu hướng

Chiến lược này đầu tiên sử dụng các điểm cao và thấp để phân chia xu hướng tăng và giảm. Khi giá phá vỡ đường xu hướng, nó báo hiệu một sự đảo ngược xu hướng tiềm năng. Độ nghiêng được tính bằng phương pháp ATR để theo kịp biến động thực tế.

Crossover trung bình di chuyển

Chiến lược này áp dụng trung bình động ngắn hạn 5 ngày và trung bình động dài hạn 34 ngày cho giao dịch chéo nhanh và chậm. MA ngắn vượt qua trên MA dài sẽ cung cấp tín hiệu mua, trong khi vượt qua bên dưới sẽ cung cấp tín hiệu bán. MA nhanh nắm bắt xu hướng ngắn hạn và MA chậm theo dõi xu hướng dài hạn.

Kênh giá

Một kênh giá 5 ngày cũng được cấu hình trong chiến lược. Việc phá vỡ trên dải trên sẽ kích hoạt bước vào dài và việc phá vỡ dưới dải dưới sẽ kích hoạt bước vào ngắn để nắm bắt các bước đột phá giá ngắn hạn. Nó hoạt động với MA crossover để xác định độ tin cậy của các tín hiệu đột phá.

Ba loại chỉ số kỹ thuật được tích hợp vào một chiến lược để tạo ra một cơ chế xác nhận kép mạnh mẽ, tránh giao dịch sai.

Ưu điểm

  1. Tích hợp nhiều chỉ số cho các tín hiệu tương đối đáng tin cậy, làm giảm tổn thất từ các vụ phá vỡ sai.

  2. MA nhanh và kênh giá nắm bắt các thay đổi xu hướng ngắn hạn nhanh chóng. MA chậm và đường xu hướng theo dõi các xu hướng dài hạn để có sự gia tăng và thoát ổn định.

  3. Cấu trúc mã sạch với các tham số điều chỉnh để tối ưu hóa trên các sản phẩm và khung thời gian khác nhau.

  4. Kết hợp theo dõi xu hướng và tín hiệu đột phá cho lợi nhuận trong các xu hướng mạnh, và tránh các whipsaws trong các thị trường giới hạn phạm vi.

Rủi ro

  1. Có thể có một số rủi ro của sự phá vỡ sai, đặc biệt là trong các kịch bản giới hạn phạm vi, dẫn đến tổn thất.

  2. Bản chất chậm của các đường chéo MA mang lại rủi ro mua đỉnh hoặc bán đáy sau khi đảo ngược xu hướng lớn.

  3. Nhiều chỉ số tích hợp đòi hỏi kiểm tra ngược và tính toán nặng nề để điều chỉnh tham số.

  • Các chỉ số khối lượng có thể được thêm vào để xác nhận đột phá, ví dụ như yêu cầu mở rộng khối lượng khi đột phá.

  • Các chỉ số bán quá mức / mua quá mức ngăn chặn các kịch bản mua / bán kiệt sức.

  • Dừng lỗ để kiểm soát lỗ trên các giao dịch sai.

  • Máy học để tìm các thông số tối ưu nhanh chóng thông qua dữ liệu lịch sử khổng lồ.

Tăng cường

  1. Thêm các bộ lọc khối lượng hoặc RSI để xác nhận những thay đổi xu hướng đáng tin cậy, thiết lập các bộ lọc nghiêm ngặt để tránh tổn thất từ các sự đột phá sai.

  2. Điều chỉnh các thông số MA và kênh cho các sản phẩm khác nhau để phù hợp với các đặc điểm của chúng.

  3. Thêm cơ chế dừng lỗ thông qua lệnh dừng lỗ, lệnh dừng giới hạn để hạn chế lỗ cho mỗi giao dịch.

  4. Dùng các phương pháp thích nghi để giao dịch ít thường xuyên hơn trong các thị trường giới hạn phạm vi và nhiều hơn trong các xu hướng rõ ràng.

  5. Đào tạo các mô hình học sâu để tạo ra tín hiệu mua / bán thay vì chỉ sử dụng các chỉ số kỹ thuật, tận dụng các mạng thần kinh khả năng nhận dạng mẫu để tìm các chiến lược dự đoán hơn.

Kết luận

Chiến lược này tạo thành một hệ thống xác nhận kép bằng cách kết hợp nhiều chỉ số kỹ thuật phổ biến, có khả năng nắm bắt hiệu quả những thay đổi xu hướng với kết quả backtest tương đối ổn định.


/*backtest
start: 2024-02-11 00:00:00
end: 2024-02-18 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © FinanceUpPvtLtd

//@version=5
strategy("FINANCE UP FREE STRATEGY (+919665229664)", overlay=true)

// Script 01 - Trendlines
length_tl = input.int(14, 'Swing Detection Lookback')
mult_tl = input.float(1., 'Slope', minval=0, step=.1)
calcMethod_tl = input.string('Atr', 'Slope Calculation Method', options=['Atr', 'Stdev', 'Linreg'])
backpaint_tl = input(true, tooltip='Backpainting offset displayed elements in the past. Disable backpainting to see real-time information returned by the indicator.')
upCss_tl = input(color.teal, 'Up Trendline Color', group='Style')
dnCss_tl = input(color.red, 'Down Trendline Color', group='Style')
showExt_tl = input(true, 'Show Extended Lines')

var upper_tl = 0.
var lower_tl = 0.
var slope_ph_tl = 0.
var slope_pl_tl = 0.
var offset_tl = backpaint_tl ? length_tl : 0
n_tl = bar_index
src_tl = close
ph_tl = ta.pivothigh(length_tl, length_tl)
pl_tl = ta.pivotlow(length_tl, length_tl)
slope_tl = switch calcMethod_tl
    'Atr'    => ta.atr(length_tl) / length_tl * mult_tl
    'Stdev'  => ta.stdev(src_tl, length_tl) / length_tl * mult_tl
    'Linreg' => math.abs(ta.sma(src_tl * n_tl, length_tl) - ta.sma(src_tl, length_tl) * ta.sma(n_tl, length_tl)) / ta.variance(n_tl, length_tl) / 2 * mult_tl
slope_ph_tl := ph_tl ? slope_tl : slope_ph_tl
slope_pl_tl := pl_tl ? slope_tl : slope_pl_tl
upper_tl := ph_tl ? ph_tl : upper_tl - slope_ph_tl
lower_tl := pl_tl ? pl_tl : lower_tl + slope_pl_tl
var upos_tl = 0
var dnos_tl = 0
upos_tl := ph_tl ? 0 : close > upper_tl - slope_ph_tl * length_tl ? 1 : upos_tl
dnos_tl := pl_tl ? 0 : close < lower_tl + slope_pl_tl * length_tl ? 1 : dnos_tl

// var uptl_tl = line.new(na, na, na, na, color=upCss_tl, style=line.style_dashed, extend=extend.right)
// var dntl_tl = line.new(na, na, na, na, color=dnCss_tl, style=line.style_dashed, extend=extend.right)
// if ph_tl and showExt_tl
//     uptl_tl.set_xy1(n_tl - offset_tl, backpaint_tl ? ph_tl : upper_tl - slope_ph_tl * length_tl)
//     uptl_tl.set_xy2(n_tl - offset_tl + 1, backpaint_tl ? ph_tl - slope_tl : upper_tl - slope_ph_tl * (length_tl + 1))
// if pl_tl and showExt_tl
//     dntl_tl.set_xy1(n_tl - offset_tl, backpaint_tl ? pl_tl : lower_tl + slope_pl_tl * length_tl)
//     dntl_tl.set_xy2(n_tl - offset_tl + 1, backpaint_tl ? pl_tl + slope_tl : lower_tl + slope_pl_tl * (length_tl + 1))

plot(backpaint_tl ? upper_tl : upper_tl - slope_ph_tl * length_tl, 'Upper', color=ph_tl ? na : upCss_tl, offset=-offset_tl)
plot(backpaint_tl ? lower_tl : lower_tl + slope_pl_tl * length_tl, 'Lower', color=pl_tl ? na : dnCss_tl, offset=-offset_tl)

plotshape(upos_tl > upos_tl[1] ? low : na, "Upper Break", shape.labelup, location.absolute, upCss_tl, text="B", textcolor=color.white, size=size.tiny)
plotshape(dnos_tl > dnos_tl[1] ? high : na, "Lower Break", shape.labeldown, location.absolute, dnCss_tl, text="B", textcolor=color.white, size=size.tiny)

alertcondition(upos_tl > upos_tl[1], 'Upward Breakout', 'Price broke the down-trendline upward')
alertcondition(dnos_tl > dnos_tl[1], 'Downward Breakout', 'Price broke the up-trendline downward')

// Script 02 - Channel Breakout
length_channel = input.int(title="Channel Length", minval=1, maxval=1000, defval=5)
upBound_channel = ta.highest(high, length_channel)
downBound_channel = ta.lowest(low, length_channel)
if (not na(close[length_channel]))
    strategy.entry("LE-LE", strategy.long, stop=upBound_channel + syminfo.mintick, comment="LE-LE")
strategy.entry("BECH-DE", strategy.short, stop=downBound_channel - syminfo.mintick, comment="BECH-DE")

// Script 03 - MA Cross
shortlen_ma = input.int(5, "Short MA Length", minval=1)
longlen_ma = input.int(34, "Long MA Length", minval=1)
short_ma = ta.sma(close, shortlen_ma)
long_ma = ta.sma(close, longlen_ma)
plot(short_ma, color=#FF6D00, title="Short MA")
plot(long_ma, color=#43A047, title="Long MA")
plot(ta.cross(short_ma, long_ma) ? short_ma : na, color=#2962FF, style=plot.style_cross, linewidth=4, title="Cross")


Thêm nữa