Chiến lược giao dịch đường trung bình động kênh giá biến động


Ngày tạo: 2023-12-12 11:44:15 sửa đổi lần cuối: 2023-12-12 11:44:15
sao chép: 0 Số nhấp chuột: 552
1
tập trung vào
1621
Người theo dõi

Chiến lược giao dịch đường trung bình động kênh giá biến động

Tổng quan

Chiến lược này dựa trên các chỉ số siêu xu hướng và chỉ số kênh giá, kết hợp với tín hiệu đồng bằng. Ý tưởng cốt lõi của nó là sử dụng kênh giá để xác định liệu giá hiện tại có ở trạng thái bất thường hay không, siêu xu hướng để xác định hướng xu hướng hiện tại và tạo ra tín hiệu giao dịch kết hợp với tín hiệu đồng bằng.

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

  1. Tính toán chỉ số siêu xu hướng. Trong đó đường lên và đường xuống tương ứng là N lần giá hiện tại cộng / trừ đi chỉ số ATR.

  2. Tính chỉ số kênh giá. Trong đó, đường kênh giá là M lần chênh lệch tiêu chuẩn trong N ngày của giá. Giá cao hơn / thấp hơn đường kênh được coi là trạng thái bất thường.

  3. Tính trung bình của các xu hướng mở, đóng và siêu.

  4. Tạo tín hiệu giao dịch:

    • Tín hiệu mua: giá đóng cửa vượt qua đường xu hướng siêu và cao hơn đường trung bình giá mở cửa

    • Tín hiệu bán: vượt qua đường xu hướng siêu dưới giá đóng cửa và thấp hơn đường trung bình giá mở cửa

  5. Thiết lập kênh giá dừng lỗ.

Phân tích lợi thế chiến lược

  1. Kết hợp nhiều chỉ số để tránh tín hiệu sai.

  2. Sử dụng cổng giá để đánh giá giá bất thường, bạn có thể lọc ra một số điểm vào không mong muốn.

  3. Đường trung bình kết hợp với định hướng xu hướng, tránh hoạt động ngược.

  4. Thiết lập phạm vi dừng lỗ, kiểm soát rủi ro.

Phân tích rủi ro

  1. Thiết lập tham số quá chủ quan và cần được tối ưu hóa.

  2. Khả năng dừng thiệt hại có thể được thiết lập quá lớn.

  3. Các tham số kênh giá có thể không phù hợp với tất cả các giống và cần được thử nghiệm riêng cho từng giống.

  4. Trong một số trường hợp, một sự thay đổi mạnh mẽ trong xu hướng có thể gây ra tổn thất lớn.

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

  1. Các tham số được thử nghiệm và tối ưu hóa để tìm ra sự kết hợp tốt nhất.

  2. Kiểm tra các chu kỳ trung bình khác nhau, chọn tham số tối ưu.

  3. Thử nghiệm trở lại trên nhiều giống, tùy theo hiệu suất chọn tham số.

  4. Tối ưu hóa chiến lược dừng lỗ để tránh thua lỗ quá lớn.

Tóm tắt

Chiến lược này tổng hợp nhiều chỉ số để xác định giá bất thường và xu hướng, về mặt lý thuyết có thể lọc ra một số tín hiệu sai. Tuy nhiên, thiết lập tham số vẫn còn chủ quan hơn, có một số không gian tối ưu hóa. Ngoài ra, trong thực tế cụ thể, cũng cần xem xét tác động của chi phí giao dịch, phí, điểm trượt. Nói chung, chiến lược này là chiến lược theo dõi xu hướng phù hợp hơn, nhưng cần điều chỉnh tối ưu hóa tham số cho các loại khác nhau.

Mã nguồn chiến lược
/*backtest
start: 2023-12-10 00:00:00
end: 2023-12-11 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Vol ST VM", overlay=true)

source = close
hilow = ((high - low)*100)
openclose = ((close - open)*100)
vol = (volume / hilow)
spreadvol = (openclose * vol)
VPT = spreadvol + cum(spreadvol)
window_len = 28

v_len = 14
price_spread = stdev(high-low, window_len)

v =  spreadvol + cum(spreadvol)
smooth = sma(v, v_len)
v_spread = stdev(v - smooth, window_len)
shadow = (v - smooth) / v_spread * price_spread

out = shadow > 0 ? high + shadow : low + shadow
//
src = out
src1=open
src2=low
src3=high
tf =input(720)
len = timeframe.isintraday and timeframe.multiplier >= 1 ? 
   tf / timeframe.multiplier * 7 : 
   timeframe.isintraday and timeframe.multiplier < 60 ? 
   60 / timeframe.multiplier * 24 * 7 : 7

c = ema(src, len)
plot(c,color=color.red)
o = ema(src1,len)
plot(o,color=color.blue)
//h = ema(src3,len)
//l=ema(src2,len)
//
col=c > o? color.lime : color.orange
vis = true
vl = c
ll = o
m1 = plot(vl, color=col, linewidth=1, transp=60)
m2 = plot(vis ? ll : na,  color=col, linewidth=2, transp=80)

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

vpt=ema(out,len)

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

// CALCULATIONS //
up_lev = vpt - (st_mult * atr(st_period))
dn_lev = vpt + (st_mult * atr(st_period))

up_trend   = 0.0
up_trend   := close[1] > up_trend[1]   ? max(up_lev, up_trend[1])   : up_lev

down_trend = 0.0
down_trend := close[1] < down_trend[1] ? min(dn_lev, down_trend[1]) : dn_lev

// Calculate trend var
trend = 0
trend := close > down_trend[1] ? 1: close < 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=crossover( close, st_line) and close>o
sell=crossunder(close, st_line) and close<o
//plotshape(crossover( close, st_line), location = location.belowbar, color = color.green,size=size.tiny)
//plotshape(crossunder(close, st_line), location = location.abovebar, color = color.red,size=size.tiny)
plotshape(buy, title="buy", color=color.green, style=shape.arrowup, location=location.belowbar, size=size.normal, textcolor=color.white, transp=0)  //plot for buy icon
plotshape(sell, title="sell", color=color.red, style=shape.arrowdown, location=location.abovebar, size=size.normal, textcolor=color.white, transp=0)  //plot for sell icon


//
multiplier = input(title="TP", type=input.float, defval=2, minval=1)
src5 = close
len5 = input(title="TP length", defval=150, minval=1)
offset = 0

calcSlope(src5, len5) =>
    sumX = 0.0
    sumY = 0.0
    sumXSqr = 0.0
    sumXY = 0.0
    for i = 1 to len5
        val = src5[len5-i]
        per = i + 1.0
        sumX := sumX + per
        sumY := sumY + val
        sumXSqr := sumXSqr + per * per
        sumXY := sumXY + val * per
        
        
    slope = (len5 * sumXY - sumX * sumY) / (len5 * sumXSqr - sumX * sumX)
    average = sumY / len5
    intercept = average - slope * sumX / len5 + slope
    [slope, average, intercept]

var float tmp = na
[s, a, i] = calcSlope(src5, len5)

vwap1=(i + s * (len5 - offset))
sdev = stdev(close, len5)
dev = multiplier * sdev
top=vwap1+dev
bott=vwap1-dev

//
z1 = vwap1 + dev
x1 = vwap1 - dev

low1 = crossover(close, x1)  
high1 = crossunder(close, z1) 

plotshape(low1, title="low", text="TP", color=color.red, style=shape.labelup, location=location.belowbar, size=size.small, textcolor=color.white, transp=0)  //plot for buy icon
plotshape(high1, title="high", text="TP", color=color.green, style=shape.labeldown, location=location.abovebar, size=size.small, textcolor=color.white, transp=0)  //plot for sell icon



strategy.entry(id="Enter Long MA", long=true, comment="Buy", when=high1)
strategy.entry(id="Short Entry MA", long=false, comment="Sell", when=low1)

/////// Alerts /////
alertcondition(buy,title="buy")
alertcondition(sell,title="sell")
alertcondition(low1,title="sell tp")
alertcondition(high1,title="buy tp")