La stratégie d'évolution de la structure du marché (ICT_MSS) est une stratégie de suivi des tendances qui identifie les changements de structure du marché en utilisant les relations entre les différents délais.
La logique de base de cette stratégie est d'utiliser des modèles d'engloutissement à la baisse et à la hausse à court terme comme signaux pour des changements de structure de marché à plus long terme. Plus précisément, la stratégie surveille simultanément un délai plus long (par exemple, 60m bars) et un délai plus court (par exemple, 15m bars). Lorsqu'une barre rouge engloutissante à la baisse apparaît sur le délai plus court tandis que la barre de délai plus long est verte, il est déterminé qu'une structure de marché s'est produite et qu'une position longue est prise. Lorsqu'une barre verte engloutissante à la hausse apparaît sur le délai plus court tandis que la barre de délai plus long est rouge, il est déterminé qu'un changement de structure de marché s'est produit et qu'une position courte est prise.
Après avoir entré dans une position directionnelle, la stratégie utilise le court laps de temps haut / bas pour définir un stop loss afin de contrôler le risque.
Les avantages de cette stratégie sont les suivants:
L'utilisation de relations entre échéanciers évite d'être induit en erreur par le bruit d'un même échéancier.
Détermine automatiquement la nouvelle direction de la tendance. Les changements de la structure du marché déclenchent automatiquement des entrées longues/courtes sans avoir besoin d'un jugement manuel.
Contrôle efficace des risques: le court laps de temps utilisé pour le contrôle des risques contribue à limiter les pertes d'une seule transaction.
L'utilisation d'extrêmes de courte durée pour l'entrée et le stop loss peut aider à contrôler les retraits dans une certaine mesure.
Les principaux risques de cette stratégie sont les suivants:
Risque d'évaluation erronée de la structure du marché. Les signaux peuvent échouer lorsque le bruit des courts délais est élevé. Les paramètres des délais doivent être ajustés.
Risque d'inversion de tendance. La stratégie a du mal à contrôler le retrait lors d'inversions en forme de V. L'algorithme de stop loss doit être ajusté.
Risque de non-conformité des paramètres: une combinaison incorrecte de temps long/court entraîne une mauvaise qualité du signal et nécessite des tests d'optimisation.
D'autres orientations d'optimisation de la stratégie incluent:
Ajouter des filtres de tendance pour éviter les signaux incorrects lors de l'inversion de tendance.
Optimiser la correspondance des paramètres de la période pour améliorer la qualité du signal.
Utilisez l'apprentissage automatique pour un profit/stop loss optimal.
Ajoutez des filtres supplémentaires comme une tendance à plus long terme.
Élargir les variantes stratégiques pour former un ensemble stratégique.
La stratégie ICT_MSS est une stratégie globale fiable de suivi des tendances. Elle détermine automatiquement une nouvelle direction de tendance basée sur les changements de la structure du marché et dispose également d'un bon contrôle des risques intégré.
/*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) //