Chiến lược đột phá gây sốc xu hướng đơn phương


Ngày tạo: 2024-01-18 14:59:30 sửa đổi lần cuối: 2024-01-18 14:59:30
sao chép: 1 Số nhấp chuột: 614
1
tập trung vào
1617
Người theo dõi

Chiến lược đột phá gây sốc xu hướng đơn phương

Tổng quan

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.

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

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.

Phân tích lợi thế

Chiến lược này có một số lợi thế:

  1. Sử dụng các kênh giá để xác định xu hướng, có thể làm giảm khả năng phá vỡ giả
  2. Thêm vào đó, các nhà đầu tư cũng có thể tham gia vào các hoạt động kinh doanh.
  3. Sự đột phá của thực thể như một tín hiệu bổ sung để tăng độ chính xác nhập cảnh
  4. Cài đặt mục tiêu dừng, có thể chủ động dừng

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro:

  1. Các tham số kênh giá được thiết lập không đúng cách có thể dẫn đến phạm vi kênh quá lớn hoặc quá nhỏ
  2. Hành động đảo ngược trong xu hướng mạnh có thể gây ra tổn thất lớn
  3. Khả năng đột nhập có thể tạo ra tín hiệu giả.
  4. Chế độ dừng không đúng, có thể làm giảm lợi nhuận

Để 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.

Hướng tối ưu hóa

Chiến lược này cũng có thể được tối ưu hóa theo các hướng sau:

  1. Tăng các chỉ số đánh giá xu hướng để đảm bảo tính chính xác của đánh giá xu hướng
  2. Tối ưu hóa các tham số đột phá của thực thể, giảm tỷ lệ tín hiệu giả đầu
  3. Thời gian nhập cảnh kết hợp với nhiều chỉ số lọc
  4. Động thái điều chỉnh vị trí dừng

Tóm tắt

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.

Mã nguồn chiến lược
/*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)