WMX Williams Fractals Reversal Pivot Chiến lược

Tác giả:ChaoZhang, Ngày: 2023-12-15 10:37:01
Tags:

img

Tổng quan

Chiến lược này áp dụng nguyên tắc đột phá fractal chỉ số Williams và kết hợp các mô hình đường K cụ thể để thiết kế một mô hình mở và đóng dài và ngắn hiệu quả. Nó có thể chính xác đi dài và ngắn tại các điểm đảo ngược chính của các biến động thị trường để nắm bắt xu hướng trung hạn và ngắn hạn và có được lợi nhuận dư thừa.

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

Chiến lược này sử dụng các điểm fractal trong chỉ số Williams để xác định tín hiệu đảo ngược. Khi một fractal trên hoặc dưới xuất hiện và nó phù hợp với hướng thực thể đường K, một tín hiệu giao dịch được tạo ra.

Cụ thể, một chỉ số tùy chỉnh được gọi là WMX Williams Fractals được xác định trong chiến lược. Nó sử dụng các hàm nhân để xác định fractal trên cùng (upFractal) và fractal dưới (dnFractal).

Lý thuyết fractal trên cùng là: giá cao nhất của đường K hiện tại cao hơn giá cao nhất của n đường K trước đó (n là một tham số có thể điều chỉnh), do đó tạo thành một fractal đột phá bên trên.

Lý thuyết fractal dưới cùng là: giá thấp nhất của đường K hiện tại thấp hơn giá thấp nhất của n đường K trước đó, do đó tạo thành một fractal phá vỡ bên dưới.

Sau khi có được các fractal trên cùng và dưới cùng, xác định xem chúng có thay đổi hay không, tức là từ không đến tồn tại hoặc ngược lại.

Sau đó, kết hợp với hướng thực thể đường K để xác định các tín hiệu giao dịch cụ thể. Khi fractal trên được hình thành và Close cao hơn Open, đi dài. Khi fractal dưới được hình thành và Close thấp hơn Open, đi ngắn.

Ưu điểm chiến lược

  1. Sử dụng các điểm phân đoạn chỉ số Williams để xác định thời gian đảo ngược.

  2. Kết hợp hướng thực thể đường K để xác nhận tín hiệu giao dịch và tránh các khu vực không có xu hướng.

  3. Một số tham số chỉ cần điều chỉnh thời gian fractal n, dễ kiểm tra và tối ưu hóa.

  4. Cài đặt linh hoạt cho các quy tắc mở vị trí như kích thước vị trí, điều kiện đóng cửa, v.v., dễ áp dụng trong giao dịch trực tiếp.

Rủi ro chiến lược

  1. Sau khi các hình thức fractal, thị trường có thể không hoàn toàn đảo ngược, cần phải kết hợp với đánh giá xu hướng.

  2. Việc thiết lập vị trí dừng lỗ cần phải thận trọng để tránh bị đánh bại bởi các động thái biến động lớn ồn ào.

  3. Các thông số n cần phải điều chỉnh cho các sản phẩm khác nhau. Nếu khoảng thời gian quá lớn hoặc quá nhỏ nó sẽ ảnh hưởng đến kết quả.

Giải pháp:

  1. Có thể thêm các chỉ số như trung bình động để đánh giá xu hướng chính, tránh giao dịch chống lại xu hướng.

  2. Sử dụng stop loss theo dõi động hoặc đặt stop loss dựa trên drawdown hợp lý.

  3. Sử dụng Phân tích Tiến về phía trước để tối ưu hóa các thông số và tìm ra các giá trị tối ưu.

Hướng dẫn tối ưu hóa chiến lược

  1. Các chiến lược đảo ngược fractal có xu hướng tạo ra nhiều lợi nhuận sau đó đảo ngược lại để tạo ra lỗ. Có thể xem xét thêm các bộ lọc xu hướng để hạn chế phạm vi giao dịch hơn nữa và giảm các giao dịch đảo ngược không cần thiết.

  2. Phương pháp dừng lỗ đơn giản hiện tại không thể theo dõi hiệu quả các chuyển động của thị trường. Có thể thử các kỹ thuật dừng lỗ tiên tiến hơn như dừng lỗ di chuyển, dừng lỗ dựa trên thời gian, dừng lỗ động v.v.

  3. Hiện tại chỉ sử dụng hướng thực thể K-line. Nếu xem xét thêm thông tin K-line như mâm và vị trí gần, có thể thiết kế tín hiệu giao dịch chính xác hơn.

Kết luận

Đây là một chiến lược đảo ngược dựa trên các chỉ số kỹ thuật. Nó sử dụng các fractal chỉ số Williams để nắm bắt những thay đổi trong xu hướng của cơ sở tại các điểm pivot chính, kết hợp với hướng thực thể K-line để tạo ra các tín hiệu giao dịch, nhằm đạt được lợi nhuận vượt quá.

So với các chiến lược đảo ngược khác, chiến lược này có thiết kế tham số hóa để có logic rõ ràng và dễ hiểu. Nó có điều chỉnh tham số linh hoạt để kiểm tra thuận tiện và có thể được áp dụng trực tiếp trong giao dịch trực tiếp.


/*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 )
        






Thêm nữa