Chiến lược đảo ngược thị trường quan trọng


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

Chiến lược đảo ngược thị trường quan trọng

Tổng quan

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.

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

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.

Lợi thế chiến lược

  1. 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

  2. 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

  3. Í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

  4. 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ế

Rủi ro chiến lược

  1. 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.

  2. 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

  3. 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:

  1. 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

  2. Độ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ỗ

  3. 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

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

  1. 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.

  2. 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.

  3. 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ế.

Tóm tắt

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.

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