
Trong mã Strategy Pine, chỉ số ZigZag được sử dụng để xác nhận mức cao mới và mức thấp mới của giá. Nó hoạt động như một tín hiệu giao dịch khi giá vượt qua đường chỉ dẫn ZigZag. Dấu hiệu mua là giá đóng cửa cao hơn đường chỉ dẫn ZigZag; Dấu hiệu bán là giá đóng cửa trống khi giá đóng cửa thấp hơn đường chỉ dẫn ZigZag.
Cốt lõi của chiến lược này là sử dụng chỉ số ZigZag để định vị các điểm cực đoan của giá và hiển thị xu hướng giá. Chỉ số ZigZag được tạo thành từ các mức giá cao và thấp của Exponential Moving Average. Cụ thể, nó được xây dựng theo các bước sau:
Tính trung bình di chuyển chỉ số EMA của giá đóng bao gồm ba đường trung bình di chuyển: đường nhanh, đường trung bình và đường chậm.
Xác định liệu giá có xu hướng tăng lên không. tức là đường trung tâm hiện tại có cao hơn đường trung tâm của đường K trước đó không.
Nếu hiện tại là xu hướng tăng, hãy tìm ra mức giá thấp nhất trong chu kỳ kiểm tra, tính từ mức thấp của làn sóng trước, làm giá trị của ZigZag.
Nếu hiện tại là xu hướng giảm, hãy tìm giá cao nhất trong chu kỳ kiểm tra được tính từ đỉnh của làn sóng trước, làm giá trị của ZigZag.
Do đó, chỉ số ZigZag được tạo ra để phản ánh các điểm cực của biến động giá.
Trên cơ sở đó, chúng ta dùng đường ZigZag để đánh giá xu hướng của giá. Khi giá tăng, chúng ta làm nhiều hơn khi nó phá vỡ đường chỉ dẫn ZigZag; khi giá giảm, chúng ta phá vỡ đường chỉ dẫn ZigZag.
Các lợi thế của việc sử dụng chỉ số ZigZag để xác định xu hướng giá và theo dõi các điểm cực đoan giá như là một cơ sở đặt hàng là:
Nó có thể lọc tiếng ồn thị trường một cách hiệu quả và nắm bắt được các xu hướng chính.
Các tín hiệu giao dịch được xây dựng dựa trên sự phá vỡ của giá cao và thấp, có thể tạo ra lợi nhuận hiệu quả.
Dòng ZigZag mịn màng hơn, có thể giảm tín hiệu giả.
Dễ dàng tối ưu hóa chiến lược bằng cách điều chỉnh các tham số ZigZag.
Những rủi ro chính của chiến lược này là:
Các hoạt động lâu dài có thể bị giam giữ bởi sự biến động mạnh mẽ của thị trường.
Chỉ số ZigZag nhạy cảm với các tham số. Thiết lập không đúng có thể bỏ lỡ cơ hội giao dịch hoặc tạo ra tín hiệu giả. Cần thử nghiệm và tối ưu hóa các tham số thích hợp.
Các chiến lược theo dõi xu hướng phụ thuộc nhiều hơn vào các hoạt động của xu hướng.
Đối với các rủi ro trên, chúng ta có thể thiết lập các cơ chế dừng để kiểm soát tổn thất đơn lẻ; đồng thời điều chỉnh quy mô giữ vị trí, không theo đuổi hoạt động toàn vị trí; và cuối cùng, kết hợp các loại chiến lược khác nhau.
Chúng ta có thể tiếp tục tối ưu hóa chiến lược này bằng cách:
Tăng cơ chế dừng lỗ. Ví dụ: thiết lập dừng lỗ di chuyển hoặc dừng lỗ cho mức giá rút lui.
Kết hợp với các chỉ số khác để lọc ra. Ví dụ: chỉ số năng lượng tăng cường, đảm bảo có đủ năng lượng động; hoặc chỉ số khối lượng giao dịch, đảm bảo có tính năng tăng cân.
Cấu hình tham số khác nhau tùy thuộc vào môi trường thị trường khác nhau (ví dụ như thị trường bò và thị trường gấu).
Kiểm tra các tham số đường trung bình khác nhau của EMA để tìm ra sự kết hợp tham số tốt nhất.
Chiến lược này sử dụng chỉ số ZigZag để xác định xu hướng giá và thiết lập các vị trí theo dõi gần điểm cực đoan. Ưu điểm của nó là trật tự, lợi nhuận hiệu quả.
/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-07 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy(title = "Noro's ZigTrend Strategy v1.0", shorttitle = "ZigTrend 1.0", 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)
ExtremeDetection = input(4)
src = input(close)
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, ExtremeDetection)
plot(zigzag, color=black, linewidth=2)
//Signals
up = close > zigzag
dn = close < zigzag
//Trading
lot = 0.0
lot := strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]
if up
strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)
if dn
strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)