
Chiến lược phá vỡ xung đột xu hướng một bên (Single Side Trend Shock Breakout Strategy) là một chiến lược phá vỡ sử dụng các kênh giá và phán đoán xu hướng. Nó nhằm mục đích xác định hướng xu hướng, phá vỡ vào trong khu vực xung đột và thoát ra sau khi đạt được mục tiêu lợi nhuận đã đặt.
Chiến lược này hoạt động bằng cách tính toán đường dẫn lên và xuống của kênh giá để xác định liệu giá có phá vỡ kênh không. Cụ thể, chiến lược này trước tiên tính toán giá cao nhất, giá thấp nhất trong chu kỳ N gần nhất và tính toán đường trung bình của giá. Sau đó tính toán khoảng cách tuyệt đối trung bình của giá với đường trung bình để có được đường dẫn lên và xuống.
Khi đánh giá xu hướng, chiến lược kiểm tra xem một vài đường K gần đây nhất có nằm ở trên kênh (tín hiệu đa đầu) hoặc dưới kênh (tín hiệu trống) không. Khi đánh giá xu hướng, chiến lược chờ đợi giá dao động, phá vỡ hình thành tín hiệu gần đường dẫn trên hoặc đường dẫn dưới và đi vào sân bằng cách vào sân ngược.
Ngoài ra, chiến lược cũng sẽ đánh giá sự phá vỡ của thực thể K-line, làm tín hiệu nhập cảnh bổ sung. Khi chiều dài của thực thể phá vỡ một số lần chiều dài của thực thể trung bình, chiến lược sẽ thiết lập mục tiêu thu lợi nhuận sau khi vào và chủ động dừng lại khi giá đạt mục tiêu.
Chiến lược này có một số lợi thế:
Chiến lược này cũng có một số rủi ro:
Để giảm rủi ro, các tham số có thể được điều chỉnh để thu hẹp phạm vi kênh, tránh đặt hàng ngược trong xu hướng mạnh, tối ưu hóa logic dừng lại.
Chiến lược này cũng có thể được tối ưu hóa theo các hướng sau:
Chiến lược phá vỡ động thái xu hướng một chiều có lợi nhuận bằng cách xây dựng vị trí đảo ngược trong khu vực động thái bằng cách đánh giá kênh giá và xu hướng. Nó có lợi thế trong việc đánh giá xu hướng, chủ động ngăn chặn, nhưng cũng có một số rủi ro. Bằng cách xác nhận nhiều chỉ số, tối ưu hóa tham số và các phương tiện khác có thể làm giảm rủi ro để tăng lợi nhuận. Chiến lược này được áp dụng cho giao dịch đường ngắn, có thể bổ sung cho chiến lược xu hướng.
/*backtest
start: 2024-01-10 00:00:00
end: 2024-01-17 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("Noro's Bands Scalper Strategy v1.5", shorttitle = "Scalper str 1.5", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
takepercent = input(0, defval = 0, minval = 0, maxval = 1000, title = "take, %")
needbe = input(true, defval = true, title = "Bands Entry")
needct = input(false, defval = false, title = "Counter-trend entry")
bodylen = input(10, defval = 10, minval = 0, maxval = 50, title = "Body length")
trb = input(1, defval = 1, minval = 1, maxval = 5, title = "Trend bars")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
needbb = input(true, defval = true, title = "Show Bands")
needbg = input(true, defval = true, title = "Show Background")
src = close
//PriceChannel 1
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2
//Distance
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma
hd2 = center + distsma * 2
ld2 = center - distsma * 2
//Trend
chd = close > hd
cld = close < ld
uptrend = trb == 1 and chd ? 1 : trb == 2 and chd and chd[1] ? 1 : trb == 3 and chd and chd[1] and chd[2] ? 1 : trb == 4 and chd and chd[1] and chd[2] and chd[3] ? 1 : trb == 5 and chd and chd[1] and chd[2] and chd[3] and chd[4] ? 1 : 0
dntrend = trb == 1 and cld ? 1 : trb == 2 and cld and cld[1] ? 1 : trb == 3 and cld and cld[1] and cld[2] ? 1 : trb == 4 and cld and cld[1] and cld[2] and cld[3] ? 1 : trb == 5 and cld and cld[1] and cld[2] and cld[3] and cld[4] ? 1 : 0
trend = dntrend == 1 and high < center ? -1 : uptrend == 1 and low > center ? 1 : trend[1]
//trend = close < ld and high < center ? -1 : close > hd and low > center ? 1 : trend[1]
//Lines
colo = needbb == false ? na : black
plot(hd2, color = colo, linewidth = 1, transp = 0, title = "High band 2")
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band 1")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band 1")
plot(ld2, color = colo, linewidth = 1, transp = 0, title = "Low band 2")
//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)
//Body
body = abs(close - open)
smabody = ema(body, 30) / 10 * bodylen
//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up7 = trend == 1 and ((bar == -1 and bar[1] == -1) or (body > smabody and bar == -1)) ? 1 : 0
dn7 = trend == 1 and ((bar == 1 and bar[1] == 1) or (close > hd and needbe == true)) and close > strategy.position_avg_price * (100 + takepercent) / 100 ? 1 : 0
up8 = trend == -1 and ((bar == -1 and bar[1] == -1) or (close < ld2 and needbe == true)) and close < strategy.position_avg_price * (100 - takepercent) / 100 ? 1 : 0
dn8 = trend == -1 and ((bar == 1 and bar[1] == 1) or (body > smabody and bar == 1)) ? 1 : 0
if up7 == 1 or up8 == 1
strategy.entry("Long", strategy.long, needlong == false ? 0 : trend == -1 and needct == false ? 0 : na)
if dn7 == 1 or dn8 == 1
strategy.entry("Short", strategy.short, needshort == false ? 0 : trend == 1 and needct == false ? 0 : na)