Xu hướng theo chiến lược dựa trên trung bình động và siêu xu hướng

Tác giả:ChaoZhang, Ngày: 2023-11-14 16:23:42
Tags:

img

Tổng quan

Chiến lược này kết hợp các chỉ số trung bình động và siêu xu hướng để theo dõi xu hướng.

Chiến lược logic

  1. Sử dụng khối lượng như trọng lượng để tính giá trung bình trọng số trong một khoảng thời gian.

  2. Tính toán trung bình động Hull dựa trên MA.

  3. Tính toán chỉ số siêu xu hướng. siêu xu hướng kết hợp ATR để xác định sự thay đổi xu hướng. nó tính toán các dải trên và dưới.

  4. Khi gần phá vỡ trên dải trên, đi dài. Khi gần phá vỡ dưới dải dưới, đi ngắn.

  5. Chụp các chỉ số phụ trợ như mở, đóng, cao và thấp để quan sát thị giác chuyển động giá.

  6. Thực hiện các quyết định giao dịch dựa trên các chỉ số chéo.

Phân tích lợi thế

  1. Chiến lược kết hợp cả trung bình động và siêu xu hướng, cho phép phát hiện xu hướng chính xác hơn.

  2. Trung bình di chuyển Hull nhạy cảm hơn với sự thay đổi giá, giúp đảo ngược xu hướng giao dịch kịp thời.

  3. Siêu xu hướng điều chỉnh động các dải trên và dưới để thích nghi với biến động thị trường.

  4. Các chỉ số phụ giúp hiển thị thị động của giá để hỗ trợ ra quyết định bằng các tín hiệu chỉ số.

  5. Chiến lược cho phép tối ưu hóa tham số trên thời gian trung bình di chuyển, nhân xu hướng siêu v.v.

Phân tích rủi ro

  1. Whipsaws có thể tạo ra tín hiệu sai trong các thị trường giới hạn phạm vi, gây ra các giao dịch không cần thiết.

  2. Theo dõi nhiều chỉ số có thể làm cho chiến lược tương đối phức tạp để thực hiện.

  3. Các thông số cần phải được điều chỉnh đúng cách để phù hợp với các đặc điểm của các sản phẩm khác nhau.

  4. Cần phải có lệnh dừng lỗ nghiêm ngặt để hạn chế lỗ trên các vị trí đơn.

  5. Tần suất giao dịch cao đòi hỏi kiểm soát tác động từ các ủy ban.

Hướng dẫn tối ưu hóa

  1. Kiểm tra các đường trung bình động khác nhau để tìm một nhạy cảm hơn với thị trường.

  2. Kiểm tra các trình nhân siêu xu hướng khác nhau để bắt sự thay đổi xu hướng theo thời gian.

  3. Bao gồm chỉ số biến động để giảm kích thước vị trí khi biến động tăng.

  4. Thêm các điều kiện thoát để tránh tín hiệu sai trong thời gian giới hạn phạm vi.

  5. Tối ưu hóa chiến lược dừng lỗ để thích nghi hơn với điều kiện thị trường.

Tóm lại

Chiến lược này đánh giá hướng xu hướng bằng cách sử dụng cả trung bình động và siêu xu hướng để theo dõi xu hướng. Lợi thế là xác minh lẫn nhau giữa các chỉ số để phát hiện xu hướng chính xác hơn. Nhưng nên cảnh giác với các tín hiệu sai. Chiến lược có thể được cải thiện hơn nữa thông qua tối ưu hóa tham số và kiểm soát rủi ro. Nó phù hợp với xu hướng sau các hoạt động trên các công cụ có đặc điểm xu hướng mạnh.


/*backtest
start: 2022-11-07 00:00:00
end: 2023-11-13 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © rajukpatel

//@version=5
strategy('My RK Strategy with Alert', shorttitle='My RK Strategy with Alert', overlay=true )
src5 = input(close)

tf = input(1440)
len5 = timeframe.isintraday and timeframe.multiplier >= 1 ? tf / timeframe.multiplier * 7 : timeframe.isintraday and timeframe.multiplier < 60 ? 60 / timeframe.multiplier * 24 * 7 : 7

ma = ta.ema(src5 * volume, len5) / ta.ema(volume, len5)


//script taken from https://www.tradingview.com/script/kChCRRZI-Hull-Moving-Average/

src1 = ma

p(src1, len5) =>
    n = 0.0
    s = 0.0
    for i = 0 to len5 - 1 by 1
        w = (len5 - i) * len5
        n += w
        s += src5[i] * w
        s
    s / n

hm = 2.0 * p(src1, math.floor(len5 / 3)) - p(src1, len5)
vhma = p(hm, math.floor(math.sqrt(len5)))
lineColor = vhma > vhma[1] ? color.lime : color.red
plot(vhma, title='VHMA', color=lineColor, linewidth=3)
hColor = true
vis = true
hu = hColor ? vhma > vhma[2] ? #00ff00 : #ff0000 : #ff9800

vl = vhma[0]
ll = vhma[1]
m1 = plot(vl, color=hu, linewidth=1, transp=60)
m2 = plot(vis ? ll : na, color=hu, linewidth=2, transp=80)

fill(m1, m2, color=hu, transp=70)
//

b = timeframe.isintraday and timeframe.multiplier >= 1 ? 60 / timeframe.multiplier * 7 : timeframe.isintraday and timeframe.multiplier < 60 ? 60 / timeframe.multiplier * 24 * 7 : 7



//
res5 = input.timeframe('D')

o = request.security(syminfo.tickerid, res5, open, barmerge.gaps_off, barmerge.lookahead_on)
c = request.security(syminfo.tickerid, res5, close, barmerge.gaps_off, barmerge.lookahead_on)
hz = request.security(syminfo.tickerid, res5, high, barmerge.gaps_off, barmerge.lookahead_on)
l = request.security(syminfo.tickerid, res5, low, barmerge.gaps_off, barmerge.lookahead_on)



col = c >= o ? color.lime : color.red

ppo = plot(b ? o >= c ? hz : l : o, color=col, title='Open', style=plot.style_stepline, transp=100)
ppc = plot(b ? o <= c ? hz : l : c, color=col, title='Close', style=plot.style_stepline, transp=100)

plot(b and hz > c ? hz : na, color=col, title='High', style=plot.style_circles, linewidth=2, transp=60)
plot(b and l < c ? l : na, color=col, title='Low', style=plot.style_circles, linewidth=2, transp=60)

fill(ppo, ppc, col, transp=90)

//
// INPUTS //
st_mult = input.float(1, title='SuperTrend Multiplier', minval=0, maxval=100, step=0.01)
st_period = input.int(50, title='SuperTrend Period', minval=1)

// CALCULATIONS //
up_lev = l - st_mult * ta.atr(st_period)
dn_lev = hz + st_mult * ta.atr(st_period)

up_trend = 0.0
up_trend := c[1] > up_trend[1] ? math.max(up_lev, up_trend[1]) : up_lev

down_trend = 0.0
down_trend := c[1] < down_trend[1] ? math.min(dn_lev, down_trend[1]) : dn_lev

// Calculate trend var
trend = 0
trend := c > down_trend[1] ? 1 : c < up_trend[1] ? -1 : nz(trend[1], 1)

// Calculate SuperTrend Line
st_line = trend == 1 ? up_trend : down_trend

// Plotting
//plot(st_line[1], color = trend == 1 ? color.green : color.red , style = plot.style_cross, linewidth = 2, title = "SuperTrend")
buy = ta.crossover(c, st_line)
sell = ta.crossunder(c, st_line)
signal = input(false)

/////////////// Plotting /////////////// 
plotshape(signal and buy, style=shape.triangleup, size=size.normal, location=location.belowbar, color=color.new(color.lime, 0))
plotshape(signal and sell, style=shape.triangledown, size=size.normal, location=location.abovebar, color=color.new(color.red, 0))


if buy
    strategy.entry('My Long Entry Id', strategy.long)

if sell
    strategy.entry('My Short Entry Id', strategy.short)



Thêm nữa