
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.
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.
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.
Tính trung bình của các xu hướng mở, đóng và siêu.
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
Thiết lập kênh giá dừng lỗ.
Kết hợp nhiều chỉ số để tránh tín hiệu sai.
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.
Đường trung bình kết hợp với định hướng xu hướng, tránh hoạt động ngược.
Thiết lập phạm vi dừng lỗ, kiểm soát rủi ro.
Thiết lập tham số quá chủ quan và cần được tối ưu hóa.
Khả năng dừng thiệt hại có thể được thiết lập quá lớn.
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.
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.
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.
Kiểm tra các chu kỳ trung bình khác nhau, chọn tham số tối ưu.
Thử nghiệm trở lại trên nhiều giống, tùy theo hiệu suất chọn tham số.
Tối ưu hóa chiến lược dừng lỗ để tránh thua lỗ quá lớn.
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.
/*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")