
Chiến lược này áp dụng các nguyên tắc đột phá của chỉ số William, kết hợp với đường K hình dạng cụ thể, thiết kế một mô hình mở và đóng nhiều vị trí trống hiệu quả, do đó, có thể làm nhiều lỗ hổng chính xác tại các điểm quan trọng khi thị trường đảo ngược, bắt được xu hướng đường ngắn trung bình, thu được lợi nhuận dư thừa.
Chiến lược này sử dụng các điểm phân tách trong chỉ số William để đánh giá tín hiệu đảo ngược. Khi phân tách trên hoặc dưới xuất hiện, tín hiệu giao dịch sẽ được tạo ra nếu phù hợp với hướng của thực thể K-line.
Cụ thể, chiến lược đã xác định một chỉ số tùy chỉnh WMX Williams Fractals. Chỉ số này sử dụng hàm nhân để xác định phân loại trên (upFractal) và phân loại dưới (dnFractal).
Lý luận phân loại trên là: giá trị tối đa của dòng K hiện tại cao hơn giá trị tối đa của n gốc K trước đó (n là tham số điều chỉnh), do đó tạo ra một phân loại vượt lên trên.
Lý luận phân loại dưới là: giá trị tối thiểu của dòng K hiện tại thấp hơn giá trị tối thiểu của dòng K gốc n trước đó, do đó tạo ra một phân loại dưới phá vỡ.
Sau khi được phân loại lên và xuống, hãy đánh giá xem chúng có thay đổi hay không, từ không đến có hoặc từ có đến không. Khi phân loại mới được hình thành, cho thấy khả năng đảo ngược cao hơn.
Sau đó kết hợp với hướng của thực thể K để xác định tín hiệu giao dịch cụ thể. Khi phân loại trên được hình thành, đóng cao hơn mở, làm nhiều; khi phân loại hiện tại được hình thành, đóng thấp hơn mở, làm trống.
Sử dụng điểm phân loại của chỉ số William để đánh giá thời điểm đảo ngược, một chỉ số kỹ thuật đã được thiết kế và đáng tin cậy
Kết hợp hướng thực thể K-line để xác nhận tín hiệu giao dịch, tránh chops hỗn loạn ở khu vực không có xu hướng
Ít tham số, chỉ cần điều chỉnh chu kỳ phân loại n, dễ kiểm tra và tối ưu hóa
Các quy tắc mở vị trí có thể được thiết lập linh hoạt, chẳng hạn như kích thước vị trí, điều kiện vị trí, dễ dàng áp dụng trên thực tế
Sau khi phân loại, thị trường có thể không hoàn toàn đảo ngược, cần kết hợp xu hướng.
Cài đặt vị trí dừng lỗ cần thận trọng để tránh bị hư hỏng bởi tiếng ồn lớn
Các tham số n cần được điều chỉnh theo các giống khác nhau, nếu chu kỳ quá lớn hoặc quá nhỏ sẽ ảnh hưởng đến hiệu quả
Giải pháp:
Các chỉ số như đường trung bình di chuyển có thể được thêm vào để đánh giá xu hướng lớn, tránh mở vị trí ngược
Động theo dõi dừng lỗ hoặc thiết lập hạn chế rút tiền hợp lý để dừng lỗ
Sử dụng phương pháp Walk Forward Analysis để tối ưu hóa tham số và tìm tham số tốt nhất
Chiến lược đảo ngược dựa trên phân loại dễ tạo ra tình huống sau khi lợi nhuận nhiều lần lại bị đảo ngược dẫn đến thua lỗ. Bạn có thể xem xét thêm bộ lọc xu hướng, hạn chế hơn nữa phạm vi giao dịch, giảm giao dịch đảo ngược không cần thiết.
Các phương thức dừng hiện tại khá đơn giản, không thể theo dõi hiệu quả. Bạn có thể thử thêm các phương thức dừng như dừng di chuyển, dừng thời gian, dừng động.
Hiện tại chỉ đánh giá hướng thực tế của đường K. Nếu tính đến nhiều thông tin về đường K hơn, như đường bóng, vị trí của quạt, tín hiệu giao dịch chính xác hơn có thể được thiết kế.
Chiến lược này thuộc về chiến lược đảo ngược dựa trên chỉ số kỹ thuật. Nó sử dụng phân loại của chỉ số William để nắm bắt xu hướng thay đổi của cổ phiếu trong chỉ số tại các thời điểm quan trọng, kết hợp với các thực thể K-line để tạo ra tín hiệu giao dịch với mục đích đạt được lợi nhuận vượt trội.
So với các chiến lược đảo ngược khác, chiến lược này được thiết kế theo tham số, logic rõ ràng, dễ hiểu, điều chỉnh tham số thuận tiện, dễ kiểm tra, có thể được đưa vào hoạt động trực tiếp. Bước tiếp theo bằng cách đánh giá xu hướng, cách dừng lỗ, có thể đạt được hiệu quả chiến lược tốt hơn.
/*backtest
start: 2023-11-14 00:00:00
end: 2023-12-14 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © WMX_Q_System_Trading
//@version=4
SystemName="WMX Williams Fractals strategy V4"
InitCapital = 1000000
InitPosition = 100
InitCommission = 0.075
InitPyramidMax = 10
strategy(title=SystemName, shorttitle=SystemName, overlay=true, initial_capital=InitCapital, default_qty_type=strategy.percent_of_equity, default_qty_value=InitPosition, commission_type=strategy.commission.percent, commission_value=InitCommission)
//study("WMX Williams Fractals", shorttitle="WMX Fractals", format=format.price, precision=0, overlay=true)
// Define "n" as the number of periods and keep a minimum value of 2 for error handling.
n = input(title="Periods", defval=2, minval=2, type=input.integer)
h=close
l=close
factorh(High)=>
upFractal = ( (High[n+2] < High[n]) and (High[n+1] < High[n]) and (High[n-1] < High[n]) and (High[n-2] < High[n]))
or ( (High[n+3] < High[n]) and (High[n+2] < High[n]) and (High[n+1] == High[n]) and (High[n-1] < High[n]) and (High[n-2] < High[n]))
or ( (High[n+4] < High[n]) and (High[n+3] < High[n]) and (High[n+2] == High[n]) and (High[n+1] <= High[n]) and (High[n-1] < High[n]) and (High[n-2] < High[n]))
or ( (High[n+5] < High[n]) and (High[n+4] < High[n]) and (High[n+3] == High[n]) and (High[n+2] == High[n]) and (High[n+1] <= High[n]) and (High[n-1] < High[n]) and (High[n-2] < High[n]))
or ((High[n+6] < High[n]) and (High[n+5] < High[n]) and (High[n+4] == High[n]) and (High[n+3] <= High[n]) and (High[n+2] == High[n]) and (High[n+1] <= High[n]) and (High[n-1] < High[n]) and (High[n-2] < High[n]))
upFractal
upFractal=factorh(h)
factorl(Low)=>
dnFractal = ( (Low[n+2] > Low[n]) and (Low[n+1] > Low[n]) and (Low[n-1] > Low[n]) and (Low[n-2] > Low[n]))
or ( (Low[n+3] > Low[n]) and (Low[n+2] > Low[n]) and (Low[n+1] == Low[n]) and (Low[n-1] > Low[n]) and (Low[n-2] > Low[n]))
or ( (Low[n+4] > Low[n]) and (Low[n+3] > Low[n]) and (Low[n+2] == Low[n]) and (Low[n+1] >= Low[n]) and (Low[n-1] > Low[n]) and (Low[n-2] > Low[n]))
or ( (Low[n+5] > Low[n]) and (Low[n+4] > Low[n]) and (Low[n+3] == Low[n]) and (Low[n+2] == Low[n]) and (Low[n+1] >= Low[n]) and (Low[n-1] > Low[n]) and (Low[n-2] > Low[n]))
or ((Low[n+6] > Low[n]) and (Low[n+5] > Low[n]) and (Low[n+4] == Low[n]) and (Low[n+3] >= Low[n]) and (Low[n+2] == Low[n]) and (Low[n+1] >= Low[n]) and (Low[n-1] > Low[n]) and (Low[n-2] > Low[n]))
dnFractal=factorl(l)
U=valuewhen(upFractal[0]!= upFractal[1],l[0],3)
L=valuewhen(dnFractal[0]!=dnFractal[1],h[0],3)
longcon=crossover(close ,L) and close>open
shortcon=crossunder(close ,U) and close<open
if longcon
strategy.entry("Long", strategy.long, when = strategy.position_size <= 0 )
if shortcon
strategy.entry("Short", strategy.short, when = strategy.position_size >= 0 )