Chiến lược Super Trend V


Ngày tạo: 2023-10-18 12:35:53 sửa đổi lần cuối: 2023-10-18 12:35:53
sao chép: 0 Số nhấp chuột: 877
1
tập trung vào
1617
Người theo dõi

Chiến lược Super Trend V

Tổng quan

Chiến lược siêu xu hướng V là một chiến lược giao dịch đường ngắn dựa trên đường trung bình di chuyển và chênh lệch chuẩn. Nó sử dụng chỉ số Super Trend để xác định hướng xu hướng của giá, kết hợp với hỗ trợ và kháng cự hình thành từ đường trung bình di chuyển để nhập vào. Đồng thời, nó sử dụng kênh chênh lệch chuẩn để dự đoán vùng hỗ trợ và kháng cự tiềm ẩn của giá, thiết lập khoảng giá dừng lỗ, thực hiện theo xu hướng và chiến lược giao dịch đường ngắn hiệu quả thoát ra.

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

Chiến lược này đầu tiên tính toán chỉ số Super Trend, chỉ số Super Trend sử dụng ATR và mối quan hệ của giá để xác định xu hướng. Giá là lạc quan khi giá cao hơn xu hướng tăng và giảm khi giá thấp hơn xu hướng giảm.

Sau đó, tính toán EMA di chuyển trung bình của giá và EMA di chuyển trung bình của giá mở, khi giá trên đường trung bình di chuyển và cao hơn đường trung bình mở là tín hiệu mua, khi giá dưới đường trung bình di chuyển và thấp hơn đường trung bình mở là tín hiệu bán.

Sau đó, sử dụng chênh lệch tiêu chuẩn để tính toán đường dẫn giá lên và xuống, và xử lý trơn tru, dấu hiệu dừng khi giá vượt qua chênh lệch tiêu chuẩn và dấu hiệu dừng khi giá vượt qua chênh lệch tiêu chuẩn.

Cuối cùng, kết hợp các trung bình di chuyển trong các khoảng thời gian khác nhau để đánh giá xu hướng, kết hợp với chỉ số Super Trend để tạo ra một phán đoán xu hướng ổn định.

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

  • Sử dụng chỉ số Super Trend để xác định xu hướng giá, tránh biến động xu hướng gây thiệt hại
  • Trung bình di chuyển kết hợp với giá mở cửa giúp xác định thời gian nhập cảnh, tránh phá vỡ giả
  • Đường phân biệt chuẩn dự đoán giá tiềm năng hỗ trợ và vùng kháng cự, thiết lập giá dừng lỗ
  • Nhiều chu kỳ thời gian kết hợp với định hướng xu hướng, tăng sự ổn định

Rủi ro chiến lược

  • Chỉ số Super Trend bị tụt hậu, có thể bỏ qua điểm chuyển hướng
  • Đường trung bình di chuyển tạo ra tín hiệu chéo có sự chậm trễ, thời gian nhập cảnh không đúng
  • Phương thức phân chênh lệch tiêu chuẩn quá cố định và không thể phản ánh biến động thị trường trong thời gian thực
  • Nhiều thời kỳ có thể gây ra xung đột.

Phương pháp giải quyết rủi ro:

  • Tóm tắt các tham số Super Trend để tăng độ nhạy
  • Tối ưu hóa chu kỳ trung bình di chuyển, hoặc thêm các chỉ số khác để đánh giá nhập cảnh
  • Động thái điều chỉnh các tham số đường phân cách tiêu chuẩn để phù hợp với thị trường
  • Xác định rõ ràng logic phán đoán đa chu kỳ, xử lý xung đột có thể

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

  • Tối ưu hóa các tham số Super Trend để tìm các tham số kết hợp tốt nhất
  • Thử các chỉ số khác kết hợp với trung bình di chuyển để xác định thời gian nhập cảnh
  • Cố gắng điều chỉnh động các tham số kênh chênh lệch chuẩn
  • Kiểm tra các kết hợp đa chu kỳ khác nhau để tìm chu kỳ phù hợp nhất
  • Tối ưu hóa chiến lược dừng lỗ để tăng cơ hội chiến lược

Tóm tắt

Chiến lược siêu xu hướng V tích hợp các lợi thế của các chỉ số như xu hướng, đường trung bình và đường chênh lệch tiêu chuẩn, thực hiện định hướng xu hướng ổn định, chọn thời gian nhập cảnh phù hợp và thiết lập chiến lược giao dịch đường ngắn của dừng lỗ trong khu vực giá. Bằng cách tối ưu hóa tham số, tối ưu hóa chỉ số, tối ưu hóa dừng lỗ, cải tiến các khía cạnh khác, có thể nâng cao sự ổn định và lợi nhuận của chiến lược.

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

// © theCrypster 2020

//@version=4
strategy(title = "Super trend V Strategy version", overlay = true, pyramiding=1,initial_capital = 1000, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0.075)
strat_dir_input = input(title="Strategy Direction", defval="long", options=["long", "short", "all"])
strat_dir_value = strat_dir_input == "long" ? strategy.direction.long : strat_dir_input == "short" ? strategy.direction.short : strategy.direction.all
strategy.risk.allow_entry_in(strat_dir_value)
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", text="Buy", color=color.green, style=shape.labelup, location=location.belowbar, size=size.small, textcolor=color.white, transp=0)  //plot for buy icon
plotshape(sell, title="sell", text="Sell", color=color.red, style=shape.labeldown, location=location.abovebar, size=size.small, textcolor=color.white, transp=0)  //plot for sell icon


//
multiplier = input(title="TP VWAP Deviation", type=input.float, defval=2, minval=1)
src5 = vwap
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(vwap, 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



//
// Testing Start dates
testStartYear = input(2016, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
//Stop date if you want to use a specific range of dates
testStopYear = input(2030, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)


testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false

l = buy
s1 = sell
        
if l and testPeriod()
    strategy.entry("buy", strategy.long)
if s1 and testPeriod()
    strategy.entry("sell", strategy.short)