
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.
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.
Phương pháp giải quyết rủi ro:
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.
/*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)