Chiến lược đột phá dao động


Ngày tạo: 2023-10-20 16:37:28 sửa đổi lần cuối: 2023-10-20 16:37:28
sao chép: 0 Số nhấp chuột: 943
1
tập trung vào
1617
Người theo dõi

Chiến lược đột phá dao động

Tổng quan

Chiến lược này sử dụng chỉ số ZigZag để vẽ các đường hỗ trợ và kháng cự, và thực hiện các hoạt động tháo hoặc tháo tương ứng khi giá vượt qua đường hỗ trợ hoặc kháng cự.

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

Chiến lược này đầu tiên sử dụng chỉ số ZigZag để vẽ đường hình Z dưới các tham số cụ thể. Sau đó vẽ đường hỗ trợ màu xanh lá cây khi chỉ số ZigZag xuất hiện ở đáy, vẽ đường kháng cự màu đỏ khi xuất hiện ở trên cùng.

Cụ thể, logic cốt lõi của chiến lược này là:

  1. Sử dụng ema để thực hiện trung bình di chuyển chỉ số ba lần với giá gần, để có được đường cong mịn.

  2. Xác định liệu đường cong trơn có tăng lên hay không, nếu tăng lên và đường K trước không tăng lên, hãy ghi là đáy, lấy giá trị thấp nhất của đường K này. Nếu giảm xuống và đường K trước tăng lên, hãy ghi là đỉnh, lấy giá trị cao nhất của đường K này. Nếu không, là NaN.

  3. Quá trình này được lặp lại để tạo ra một đường zigzag.

  4. Khi zigzag tăng, ghi là điểm trên hiện tại; khi giảm, ghi là điểm dưới hiện tại.

  5. Khi điểm tăng lên, vẽ đường hỗ trợ màu xanh lá cây uplevel; khi điểm giảm xuống, vẽ đường kháng cự màu đỏ dnlevel。

  6. Khi giá vượt qua đường màu xanh lá cây, hãy làm nhiều hơn, và khi vượt qua đường màu đỏ, hãy làm trống.

Phân tích lợi thế

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

  1. Sử dụng chỉ số ZigZag để xác định các điểm kháng cự hỗ trợ quan trọng, thường có ý nghĩa quan trọng.

  2. ZigZag xóa đi một số tiếng ồn trong thị trường, làm cho tín hiệu giao dịch rõ ràng hơn.

  3. Những người tham gia có thể tham gia vào các cuộc thi theo cách đột phá, có thể bắt kịp sự thay đổi của xu hướng.

  4. Đường kháng cự được vẽ đơn giản và hiệu quả.

  5. Lập luận chiến lược rõ ràng và dễ hiểu, có nhiều khả năng tối ưu hóa tham số.

  6. Có thể lựa chọn linh hoạt các loại giao dịch và chu kỳ thời gian, có khả năng thích ứ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ài đặt tham số chỉ số ZigZag không đúng có thể dẫn đến cơ hội giao dịch bị bỏ lỡ.

  2. Sau khi phá vỡ ngưỡng kháng cự hỗ trợ, có thể có thử nghiệm lại, nên thiết lập dừng lỗ để kiểm soát rủi ro.

  3. Các tín hiệu đột phá có thể bị sai lệch, nên được xác minh kết hợp với xu hướng và hình thức.

  4. Thị trường có thể bị dao động ngang trong một thời gian dài, khi đó chiến lược sẽ tạo ra quá nhiều giao dịch không hiệu quả.

  5. Cần xem xét các tác động của chi phí giao dịch và tránh giao dịch quá thường xuyên.

Các biện pháp tương ứng:

  1. Tối ưu hóa các tham số ZigZag để tìm ra sự kết hợp tham số tốt nhất.

  2. Sau khi phá vỡ, thiết lập dừng lỗ kịp thời để kiểm soát tổn thất đơn lẻ.

  3. Kết hợp với các chỉ số xu hướng, các tín hiệu lọc có thể giúp tăng độ chính xác.

  4. Thêm điều kiện để xác định thị trường đã hoàn thành, không giao dịch trong thời gian này.

  5. Cần giảm bớt mức độ phá vỡ để giảm các giao dịch không có hiệu lực.

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

Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:

  1. Tối ưu hóa các tham số ZigZag, tìm ra sự kết hợp tham số tốt nhất. Các tham số tốt nhất có thể được tìm ra bằng cách đi qua và quay trở lại.

  2. Cân nhắc khả năng kiểm tra lại vị trí kháng cự hỗ trợ sau khi đột phá, thiết lập logic thoát thử lại.

  3. Kết hợp các chỉ số xu hướng như MA để lọc các tín hiệu giao dịch có xác suất thấp.

  4. Tăng chỉ số năng lượng để xác nhận tín hiệu đột phá và tránh tín hiệu sai.

  5. Thiết lập Lachenbruch đề cập đến phương pháp dual () để lọc các tín hiệu sai và kiếm lợi nhuận.

  6. Cân nhắc sử dụng các thuật toán như học máy để tối ưu hóa các tham số động.

  7. Tham gia chiến lược dừng lỗ, thiết lập điểm dừng lỗ để kiểm soát rủi ro.

Tóm tắt

Chiến lược này nói chung là một chiến lược phá vỡ chấn động đơn giản và thực tế. Nó sử dụng chỉ số ZigZag để vẽ đường hỗ trợ và kháng cự và hành động khi giá vượt qua các đường này. Chiến lược có khả năng thích ứng mạnh mẽ, nhưng cũng có một số rủi ro.

Mã nguồn chiến lược
/*backtest
start: 2022-10-13 00:00:00
end: 2023-10-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
// strategy(title = "Noro's ZZ-2 Strategy", shorttitle = "Noro's ZZ-2 Strategy", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
length = input(4, title = "ZigZag length")
Extreme = input(4, title = "ZigZag extreme")
src = input(close, title = "Source")
showzz = input(false, defval = false, title = "Show ZigZag")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//ZigZag
f_zz(_length, _detection)=>
    _hls = ema(ema(ema(src, _length), round(_length*0.66)), round(_length*0.33))
    _isRising = _hls >= _hls[1]
    _zigzag = _isRising and not _isRising[1] ? lowest(_detection) :  not _isRising and _isRising[1] ? highest(_detection) : na
zigzag = f_zz(length, Extreme)
zzcol = showzz ? black : na
plot(zigzag, color = zzcol, linewidth = 2)

//Levels
dot = 0.0
dot := zigzag > 0 ? zigzag : dot[1]
uplevel = 0.0
uplevel := dot > dot[1] ? zigzag : uplevel[1]
dnlevel = 0.0
dnlevel := dot < dot[1] ? zigzag : dnlevel[1]
upcol = na
upcol := dot > dot[1] ? na : lime
plot(uplevel, color = upcol, linewidth = 2)
dncol = na
dncol := dot < dot[1] ? na : red
plot(dnlevel, color = dncol, linewidth = 2)

//Trading
lot = 0.0
lot := strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]
if dot > 0
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = uplevel)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = dnlevel)