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.
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.
Những lợi thế của chiến lược này là:
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.
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.
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.
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 đó.
Những rủi ro chính của chiến lược này là:
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.
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.
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.
Các hướng tối ưu hóa khác cho chiến lược bao gồm:
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.
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.
Sử dụng máy học để tối ưu lợi nhuận / dừng lỗ.
Thêm các bộ lọc bổ sung như xu hướng khung thời gian lớn hơn.
Mở rộng các biến thể chiến lược để tạo thành tập thể chiến lược.
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) //