
Cette stratégie est un système de trading à plusieurs périodes, basé sur la classification de Lorentz, combinant un prix cible et un mécanisme de stop-loss dynamique. Elle utilise les moyennes mobiles (EMA) et les indices de classement (CI) pour identifier les tendances du marché et effectuer une analyse croisée sur les périodes de temps élevé et les périodes de temps actuelles.
Le cœur de la stratégie est la classification de Lorentz, qui combine une moyenne mobile triple indice (EMA) et un indice de classification (CI) pour générer un signal de transaction. Les étapes sont les suivantes:
Les stratégies calculent la ligne de Lorentz à la fois sur la période actuelle et sur les périodes supérieures pour fournir une perspective multidimensionnelle du marché. Les signaux de transaction sont basés sur la croisée des prix avec la ligne de Lorentz et sont confirmés par un mécanisme de rétroaction. Les signaux d’achat sont déclenchés lorsque le prix traverse la ligne de Lorentz et que le prix le plus bas de la période de rétroaction est inférieur à la ligne de Lorentz.
La stratégie a également introduit un mécanisme de prix cible qui détermine le point de sortie en fonction du pourcentage de cible fixé par l’utilisateur. Parallèlement, il a également réalisé un stop loss dynamique pour contrôler le risque.
Analyse de plusieurs périodes: en combinant les lignes de Lorentz des périodes actuelles et plus élevées, la stratégie permet de capturer des tendances de marché plus complètes et de réduire les faux signaux.
Identification dynamique des tendances: la classification de Lorentz est capable de s’adapter rapidement aux changements du marché et offre une capacité d’identification de tendances sensible.
Mécanisme de confirmation des signaux: utilisation d’une période de rétroaction pour confirmer les signaux de transaction, réduisant efficacement la probabilité d’une transaction erronée.
Optimisation des prix cibles: en définissant des pourcentages cibles, la stratégie permet de maximiser les bénéfices dans des conditions favorables.
Gestion des risques: introduction d’un mécanisme de stop loss dynamique permettant de contrôler efficacement le risque de chaque transaction.
Visualisation et statistiques: les stratégies offrent une présentation graphique intuitive et des statistiques de négociation qui permettent aux traders d’analyser et d’optimiser la performance des stratégies.
Flexibilité: plusieurs paramètres réglables permettent aux traders d’optimiser en fonction des différentes conditions du marché et des préférences personnelles.
Sensitivité des paramètres: la performance d’une stratégie dépend fortement de la sélection des paramètres d’entrée. Une mauvaise configuration des paramètres peut entraîner une survente des transactions ou des opportunités manquées.
Dépendance aux conditions du marché: dans un marché en crise, la stratégie peut générer de fréquents faux signaux, entraînant des pertes continues.
Risque de glissement: dans un marché qui fluctue rapidement, le prix d’exécution réel peut être significativement différent du prix du signal.
Risque d’optimisation excessive: un ajustement excessif des paramètres pour s’adapter aux données historiques peut entraîner une suradaptation et affecter les performances futures du disque dur.
Les défaillances techniques: les défaillances du système ou les erreurs de données peuvent entraîner des décisions de transaction erronées en fonction de calculs complexes d’indicateurs techniques.
Pour réduire ces risques, il est recommandé de:
Ajustement dynamique des paramètres: un mécanisme d’ajustement des paramètres adaptatifs est mis en œuvre pour ajuster automatiquement la longueur et la valeur de la barre d’ouverture de l’EMA en fonction de la volatilité du marché.
Ajout de filtres: introduire des indicateurs techniques ou fondamentaux supplémentaires comme filtres pour améliorer la qualité du signal.
Intégration de l’apprentissage automatique: optimisation du processus de sélection des paramètres et de génération de signaux à l’aide d’algorithmes d’apprentissage automatique.
Analyse de la corrélation entre plusieurs variétés: les données de plusieurs variétés concernées sont prises en compte pour fournir une perspective plus globale du marché.
L’intégration des événements d’actualité: ajout d’une fonctionnalité d’analyse des événements d’actualité pour ajuster les actions stratégiques lors de la publication de données économiques importantes.
Adaptation à la volatilité: le pourcentage et le niveau de stop loss sont ajustés en fonction de la dynamique de la volatilité du marché.
Amélioration de la gestion des risques: mise en place de stratégies de gestion des positions et de contrôle des risques plus complexes, telles que l’ajustement des positions en fonction de la volatilité.
Ces orientations d’optimisation visent à améliorer l’adaptabilité et la stabilité des stratégies, leur permettant de rester performantes dans différentes conditions de marché.
La stratégie d’objectifs multi-temporels de la classification de Lorenz est un système de négociation intégré qui combine des méthodes d’analyse technique avancées et un mécanisme de gestion des risques intelligent. Grâce à l’analyse multi-temporelle, à l’identification des tendances dynamiques et à l’optimisation des prix cibles, la stratégie a le potentiel d’obtenir une performance de négociation stable dans une variété de conditions de marché. Cependant, elle est également confrontée à des défis tels que la sensibilité aux paramètres et la dépendance du marché.
/*backtest
start: 2023-07-31 00:00:00
end: 2024-07-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Lorenzian Classification Strategy with Target and Multi-Timeframe", overlay=true)
// Input parameters
length = input.int(5, "Lorenzian Length", minval=1)
threshold = input.float(1.0, "Threshold", step=0.1)
lookback = input.int(3, "Lookback Candles", minval=1, maxval=20)
targetPercentage = input.float(1.5, "Target Percentage (%)", step=0.1) // Target percentage for exit
higherTimeframe = input.timeframe("D", "Higher Timeframe") // Higher timeframe for multi-timeframe analysis
// Lorenzian Classification calculation for current timeframe
ema1 = ta.ema(hlc3, length)
ema2 = ta.ema(ema1, length)
ema3 = ta.ema(ema2, length)
d = ema1 - ema2
ci = d / (0.015 * ta.ema(math.abs(d), length)) * 100
lorenzian = ema3 + ci
// Lorenzian Classification calculation for higher timeframe
hlc3_htf = request.security(syminfo.tickerid, higherTimeframe, (high + low + close)/3 )
ema1_htf = ta.ema(hlc3_htf, length)
ema2_htf = ta.ema(ema1_htf, length)
ema3_htf = ta.ema(ema2_htf, length)
d_htf = ema1_htf - ema2_htf
ci_htf = d_htf / (0.015 * ta.ema(math.abs(d_htf), length)) * 100
lorenzian_htf = ema3_htf + ci_htf
// Signal generation
crossUp = ta.crossover(close, lorenzian)
crossDown = ta.crossunder(close, lorenzian)
// Determine color based on price position relative to the line
lineColor = close > ema3 ? color.green : color.red
lineColorH = close > ema3_htf ? color.blue : color.red
// Plot the line with dynamic color
plot(ema3, color=lineColor, title="EMA3", linewidth=2)
plot(ema3_htf, color=lineColorH, title="EMA3 HTF", linewidth=2)
// Function to check for opposite movement
oppositeMove(isLong) =>
if isLong
lowest = ta.lowest(low, lookback)
lowest < lorenzian[lookback]
else
highest = ta.highest(high, lookback)
highest > lorenzian[lookback]
// Generate buy and sell signals
buySignal = crossUp and oppositeMove(true)
sellSignal = crossDown and oppositeMove(false)
// Calculate and manage target price
var float targetPrice = na
var float plotTargetPrice = na
var float entryPrice = na
// Variables to track trade outcomes
var int targetMet = 0
var int targetNotMet = 0
var int totalTrades = 0
if (buySignal)
strategy.entry("Buy", strategy.long)
entryPrice := close
targetPrice := entryPrice * (1 + targetPercentage/100)
plotTargetPrice := targetPrice
totalTrades := totalTrades + 1
if (sellSignal)
strategy.entry("Sell", strategy.short)
entryPrice := close
targetPrice := entryPrice * (1 - targetPercentage/100)
plotTargetPrice := targetPrice
totalTrades := totalTrades + 1
// Check if target price is met to exit
if (not na(targetPrice))
if (strategy.position_size > 0 and high >= targetPrice) // Long position exit condition
strategy.close("Buy")
targetPrice := na
entryPrice := na
targetMet := targetMet + 1
else if (strategy.position_size > 0 and low < entryPrice * (1 - targetPercentage/100)) // Stop loss for long
strategy.close("Buy")
targetPrice := na
entryPrice := na
targetNotMet := targetNotMet + 1
if (strategy.position_size < 0 and low <= targetPrice) // Short position exit condition
strategy.close("Sell")
targetPrice := na
entryPrice := na
targetMet := targetMet + 1
else if (strategy.position_size < 0 and high > entryPrice * (1 + targetPercentage/100)) // Stop loss for short
strategy.close("Sell")
targetPrice := na
entryPrice := na
targetNotMet := targetNotMet + 1
// Reset plotTargetPrice when position is closed
if (strategy.position_size == 0)
plotTargetPrice := na
// Plot signals and target price
plotshape(buySignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(sellSignal, title="Sell Signal", location=location.abovebar, color=color.purple, style=shape.triangledown, size=size.small)
plot(plotTargetPrice, color=color.yellow, title="Target Price", style=plot.style_circles, linewidth=2)
// Add alerts
alertcondition(buySignal, title="Buy Signal", message="Lorenzian Buy Signal")
alertcondition(sellSignal, title="Sell Signal", message="Lorenzian Sell Signal")
// Calculate success percentage
successPercentage = totalTrades > 0 ? (targetMet / totalTrades) * 100 : 0
// Create a table to display trade outcomes
var table tradeStats = table.new(position.top_right, 2, 3, border_width=1)
table.cell(tradeStats, 0, 0, "Targets Met", bgcolor=color.new(color.green, 30))
table.cell(tradeStats, 1, 0, "Targets Missed", bgcolor=color.new(color.red, 30))
table.cell(tradeStats, 0, 1, str.tostring(targetMet), bgcolor=color.new(color.green, 30))
table.cell(tradeStats, 1, 1, str.tostring(targetNotMet), bgcolor=color.new(color.red, 30))
table.cell(tradeStats, 0, 2, "Success Rate", bgcolor=color.new(color.blue, 30))
table.cell(tradeStats, 1, 2, str.tostring(successPercentage, "#.##") + "%", bgcolor=color.new(color.blue, 30))