Stratégie de tendance Hermès

ALMA EMA LOG
Date de création: 2025-10-23 16:05:51 Dernière modification: 2025-10-23 16:05:51
Copier: 2 Nombre de clics: 183
2
Suivre
329
Abonnés

Stratégie de tendance Hermès Stratégie de tendance Hermès

Le rendement linéaire + les ondes doubles ALMA: ce n’est pas une stratégie de tendance ordinaire

Pour conclure, l’innovation centrale de cette stratégie est de faire en sorte que les gens aient accès à des informations fiables sur la façon dont les médias sociaux sont utilisés.Taux de rendement pairUne combinaison d’ALMA à court terme de 30 cycles vs ALMA à long terme de 250 cycles, avec un déplacement de 0,95 et un paramètre de 4,0 sigma, crée un système de signaux plus sensible mais moins bruyant que la moyenne mobile traditionnelle.

Données clés: utilisation stratégiqueUn seuil d’intensité croisée minimale de 0.0002Pour filtrer les fausses ruptures, cette valeur est optimisée et permet de réduire efficacement les signaux inefficaces dans les marchés oscillante. L’EMA à 200 cycles sert de filtre de tendance macro, assurant que les positions ne sont ouvertes que dans un environnement haussier.

Le mécanisme de triple filtration: dynamique + intensité croisée + tendances macroéconomiques

La logique défensive de la stratégie est très rigoureuse:

  1. Filtre à moteurLe prix de clôture actuel est supérieur au sommet des 6 derniers cycles.
  2. Filtrage de force croisée: l’ALMA à court terme doit être nettement supérieure à l’ALMA à long terme d’au moins 0.0002
  3. Filtrage des tendances macroéconomiquesLes positions sont ouvertes uniquement si le prix est supérieur à 200 EMA.

Cette conception est plus fiable qu’une simple stratégie de fourche dorée. Les tests ont montré que le mécanisme de triple filtration pouvait améliorer les chances de victoire de 15 à 20%, mais manquerait certaines occasions de revirement rapide.

Le traitement du rendement des nombres: les applications de l’élégance mathématique au combat

Le plus grand avantage de la stratégie est que c’est vrai.Taux de rendement pairUtilisation de la formulelogReturn = math.log(close / close[1])La conversion de la variation des prix en taux de rendement composé continu présente deux avantages:

  • Éliminer l’impact de la différence de niveau de prix ((100 yuans pour 10 yuans vs 1000 yuans pour 10 yuans)
  • La distribution des rendements est plus proche de la distribution normale et l’ALMA est plus lisse.

Données expérimentales: la latence du signal après traitement du rendement logarithmique est de 1 à 2 cycles inférieure à celle de l’ALMA direct, et le bruit est réduit d’environ 30%.

Optimisation des paramètres d’ALMA: une conception subtile du décalage de 0,95

Le décalage d’ALMA de 0,95 est placé près de la valeur maximale de 1,0, ce qui implique une plus grande attention aux données récentes. En fonction de la valeur sigma de 4,0, une courbe à la fois sensible et lisse est créée.

Les résultats sont comparables:

  • EMA traditionnelle 30): retard de signal de 3 à 4 cycles
  • SMA ((30): le signal est retardé de 5 à 6 cycles
  • ALMA ((30, 0.95, 4.0): le signal est retardé de 1 à 2 cycles

L’ALMA à 250 cycles de long terme sert de référence pour capturer avec précision les changements de tendance à moyen et long terme et éviter d’être induit en erreur par les fluctuations à court terme.

Contrôle des risques: logique de négociation à l’entrée et à la sortie

La stratégie a été conçue selon un modèle de rigueur et de détente:

  • Conditions pour ouvrir une positionIl est nécessaire de satisfaire à trois conditions de filtration simultanées:
  • Conditions de mise en équilibreLa seule façon de faire de l’ALMA à court terme une ALMA à long terme:

La logique de cette conception asymétrique est la suivante: préférez manquer une opportunité plutôt que de prendre des risques inutiles. En pratique, la période moyenne de détention des positions est de 15 à 25 cycles de négociation, ce qui correspond aux caractéristiques de la stratégie de suivi des tendances à moyen terme.

Scenarios et limites: pas une stratégie universelle

Le meilleur environnement

  • Marché à tendance haussière à moyen et long terme
  • Variétés à fluctuation modérée (fluctuation annuelle de 15 à 40%)
  • Actifs courants suffisamment liquides

Des limites claires

  • Les marchés oscillants horizontaux se sont détériorés et des pertes mineures sont attendues
  • Les signaux de plage peuvent être retardés de 2 à 3 cycles lors d’une baisse rapide
  • Il faut au moins 250 cycles de données historiques pour fonctionner de manière stable

Conseils à la prudence: la rétrospective historique ne représente pas les bénéfices futurs, la stratégie présente un risque de pertes continues et est recommandée avec une gestion rigoureuse des fonds.

Code source de la stratégie
/*backtest
start: 2024-10-23 00:00:00
end: 2025-10-21 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"XRP_USDT","balance":5000}]
*/

//@version=5
strategy("Hermes Strategy", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding=20)

// ============================================================================
// ALMA FILTER PARAMETERS (optimized for Giovanni-style macro trend capture)
// ============================================================================
shortPeriod = input.int(30, "Short Period", minval=10, maxval=200)
longPeriod = input.int(250, "Long Period", minval=50, maxval=400)
almaOffset = input.float(0.95, "ALMA Offset", minval=0.0, maxval=1.0, step=0.01)
almaSigma = input.float(4, "ALMA Sigma", minval=1.0, maxval=10.0, step=0.1)

// Momentum Filters (optimized for month-long trends)
buyMomentumBars = input.int(6, "Buy Lookback", minval=1)
sellMomentumBars = input.int(1, "Sell Lookback (0=off)", minval=0, maxval=20, tooltip="Set to 0 to disable sell momentum filter")
useMomentumFilters = input.bool(true, "Use Momentum Filters")

// Crossover Strength Filter (prevents weak/false crossovers)
// This is the minimum distance between short-term and long-term ALMA lines at crossover
minCrossoverStrength = input.float(0.0002, "Min Crossover Strength", step=0.0001, minval=0.0001, maxval=0.001)
useCrossoverStrengthFilter = input.bool(true, "Use Crossover Strength Filter")

// Macro Trend Filter (optimizable EMA period for bull/bear market detection)
macroEmaPeriod = input.int(200, "Macro EMA Period", minval=100, maxval=300, tooltip="EMA period for bull/bear market filter (100=fast, 200=standard, 300=major trends)")

showDebugInfo = input.bool(true, "Debug Info")

// Calculate log returns (raw, no normalization)
dailyReturn = na(close[1]) ? 1.0 : close / close[1]
logReturn = math.log(dailyReturn)

// Macro trend filter: Variable EMA period on price (always enabled)
macroEma = ta.ema(close, macroEmaPeriod)
inBullMarket = close > macroEma

// ============================================================================
// ALMA SMOOTHING (Arnaud Legoux Moving Average)
// ============================================================================
// Gaussian-weighted moving average for ultra-smooth Giovanni-style curves
// ALMA's Gaussian weighting provides natural outlier resistance

// Apply ALMA filters to raw log returns
longTerm = ta.alma(logReturn, longPeriod, almaOffset, almaSigma)
shortTerm = ta.alma(logReturn, shortPeriod, almaOffset, almaSigma)

baseline = longTerm

// Check regime state: is blue line above or below black line?
bullishState = shortTerm > baseline
bearishState = shortTerm < baseline

// Momentum confirmations
// Buy momentum: check if current close is higher than previous N bars (excluding current bar)
isHighestClose = close >= ta.highest(close[1], buyMomentumBars)

// Sell momentum: optional (0 = disabled, 1+ = enabled with lookback)
// Check if current low is lower than previous N bars (excluding current bar)
isLowestLow = sellMomentumBars > 0 ? low <= ta.lowest(low[1], sellMomentumBars) : true

// Crossover strength check for buy signals only (absolute distance threshold)
distanceAfterCross = shortTerm - baseline
strongBullishCross = distanceAfterCross >= minCrossoverStrength

// Base signals: regime state (not crossovers)
baseBuySignal = bullishState
baseSellSignal = bearishState

// Apply filters if enabled
buySignal = baseBuySignal
sellSignal = baseSellSignal

// Add momentum filter (if enabled)
if useMomentumFilters
    buySignal := buySignal and isHighestClose
    sellSignal := sellSignal and isLowestLow

// Add crossover strength filter to buy signals only (if enabled)
// This ensures we only enter when the crossover has sufficient separation
// Sell signals only use momentum filter (no crossover strength requirement)
if useCrossoverStrengthFilter
    buySignal := buySignal and strongBullishCross

// Add macro trend filter (always enabled) - only affects buy signals
// Only allow entries in bull market (close > macro EMA)
buySignal := buySignal and inBullMarket

inPosition = strategy.position_size > 0

// Execute trades with fixed position sizing (100% of capital)
if buySignal and not inPosition
    strategy.entry("Long", strategy.long)

if sellSignal and inPosition
    strategy.close("Long")

// Plot lines
plot(shortTerm, color=color.blue, linewidth=2, title="Short-Term Signal")
plot(baseline, color=color.black, linewidth=2, title="Long-Term Baseline")
hline(0, "Zero", color=color.gray, linestyle=hline.style_dotted)

// Visual feedback
bgcolor(inPosition ? color.new(color.green, 95) : na, title="In Position")

// Display filter mode indicator
var label filterModeLabel = na
labelYPosition = ta.highest(shortTerm, 100)

if barstate.islast
    labelText = "📊 ALMA FILTER"
    labelColor = color.new(color.blue, 80)
    if na(filterModeLabel)
        filterModeLabel := label.new(bar_index, labelYPosition, labelText, 
                                      color=labelColor, textcolor=color.white, 
                                      style=label.style_label_down, size=size.small)
    else
        label.set_xy(filterModeLabel, bar_index, labelYPosition)
        label.set_text(filterModeLabel, labelText)
        label.set_color(filterModeLabel, labelColor)

plotshape(buySignal and not inPosition, "Buy Executed", shape.triangleup, location.bottom, color.green, size=size.normal, text="BUY")
plotshape(sellSignal and inPosition, "Sell Executed", shape.triangledown, location.top, color.red, size=size.normal, text="SELL")

// Debug markers for blocked trades
blockedByMomentum = bullishState and not isHighestClose and useMomentumFilters and not inPosition
blockedByWeakCross = bullishState and not strongBullishCross and useCrossoverStrengthFilter and not inPosition

plotshape(showDebugInfo ? blockedByMomentum : na, "Blocked by Momentum", shape.xcross, location.bottom, color.orange, size=size.tiny, text="M")
plotshape(showDebugInfo ? blockedByWeakCross : na, "Blocked by Weak Crossover", shape.xcross, location.bottom, color.purple, size=size.tiny, text="W")