Chiến lược thay đổi cấu trúc thị trường đột phá dao động


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

Chiến lược thay đổi cấu trúc thị trường đột phá dao động

Tổng quan

Chiến lược chuyển đổi cấu trúc thị trường (Oscillation Breakthrough - Market Structure Shift Strategy) là một chiến lược theo dõi xu hướng sử dụng mối quan hệ giữa các chu kỳ thời gian khác nhau để xác định sự thay đổi cấu trúc thị trường. Chiến lược này sử dụng mối quan hệ giữa các chu kỳ thời gian khác nhau như là tín hiệu chuyển đổi cấu trúc thị trường để nắm bắt hướng xu hướng mới.

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

Lập luận cốt lõi của chiến lược này là sử dụng hình thức nuốt chửng xuống và lên của thời gian chu kỳ ngắn làm tín hiệu cho sự chuyển đổi cấu trúc thị trường chu kỳ trung và dài. Cụ thể, chiến lược sẽ đồng thời giám sát các đường K của thời gian chu kỳ trung dài (chẳng hạn như đường 60 phút) và thời gian chu kỳ ngắn (chẳng hạn như đường 15 phút). Khi chu kỳ ngắn xuất hiện đường K đỏ nuốt chửng xuống và chu kỳ trung dài là đường K xanh, cho rằng cấu trúc thị trường đã chuyển đổi, làm nhiều; khi chu kỳ ngắn xuất hiện đường K xanh nuốt chửng lên và chu kỳ trung dài là đường K đỏ, cho rằng cấu trúc thị trường đã chuyển đổi, làm trống.

Sau khi đi vào hướng, chiến lược sẽ sử dụng giá cao nhất hoặc giá thấp nhất của chu kỳ ngắn như là một điểm dừng để kiểm soát rủi ro. Khi giá đóng cửa đường K chu kỳ trung và dài kích hoạt điểm dừng, chiến lược sẽ đóng cửa.

Phân tích lợi thế chiến lược

Chiến lược này có những ưu điểm sau:

  1. Dấu hiệu chuyển đổi cấu trúc thị trường đáng tin cậy. Sử dụng mối quan hệ giữa các chu kỳ khác nhau để đánh giá cấu trúc thị trường, tránh bị lừa bởi tiếng ồn của một chu kỳ.

  2. Tự động đánh giá xu hướng mới. Tự động thực hiện thêm giao dịch khi có tín hiệu chuyển đổi cấu trúc thị trường, không cần đánh giá thủ công.

  3. Kiểm soát rủi ro. Kiểm soát rủi ro bằng cách sử dụng giá thấp nhất trong thời gian ngắn, giúp kiểm soát tổn thất đơn lẻ.

  4. Kiểm soát rút lui tương đối tốt. Sử dụng các cực đoan thời gian ngắn để mở và dừng vị thế, có thể kiểm soát rút lui ở một mức độ nhất định.

Phân tích rủi ro chiến lược

Những rủi ro chính của chiến lược này là:

  1. Rủi ro phân tích sai lệch cấu trúc thị trường. Khi nhiễu ngắn quá lớn, tín hiệu chuyển đổi cấu trúc thị trường có thể không hiệu quả và cần điều chỉnh tham số chu kỳ.

  2. Rủi ro của xu hướng đảo ngược. Chiến lược này khó có thể kiểm soát việc rút lui khi thị trường có sự đảo ngược kiểu V. Các thuật toán dừng lỗ có thể được điều chỉnh thích hợp.

  3. Rủi ro của tham số không phù hợp. Các tham số chu kỳ trung và ngắn được đặt không đúng lúc, hiệu quả tín hiệu có thể không tốt, cần kiểm tra tối ưu hóa lặp đi lặp lại.

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

Chiến lược này có thể được tối ưu hóa hơn nữa theo một số hướng sau:

  1. Tăng các chỉ số tích lũy hoặc đánh giá xu hướng, tránh các tín hiệu sai trong sự đảo ngược xu hướng.

  2. Tối ưu hóa sự phù hợp của các tham số trong chu kỳ dài và ngắn, cải thiện chất lượng tín hiệu.

  3. Sử dụng các công nghệ như học máy để tối ưu hóa các thuật toán dừng lỗ.

  4. Thêm các điều kiện phụ để lọc các tín hiệu sai lệch, chẳng hạn như phán đoán xu hướng cấp độ lớn.

  5. Nâng cao các loại chiến lược, phát triển các chiến lược phái sinh, tạo ra các danh mục chiến lược.

Tóm tắt

Bước đột phá - Chiến lược chuyển đổi cấu trúc thị trường nói chung là một chiến lược theo dõi đáng tin cậy hơn. Nó có thể sử dụng sự thay đổi cấu trúc thị trường để tự động xác định hướng xu hướng mới, và kiểm soát rủi ro cũng được thực hiện tốt. Tiếp theo, chiến lược có thể được tối ưu hóa sâu hơn từ việc nâng cao chất lượng tín hiệu, tối ưu hóa điểm dừng, ngăn chặn đảo ngược, v.v., để trở thành một sản phẩm chiến lược cấp doanh nghiệp.

Mã nguồn chiến lược
/*backtest
start: 2022-11-28 00:00:00
end: 2023-12-04 00:00:00
period: 1d
basePeriod: 1h
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/
// © jl01794

//@version=5
strategy(title="ICT_MSS[PROTOTYPE]", overlay=true, initial_capital=10000, currency="USD", margin_long=15, margin_short=15, max_lines_count=500)


// INPUTS
Time_Frame  = input.timeframe("60", title="Focused Time Frame")
FTF_LTF = input.timeframe("15", title="Focused Time Frame(LTF)")
//

// SECURITY DATA [FOR ONE TIMEFRAME REFERENCE]

FTF_Close = request.security(syminfo.tickerid, Time_Frame, close)
FTF_Open = request.security(syminfo.tickerid, Time_Frame, open)
FTFLTF_High = request.security(syminfo.tickerid, FTF_LTF, ta.highest(2)) 
FTFLTF_Low = request.security(syminfo.tickerid, FTF_LTF, ta.lowest(2)) 
FTFLTF_Close = request.security(syminfo.tickerid, FTF_LTF, close)
FTFLTF_Open = request.security(syminfo.tickerid, FTF_LTF, open)

// TIME BASED CLOSE AND OPEN
_close = FTF_Close
_open = FTF_Open
_LTFclose = FTFLTF_Close
_LTFopen = FTFLTF_Open

// CANDLE STATE
greenCandle = close > open
redCandle = close < open
LTFgreenCandle = FTFLTF_Close > FTFLTF_Open
LTFredCandle = FTFLTF_Close < FTFLTF_Open

// ENGULFING TIMEFRAME REFERENCE
FTF_greenCandle = request.security(syminfo.tickerid, Time_Frame, greenCandle)
FTF_redCandle = request.security(syminfo.tickerid, Time_Frame, redCandle)
FTFLTF_greenCandle = request.security(syminfo.tickerid, FTF_LTF, LTFgreenCandle)
FTFLTF_redCandle = request.security(syminfo.tickerid, FTF_LTF, LTFredCandle)

//--------------------------------------------------------------------------------------------------------------

//ENGULFING_FTF_LTF
B_EnP_mss = FTFLTF_redCandle[1] and        // 1E PIVOT BUY
     FTFLTF_greenCandle
//


B_EnPs_mss = FTFLTF_greenCandle[1] and        // 1E PIVOT SELL
     FTFLTF_redCandle
//  

//--------------------------------------------------------------------------------------------------------------

display_LTF = timeframe.isintraday and timeframe.multiplier <= 15

//--------------------------------------------------------------------------------------------------------------

// STORED DATAS
var float EH_MSS1 = na
var float EL_MSS1 = na
var bool can_draw = false
var line l1_mss = na
var line l1s_mss = na

//--------------------------------------------------------------------------------------------------------------

// MSS BUY
if (B_EnPs_mss) and (display_LTF)                                                 
    EH_MSS1 := FTFLTF_High 
    can_draw := true                                                            
    l1_mss := line.new(bar_index, EH_MSS1, bar_index -3, EH_MSS1, color=color.purple)     
else
    if (can_draw)
        if (FTFLTF_High > EH_MSS1)                                                    
            can_draw := false                                                  
        else
            line.set_x2(l1_mss, bar_index) 
//

// MSS SELL
if (B_EnP_mss) and (display_LTF)                                                 
    EL_MSS1 := FTFLTF_Low 
    can_draw := true                                                            
    l1s_mss := line.new(bar_index, EL_MSS1, bar_index -3, EL_MSS1, color=color.purple)     
else
    if (can_draw)
        if (FTFLTF_Low < EL_MSS1)                                                    
            can_draw := false                                                  
        else
            line.set_x2(l1s_mss, bar_index) 
          

//--------------------------------------------------------------------------------------------------------------

// ORDER

// BUY
longCondition_mssB = B_EnPs_mss and FTFLTF_High and close and high[1]
openOr = FTFLTF_High 

//SELL
shortCondition_mssS = B_EnP_mss and FTFLTF_Low and close and low[1]
openOrs = FTFLTF_Low 


if (longCondition_mssB) 
    strategy.entry("Buy", strategy.long, 1, stop = openOr, when = longCondition_mssB)
//

if (shortCondition_mssS) 
    strategy.entry("Sell", strategy.short, 1, stop = openOrs, when = shortCondition_mssS)
//

// EXIT 
long_tp = open < FTFLTF_Close[1]
short_tp = open > FTFLTF_Close[1]

//if (long_tp)
    //strategy.close("Buy", qty_percent = 100, when = long_tp)
//

//if (short_tp)
    //strategy.close("Sell", qty_percent = 100, when = short_tp)
//