Découverte de l'oscillation - Stratégie de modification de la structure du marché

Auteur:ChaoZhang est là., Date: 2023-12-05 15:17:01 Je suis désolé.
Les étiquettes:

img

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 la stratégie

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.

Analyse des avantages

Les avantages de cette stratégie sont les suivants:

  1. L'utilisation de relations entre échéanciers évite d'être induit en erreur par le bruit d'un même échéancier.

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

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

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

Analyse des risques

Les principaux risques de cette stratégie sont les suivants:

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

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

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

Directions d'optimisation

D'autres orientations d'optimisation de la stratégie incluent:

  1. Ajouter des filtres de tendance pour éviter les signaux incorrects lors de l'inversion de tendance.

  2. Optimiser la correspondance des paramètres de la période pour améliorer la qualité du signal.

  3. Utilisez l'apprentissage automatique pour un profit/stop loss optimal.

  4. Ajoutez des filtres supplémentaires comme une tendance à plus long terme.

  5. Élargir les variantes stratégiques pour former un ensemble stratégique.

Conclusion

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

Plus de