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


Ngày tạo: 2023-11-14 16:23:42 sửa đổi lần cuối: 2023-11-14 16:23:42
sao chép: 0 Số nhấp chuột: 733
1
tập trung vào
1617
Người theo dõi

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

Tổng quan

Chiến lược này kết hợp các chỉ số đường trung bình và chỉ số siêu xu hướng để thực hiện các hoạt động theo xu hướng. Làm nhiều hơn khi xu hướng lên và làm trống khi xu hướng đi xuống.

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

  1. Tính trung bình di chuyển trọng số MA. Sử dụng khối lượng giao dịch làm trọng số, tính giá trung bình trọng số trong một chu kỳ.

  2. Hull Moving Average được tính dựa trên MA. Hull Moving Average nhạy cảm hơn với biến động giá cả.

  3. Tính toán chỉ số siêu xu hướng. Chỉ số siêu xu hướng kết hợp với ATR, có thể phát hiện ra sự thay đổi trong xu hướng giá. Tính toán trên và dưới đường ray.

  4. Khi giá đóng cửa vượt quá đường lên, hãy làm nhiều hơn; khi giá đóng cửa rơi xuống đường xuống, hãy làm trống.

  5. Hình vẽ các chỉ số phụ trợ như giá mở, giá đóng, giá cao nhất, giá thấp nhất, để quan sát trực quan hơn sự thay đổi của giá.

  6. Quyết định mua và bán dựa trên các chỉ số chéo.

Phân tích lợi thế

  1. Chiến lược này kết hợp cả chỉ số đường trung bình và chỉ số siêu xu hướng để nắm bắt chính xác hơn sự thay đổi xu hướng.

  2. Đường trung bình Hull nhạy cảm hơn với sự thay đổi giá, có lợi cho việc phát hiện xu hướng chuyển đổi kịp thời.

  3. Chỉ số siêu xu hướng có thể điều chỉnh động lên xuống đường, thích ứng với biến động của thị trường.

  4. Các chỉ số hỗ trợ hiển thị trực tiếp sự thay đổi giá, kết hợp với tín hiệu chỉ số để đưa ra phán quyết.

  5. Các tham số chiến lược có nhiều không gian tối ưu hóa, có thể điều chỉnh các tham số như chu kỳ đường trung bình, nhân siêu xu hướng.

Phân tích rủi ro

  1. Trong quá trình kiểm tra, có thể có tín hiệu sai dẫn đến giao dịch không cần thiết.

  2. Cần theo dõi nhiều chỉ số cùng một lúc, và chiến lược thực hiện là tương đối phức tạp.

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

  4. Cần kiểm soát chặt chẽ để tránh tổn thất quá lớn.

  5. Có thể có nhiều giao dịch, cần kiểm soát ảnh hưởng của phí.

Hướng tối ưu hóa

  1. Có thể thử nghiệm các tham số của các đường trung bình khác nhau, chọn chỉ số đường trung bình nhạy cảm hơn với thị trường.

  2. Có thể thử nghiệm các nhân siêu xu hướng khác nhau, chọn các giá trị có thể bắt kịp sự thay đổi xu hướng.

  3. Có thể kết hợp với chỉ số biến động để giảm vị trí khi biến động tăng lên.

  4. Có thể thêm điều kiện phá vỡ để tránh tín hiệu giả trong tổng hợp.

  5. Có thể tối ưu hóa chiến lược dừng lỗ để dừng lỗ phù hợp hơn với đặc điểm của thị trường.

Tóm tắt

Chiến lược này kết hợp cả chỉ số đường trung bình và chỉ số siêu xu hướng để xác định hướng xu hướng và hoạt động theo xu hướng. Ưu điểm là các chỉ số có thể xác minh lẫn nhau, xác định xu hướng chính xác hơn.

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