Chiến lược siêu xu hướng V là một chiến lược giao dịch ngắn hạn dựa trên đường trung bình động và lệch chuẩn. Nó sử dụng chỉ số siêu xu hướng để xác định hướng xu hướng giá và kết hợp hỗ trợ và kháng cự được hình thành bởi đường trung bình động để vào thị trường. Trong khi đó, nó sử dụng kênh lệch chuẩn để dự đoán các vùng hỗ trợ và kháng cự tiềm năng của giá và thiết lập phạm vi giá dừng lỗ và lấy lợi nhuận để thực hiện một chiến lược giao dịch ngắn hạn theo xu hướng và hiệu quả.
Đầu tiên, chiến lược này tính toán chỉ số siêu xu hướng. Chỉ số siêu xu hướng sử dụng mối quan hệ giữa ATR và giá để xác định hướng xu hướng. Khi giá trên xu hướng tăng, nó tăng. Khi giá dưới xu hướng giảm, nó giảm.
Sau đó, nó tính toán EMA của giá và EMA của giá mở. Khi giá vượt qua trên EMA và cao hơn EMA giá mở, đó là tín hiệu mua. Khi giá vượt qua dưới EMA và thấp hơn EMA giá mở, đó là tín hiệu bán.
Tiếp theo, nó sử dụng độ lệch chuẩn để tính toán các dải trên và dưới của kênh giá và thực hiện xử lý làm mịn. Khi giá vượt qua dải trên của độ lệch chuẩn, đó là tín hiệu dừng lỗ. Khi giá vượt qua dải dưới của độ lệch chuẩn, đó là tín hiệu lấy lợi nhuận.
Cuối cùng, nó kết hợp các đường trung bình động của các khung thời gian khác nhau để xác định hướng xu hướng, cùng với chỉ số Super Trend, để hình thành một đánh giá xu hướng ổn định.
Quản lý rủi ro:
Chiến lược Super Trend V tích hợp các lợi thế của xu hướng, trung bình động, kênh lệch chuẩn và các chỉ số khác để đạt được phán đoán xu hướng ổn định, thời gian vào đúng, và dừng lỗ và lấy lợi nhuận dựa trên các vùng giá. Bằng cách tối ưu hóa các tham số, chỉ số, dừng lỗ và lấy lợi nhuận, vv, nó có thể cải thiện 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)