
Il s’agit d’une stratégie de négociation basée sur des moyennes mobiles à indices multiples (EMA), combinant suivi de tendance, confirmation de mouvement et système d’alerte aux fluctuations. La stratégie utilise principalement les signaux croisés EMA de 5, 10, 15, 20, 50 et 200 jours pour déterminer la direction du marché, tout en concevant un mécanisme d’alerte à la période de refroidissement et au risque intelligent pour aider les traders à ouvrir leurs positions au bon moment.
La logique centrale de la stratégie est basée sur la confirmation de plusieurs croisements EMA et de tendances:
Le mécanisme de jugement des tendances: juger de la tendance du marché par la position relative de l’EMA du 10 au 20 et par la relation entre le cours de clôture et l’EMA du 50 . La tendance est à la hausse lorsque l’EMA du 10 est au-dessus de l’EMA du 20 et que le cours de clôture est supérieur à l’EMA du 50; inversement, la tendance est à la baisse.
Confirmation du moteur: La stratégie a introduit l’EMA à 5 jours comme indicateur de la dynamique à court terme. Dans les signaux de hausse, l’EMA à 5 jours est requise au-dessus du précédent cycle et au-dessus de l’EMA à 10 jours; dans les signaux de baisse, l’EMA à 5 jours est requise au-dessous du précédent cycle et au-dessous de l’EMA à 10 jours, afin de s’assurer que la direction des transactions est cohérente avec la dynamique à court terme.
Règles d’entrée et de sortie intelligentes:
Mécanisme de période de refroidissement: La stratégie a conçu un réglage flexible de la période de refroidissement, avec 2 cycles par défaut, pour éviter les transactions fréquentes provoquées par l’ouverture immédiate de la position après la clôture de la position. L’utilisateur peut ajuster ce paramètre en fonction des caractéristiques du marché.
Système d’alerte aux risquesA: En calculant le pourcentage de variation entre l’EMA des 5 jours et l’EMA des 10 jours, le risque de liquidation automatique est déclenché lorsque le taux de variation le plus récent est supérieur à 2,5 fois le taux de variation moyen des 5 cycles précédents et que la variation actuelle est inférieure à celle du cycle précédent.
Confirmation de tendances à plusieurs niveauxLa stratégie combine des moyennes mobiles à court terme (5 et 10 jours), à moyen terme (15 et 20 jours) et à long terme (50 et 200 jours) pour évaluer globalement la situation des tendances du marché.
Adaptation dynamique: La stratégie est capable de changer automatiquement de direction de négociation en fonction des changements de tendance du marché, de rechercher des opportunités de hausse dans les marchés à la hausse et de baisse dans les marchés à la baisse, et possède une bonne adaptabilité au marché.
Amélioration des mécanismes de gestion des risquesLe système d’alerte précoce est capable de détecter les fluctuations anormales du marché, d’émettre des alertes en temps opportun et de choisir de fermer automatiquement les positions, ce qui permet de contrôler efficacement le risque de retrait. Le mécanisme de période de refroidissement évite les transactions excessives et réduit les coûts de transaction et le risque de transactions émotionnelles.
Personnalisation des paramètres: La stratégie offre de nombreuses options de paramétrage, permettant à l’utilisateur d’ajuster des paramètres clés tels que le cycle EMA, la durée du temps de refroidissement et la sensibilité aux alertes en fonction de l’environnement du marché et des préférences de risque personnelles.
Signaux de négociation visuels: La stratégie indique clairement le signal de négociation par la forme et la couleur, la flèche verte indique le signal haussier, la flèche rouge indique le signal baissier, le triangle inférieur indique la direction de la tendance actuelle, ce qui rend la décision de négociation intuitive.
Décalage de la moyenne: Les moyennes mobiles sont essentiellement des indicateurs en retard, et peuvent entraîner des retards dans les signaux d’entrée et de sortie dans les marchés instables ou les marchés à retournement rapide, ce qui entraîne des pertes potentielles. Pour atténuer ce risque, l’introduction d’indicateurs de pointe peut être envisagée comme confirmation auxiliaire.
Risque de fausse percée: Bien que la stratégie utilise plusieurs croisements de la moyenne et la confirmation de la dynamique pour réduire les faux signaux, il est possible que des signaux erronés causés par des croisements fréquents de la moyenne se produisent pendant la phase de comptage horizontal du marché. Il est recommandé d’utiliser ou d’ajuster les paramètres avec prudence dans un environnement de marché à faible volatilité.
Risques de fortes fluctuations: En cas de forte volatilité du marché, le système d’alerte peut ne pas être en mesure de répondre en temps opportun aux fluctuations soudaines des prix. Des indicateurs de volatilité tels que l’augmentation de l’ATR (l’amplitude réelle) peuvent être envisagés et un stop loss dynamique peut être configuré pour fournir une protection supplémentaire.
piège d’optimisation des paramètres: les paramètres sur-optimisés peuvent conduire à une stratégie qui a bien fonctionné sur les données historiques mais qui échouera sur les marchés futurs. Il est recommandé de vérifier la solidité des paramètres par l’optimisation progressive et les tests hors échantillon.
Risque de reprise à long terme: La stratégie peut générer des signaux de perte en série au début d’un changement de tendance à long terme. Vous pouvez envisager d’augmenter le poids d’un indicateur de tendance à long terme tel que l’EMA à 200 jours ou de réduire la taille de la position lorsque la tendance est incertaine.
Adaptation des paramètres: Les stratégies actuelles utilisent des cycles EMA fixes et peuvent introduire des mécanismes d’adaptation pour ajuster la longueur des cycles EMA en fonction de la dynamique de la volatilité du marché. Par exemple, utiliser des cycles EMA plus longs dans les marchés à forte volatilité pour réduire le bruit et utiliser des cycles EMA plus courts dans les marchés à faible volatilité pour améliorer la sensibilité.
Analyse de plusieurs périodes: l’ajout d’une confirmation de tendance à des périodes plus élevées, la négociation uniquement dans la direction de la tendance principale, peut augmenter considérablement le taux de victoire. Par exemple, une position de vente à découvert ne peut être ouverte que lorsque la ligne du jour et le graphique des 4 heures sont en tendance haussière simultanément.
Optimisation des pertesLes conditions de placement des stratégies actuelles sont relativement simples ((EMA à 15 jours) et des mécanismes de stop loss dynamiques peuvent être introduits, tels que des stop loss sur la volatilité basés sur l’ATR ou des stop loss de suivi, afin de limiter les pertes maximales d’une seule transaction tout en conservant les bénéfices.
Intégration de la gestion des fonds: Ajout d’un ajustement de la taille de position basé sur le risque, en fonction de la volatilité du marché et de la dynamique de l’intensité des signaux de négociation pour déterminer le pourcentage de fonds pour chaque transaction, afin d’optimiser le ratio de retour sur risque global.
Complément des indicateurs émotionnelsLes indicateurs de l’émotion du marché peuvent fournir une confirmation supplémentaire, en particulier à proximité de points de support et de résistance importants.
Optimisation du machine learningL’utilisation de la technologie d’apprentissage automatique pour classer et filtrer les signaux, identifier les caractéristiques d’un environnement de négociation à taux de réussite élevé et éviter de négocier dans des conditions de marché défavorables peut améliorer considérablement la performance globale de la stratégie.
La stratégie de négociation d’alerte de dynamique de croisement de la dynamique de croisement de la dynamique de la dynamique de la dynamique de la dynamique de la dynamique de la dynamique de la dynamique de la dynamique est un système de négociation quantitative bien structuré qui crée un cadre complet pour la décision de négociation grâce à des signaux croisés de l’EMA à plusieurs niveaux, à la confirmation de la dynamique, à un mécanisme de période de refroidissement et à un système d’alerte de risque. La stratégie est excellente dans les marchés tendanciels et dispose d’un mécanisme de défense contre les fluctuations anormales du marché.
Les principaux avantages de la stratégie résident dans son système complet de jugement des tendances et son système de contrôle des risques, qui lui permettent de maintenir une performance stable dans différents environnements de marché. Cependant, en tant que système de négociation basé sur une ligne uniforme, la stratégie est toujours confrontée à des risques inhérents tels que le retard et les fausses percées.
L’optimisation future peut se concentrer sur l’adaptation des paramètres, l’analyse multi-temporelle, l’arrêt dynamique des pertes et la gestion des risques, etc., afin d’améliorer encore la robustesse et l’adaptabilité des stratégies. Par l’introduction de technologies d’apprentissage automatique et d’indicateurs de l’humeur du marché, un bond en avant dans la qualité des performances des stratégies peut être réalisé, ce qui les rend compétitives dans diverses conditions de marché.
/*backtest
start: 2024-03-24 00:00:00
end: 2024-11-14 00:00:00
period: 3h
basePeriod: 3h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=6
strategy(title='GRIM309 CallPut Strategy', shorttitle='CallsPuts Strategy', overlay=true, initial_capital=500, commission_value=0.1)
// Input parameters for EMAs
len5 = input.int(5, minval=1, title='5 EMA Length')
len10 = input.int(10, minval=1, title='10 EMA Length')
len15 = input.int(15, minval=1, title='15 EMA Length')
len20 = input.int(20, minval=1, title='20 EMA Length')
len50 = input.int(50, minval=1, title='50 EMA Length')
len200 = input.int(200, minval=1, title='200 EMA Length')
// EMA calculations
ema5 = ta.ema(close, len5)
ema10 = ta.ema(close, len10)
ema15 = ta.ema(close, len15)
ema20 = ta.ema(close, len20)
ema50 = ta.ema(close, len50)
ema200 = ta.ema(close, len200)
// Plot EMAs with specified colors
plot(ema5, title='EMA 5', color=color.lime)
plot(ema10, title='EMA 10', color=color.rgb(64, 131, 170))
plot(ema20, title='EMA 20', color=color.purple)
plot(ema50, title='EMA 50', color=color.red)
plot(ema200, title='EMA 200', color=color.white)
// Determine trend conditions
uptrend = ema10 > ema20 and close > ema50
downtrend = ema10 < ema20 and close < ema50
// Plot trend indicators at the bottom of the chart
plotshape(series=uptrend, location=location.bottom, color=color.orange, style=shape.triangleup, text='+', title='Uptrend Indicator')
plotshape(series=downtrend, location=location.bottom, color=color.orange, style=shape.triangledown, text='-', title='Downtrend Indicator')
// Position state variable
var int positionState = 0 // 0 = no position, 1 = long, -1 = short
// Cooldown period settings (dont open right after a close)
cooldownBars = input.int(2, minval=1, title='Cooldown Period (bars)')
var int barsSinceClose = na
// Additional check for EMA5 trend confirmation (optional check to see that it is already in momentum short term)
emaCheckCall = ema5 > ema5[1] and ema5 > ema10
emaCheckPut = ema5 < ema5[1] and ema5 < ema10
// Open and close conditions for calls
openCalls = uptrend and emaCheckCall and positionState == 0 and (na(barsSinceClose) or barsSinceClose >= cooldownBars)
closeCalls = positionState == 1 and (close <= ema15)
// Open and close conditions for puts
openPuts = downtrend and emaCheckPut and positionState == 0 and (na(barsSinceClose) or barsSinceClose >= cooldownBars)
closePuts = positionState == -1 and (close >= ema15)
// --- WARNING SYSTEM ---
// Calculate recent percentage differences between ema5 and ema10
diffNow = (ema5 - ema10) / ema10 * 100
diff1 = (ema5[1] - ema10[1]) / ema10[1] * 100
diff2 = (ema5[2] - ema10[2]) / ema10[2] * 100
diff3 = (ema5[3] - ema10[3]) / ema10[3] * 100
diff4 = (ema5[4] - ema10[4]) / ema10[4] * 100
diff5 = (ema5[5] - ema10[5]) / ema10[5] * 100
if diffNow < 0
diffNow:=diffNow*-1
if diff1 < 0
diff1:=diff1*-1
if diff2 < 0
diff2:=diff2*-1
if diff3 < 0
diff3:=diff3*-1
if diff4 < 0
diff4:=diff4*-1
if diff5 < 0
diff5:=diff5*-1
// Compute average of last 5 changes
avgChange = (math.abs(diff1 - diff2) + math.abs(diff2 - diff3) + math.abs(diff3 - diff4) + math.abs(diff4 - diff5)) / 4
// Check if latest change is more than double the average
isWarning = positionState != 0 and math.abs(diffNow - diff1) > 2.5 * avgChange and diffNow < diff1
// Draw warning symbol
plotshape(series=isWarning, location=location.belowbar, color=color.red, style=shape.cross, text='⚠', textcolor=color.white, title='Warning Signal')
if isWarning //optional, close position if a warning emits
if positionState == 1 // Only close calls if the last position was a long
closeCalls := true
if positionState == -1 // Only close puts if the last position was a short
closePuts := true
// Update position state and cooldown counter based on signals
if (openCalls)
strategy.entry('Long', strategy.long)
positionState := 1
barsSinceClose := na // Reset cooldown counter when opening a position
if (closeCalls)
strategy.close('Long')
positionState := 0
barsSinceClose := 0 // Start cooldown counter when closing a position
if (openPuts)
strategy.entry('Short', strategy.short)
positionState := -1
barsSinceClose := na // Reset cooldown counter when opening a position
if (closePuts)
strategy.close('Short')
positionState := 0
barsSinceClose := 0 // Start cooldown counter when closing a position
// Increment cooldown counter if it's active
if (not na(barsSinceClose))
barsSinceClose += 1
// Plot open and close signals for Calls
plotshape(series=openCalls, location=location.belowbar, color=color.green, style=shape.arrowup, text='Open', textcolor=color.white, title='Open call position')
plotshape(series=closeCalls, location=location.abovebar, color=color.green, style=shape.arrowdown, text='Close', textcolor=color.white, title='Close call position')
// Plot open and close signals for Puts
plotshape(series=openPuts, location=location.abovebar, color=color.red, style=shape.arrowdown, text='Open', textcolor=color.white, title='Open put position')
plotshape(series=closePuts, location=location.belowbar, color=color.red, style=shape.arrowup, text='Close', textcolor=color.white, title='Close put position')