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

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

img

Chiến lược đột phá dao động - thay đổi cấu trúc thị trường (ICT_MSS) là một chiến lược theo xu hướng xác định sự thay đổi cấu trúc thị trường bằng cách sử dụng các mối quan hệ giữa các khung thời gian khác nhau.

Chiến lược logic

Lý thuyết cốt lõi của chiến lược này là sử dụng các mô hình ngập xuống và ngập lên trong thời gian ngắn như là tín hiệu cho sự thay đổi cấu trúc thị trường trong thời gian dài hơn. Cụ thể, chiến lược đồng thời theo dõi một khung thời gian dài hơn (ví dụ: thanh 60m) và một khung thời gian ngắn hơn (ví dụ: thanh 15m). Khi một thanh đỏ ngập xuống xuất hiện trên khung thời gian ngắn hơn trong khi thanh khung thời gian dài hơn màu xanh lá cây, nó được xác định rằng một cấu trúc thị trường đã xảy ra và một vị trí chuyển động dài được thực hiện. Khi một thanh xanh lá cây ngập lên xuất hiện trên khung thời gian ngắn hơn trong khi thanh khung thời gian dài hơn màu đỏ, nó được xác định rằng một cấu trúc thị trường chuyển đổi đã xảy ra và một vị trí ngắn được thực hiện.

Sau khi nhập vào một vị trí định hướng, chiến lược sử dụng khung thời gian ngắn cao / thấp để thiết lập dừng lỗ để kiểm soát rủi ro. Khi giá đóng thanh khung thời gian dài đạt mức lợi nhuận, chiến lược sẽ đóng vị trí để kiếm lợi nhuận.

Phân tích lợi thế

Những lợi thế của chiến lược này là:

  1. Sử dụng các mối quan hệ khung thời gian tránh bị đánh lừa bởi tiếng ồn từ một khung thời gian duy nhất.

  2. Tự động xác định hướng xu hướng mới. Thay đổi cấu trúc thị trường tự động kích hoạt các mục dài / ngắn mà không cần đánh giá thủ công.

  3. Kiểm soát rủi ro hiệu quả. Khung thời gian ngắn cao/mức thấp được sử dụng để kiểm soát rủi ro giúp hạn chế lỗ giao dịch duy nhất.

  4. Kiểm soát rút tiền tương đối tốt hơn. Sử dụng các khung thời gian cực ngắn để vào và dừng lỗ có thể giúp kiểm soát rút tiền ở một mức độ nào đó.

Phân tích rủi ro

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

  1. Nguy cơ đánh giá cấu trúc thị trường không chính xác. Các tín hiệu có thể bị hỏng khi tiếng ồn khung thời gian ngắn cao. Các tham số khung thời gian cần phải được điều chỉnh.

  2. Rủi ro đảo ngược xu hướng. Chiến lược đấu tranh để kiểm soát giảm trong khi đảo ngược hình chữ V. thuật toán dừng lỗ cần phải được điều chỉnh.

  3. Rủi ro không phù hợp các tham số. Sự kết hợp khung thời gian dài / ngắn không chính xác dẫn đến chất lượng tín hiệu kém và cần thử nghiệm tối ưu hóa.

Hướng dẫn tối ưu hóa

Các hướng tối ưu hóa khác cho chiến lược bao gồm:

  1. Thêm bộ lọc xu hướng để tránh các tín hiệu không chính xác trong quá trình đảo ngược xu hướng.

  2. Tối ưu hóa các tham số khung thời gian để cải thiện chất lượng tín hiệu.

  3. Sử dụng máy học để tối ưu lợi nhuận / dừng lỗ.

  4. Thêm các bộ lọc bổ sung như xu hướng khung thời gian lớn hơn.

  5. Mở rộng các biến thể chiến lược để tạo thành tập thể chiến lược.

Kết luận

Chiến lược ICT_MSS là một chiến lược theo xu hướng chung đáng tin cậy. Nó tự động xác định hướng xu hướng mới dựa trên sự thay đổi cấu trúc thị trường và cũng có kiểm soát rủi ro tốt được xây dựng.


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

Thêm nữa