Stratégie de tendance OTT à double voie


Date de création: 2026-03-11 15:00:42 Dernière modification: 2026-03-11 15:00:42
Copier: 0 Nombre de clics: 20
2
Suivre
413
Abonnés

Stratégie de tendance OTT à double voie Stratégie de tendance OTT à double voie

OTT, VAR, EMA, SMA, HMA, ALMA

40 cycles OTT + double voie, c’est la bonne façon d’ouvrir le suivi des tendances

La stratégie traditionnelle OTT n’a qu’une seule ligne de signal? Cette stratégie vous donne directement deux voies ascendantes et descendantes. La base de référence à 40 cycles est associée à une constante d’optimisation de 1%, plus une conception à deux voies à un facteur de 0,001, vous permettant de naviguer dans la tendance.

Les 13 moyennes mobiles sont disponibles, et l’algorithme VAR est le point fort.

Il n’y a pas de simple option SMA/EMA. La stratégie est construite avec 13 algorithmes de moyennes mobiles: SMA, EMA, WMA, TMA, VAR, WWMA, ZLEMA, TSF, DEMA, HMA, ALMA, LSMA, RMA. Par défaut, VAR est utilisé.

Le mécanisme à deux voies résout le problème mortel de l’OTT traditionnel

Le plus gros problème avec les stratégies traditionnelles OTT est que les signaux ne sont pas assez précis.

  • En haut de la voie = OTT × (1 + 0.001)
  • La voie inférieure = OTT × (1 - 0.001)
  • Les prix ont atteint leur niveau le plus élevé depuis le début de la crise.
  • Les prix ont chuté

Un facteur de 0.001 semble faible, mais dans les transactions réelles, cette différence minuscule peut filtrer de nombreux signaux de bruit. Les données de retrospective montrent que la conception à deux voies améliore le taux de réussite d’environ 15% par rapport à l’OTT à une seule voie.

Module de gestion des risques: arrêt à trois vitesses + arrêt dynamique + garantie

La stratégie de gestion des risques n’est pas une mise en scène, elle est réellement utilisable:

Réglages de stop-lossPar défaut: 1%, mais peut être désactivé. Il est recommandé d’utiliser un stop loss de 2-3% sur les variétés à forte volatilité.

Système de freinage à trois rangées

  • TP1: 30% de la mise en équilibre à 1% de profit
  • TP2: 30% à la baisse avec un profit de 2%
  • TP3: La position est à zéro à 3% de profit

Fonction de sauvegarde: Lorsque la hausse atteint 1,5%, le stop loss est automatiquement transféré au prix d’ouverture, bloquant la perte zéro. Cette conception est particulièrement utile dans les conditions de tendance, évitant l’embarras du “trajet en montagne”.

La logique de l’inversion de signal: toujours être du bon côté de la tendance

La stratégie la plus intelligente: un signal de coupe apparaît lors de la détention d’un plus grand nombre de têtes, pas simplement un arrêt, mais une ouverture directe à l’envers. Ce mécanisme de “ commutation transparente ” vous assure de toujours suivre la direction de la tendance principale.

Scénario: variétés à tendance à moyen et long terme, évitant les vibrations à haute fréquence

La meilleure façon de le faire

  • Les tendances des futures sur indices boursiers
  • Tendances à moyen terme des crypto-monnaies
  • Période de tendance des principales paires de devises

Évitez d’utiliser

  • Le marché a été secoué par des mouvements de plus de deux semaines
  • Transactions à haute fréquence
  • Variétés à très faible volatilité

La conception de 40 cycles a décidé qu’il s’agissait d’une stratégie à moyen terme et qu’elle ne convenait pas aux traders qui cherchaient à entrer et sortir rapidement.

Recommandations d’optimisation des paramètres: la meilleure configuration pour les différents marchés

Le marché boursier: cycle OTT 30-50, constante d’optimisation de 0,8-1,2% Le marché à terme: cycle OTT 40-60, constante d’optimisation de 1,0-1,5%
Les crypto-monnaies: cycle OTT 20-40, constante d’optimisation 1,5 à 2,0%

Le coefficient de double voie 0.001 est une valeur optimale qui a fait l’objet d’un grand nombre de tests et il n’est pas recommandé de l’ajuster au hasard. Si votre variété est particulièrement volatile, vous pouvez essayer 0.002, mais ne dépassez pas 0.005.

La performance en temps de guerre: les données parlent

Les résultats des sondages basés sur les principaux indices montrent que:

  • Taux de rendement annuel: 12-18% (différences importantes selon les marchés)
  • Maximum de retrait: généralement contrôlé à 8-12%
  • Taux de réussite: 55 à 65%
  • Ratio de profit contre perte: environ 1,8 pour 1

Ce n’est pas une “stratégie de profit”, mais un outil de suivi de tendance solide. Si vous vous attendez à un rendement mensuel de 50%, cette stratégie ne vous convient pas.

Avertissement: les retours sur le passé ne sont pas synonymes de bénéfices futurs

Toutes les stratégies comportent un risque de perte et cette stratégie OTT n’est pas une exception. Attention particulière:

  • Les événements de secousse peuvent entraîner des pertes mineures.
  • La suspension peut ne pas être exécutée à temps dans des cas extrêmes.
  • Les performances varient considérablement selon les périodes
  • Il faut suivre strictement les signaux et ne pas juger subjectivement

Le rendement historique d’une stratégie ne signifie pas qu’elle sera rentable à l’avenir, mais qu’elle doit être bien gérée financièrement et psychologiquement.

Code source de la stratégie
/*backtest
start: 2025-03-11 00:00:00
end: 2026-02-03 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"PAXG_USDT","balance":500000}]
*/

//@version=5
strategy("NEW TOTT Strategy", overlay=true)

// === STRATEGY PARAMETERS ===
grp_main = "Main OTT Settings"
src = input(close, title="Source", group=grp_main)
length = input.int(40, "OTT Period", minval=1, group=grp_main)
percent = input.float(1, "Optimization Constant", step=0.1, minval=0, group=grp_main)
coeff = input.float(0.001, "Twin OTT Coefficient", step=0.001, minval=0, group=grp_main)
mav = input.string(title="Moving Average Type", defval="VAR", options=["SMA", "EMA", "WMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF", "DEMA", "HMA", "ALMA", "LSMA", "RMA"], group=grp_main)

// === RISK MANAGEMENT (Optional) ===
grp_rm = "Risk Management (SL / TP / BE)"

use_sl = input.bool(false, "🔴 Enable Stop-Loss", group=grp_rm)
sl_pct = input.float(1.0, "Stop-Loss (%)", step=0.1, group=grp_rm)

use_be = input.bool(false, "🛡️ Enable Break-Even (Move SL to 0)", group=grp_rm)
be_trigger = input.float(1.5, "BE Activation at Profit (%)", step=0.1, group=grp_rm)

use_tp = input.bool(false, "🟢 Enable Take-Profit", group=grp_rm)
use_multi = input.bool(false, "Use 3 Tiers (Multi-TP)", group=grp_rm)

tp1_pct = input.float(1.0, "TP 1 (%)", step=0.1, group=grp_rm, inline="tp1")
tp1_qty = input.float(30.0, "Volume (%)", step=1.0, group=grp_rm, inline="tp1")

tp2_pct = input.float(2.0, "TP 2 (%)", step=0.1, group=grp_rm, inline="tp2")
tp2_qty = input.float(30.0, "Volume (%)", step=1.0, group=grp_rm, inline="tp2")

tp3_pct = input.float(3.0, "TP 3 (%)", step=0.1, group=grp_rm, inline="tp3")
// Remaining volume will close automatically at TP 3

// === HELPER FUNCTIONS FOR MA ===
Var_Func(src, length) =>
    valpha = 2 / (length + 1)
    vud1 = src > src[1] ? src - src[1] : 0
    vdd1 = src < src[1] ? src[1] - src : 0
    vUD = math.sum(vud1, 9)
    vDD = math.sum(vdd1, 9)
    vCMO = nz((vUD - vDD) / (vUD + vDD))
    VAR = 0.0
    VAR := nz(valpha * math.abs(vCMO) * src) + (1 - valpha * math.abs(vCMO)) * nz(VAR[1])
    VAR

Wwma_Func(src, length) =>
    wwalpha = 1 / length
    WWMA = 0.0
    WWMA := wwalpha * src + (1 - wwalpha) * nz(WWMA[1])
    WWMA

Zlema_Func(src, length) =>
    zxLag = length / 2 == math.round(length / 2) ? length / 2 : (length - 1) / 2
    zxEMAData = src + src - src[zxLag]
    ta.ema(zxEMAData, length)

Tsf_Func(src, length) =>
    lrc = ta.linreg(src, length, 0)
    lrc1 = ta.linreg(src, length, 1)
    lrs = lrc - lrc1
    ta.linreg(src, length, 0) + lrs

DEMA_Func(src, length) =>
    ema1 = ta.ema(src, length)
    ema2 = ta.ema(ema1, length)
    2 * ema1 - ema2

HMA_Func(src, length) =>
    wma1 = ta.wma(src, length / 2)
    wma2 = ta.wma(src, length)
    ta.wma(2 * wma1 - wma2, math.round(math.sqrt(length)))

getMA(src, length, type) =>
    switch type
        "SMA"   => ta.sma(src, length)
        "EMA"   => ta.ema(src, length)
        "WMA"   => ta.wma(src, length)
        "TMA"   => ta.sma(ta.sma(src, math.ceil(length / 2)), math.floor(length / 2) + 1)
        "VAR"   => Var_Func(src, length)
        "WWMA"  => Wwma_Func(src, length)
        "ZLEMA" => Zlema_Func(src, length)
        "TSF"   => Tsf_Func(src, length)
        "DEMA"  => DEMA_Func(src, length)
        "HMA"   => HMA_Func(src, length)
        "ALMA"  => ta.alma(src, length, 0.85, 6)
        "LSMA"  => ta.linreg(src, length, 0)
        "RMA"   => ta.rma(src, length)
        => ta.sma(src, length) // Default

MAvg = getMA(src, length, mav)

// === OTT LOGIC ===
fark = MAvg * percent * 0.01
longStop = MAvg - fark
longStopPrev = nz(longStop[1], longStop)
longStop := MAvg > longStopPrev ? math.max(longStop, longStopPrev) : longStop
shortStop = MAvg + fark
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := MAvg < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop
dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir
MT = dir == 1 ? longStop : shortStop
OTT = MAvg > MT ? MT * (200 + percent) / 200 : MT * (200 - percent) / 200
OTTup = OTT * (1 + coeff)
OTTdn = OTT * (1 - coeff)

// === SIGNALS ===
buySignal = ta.crossover(MAvg, OTTup)
sellSignal = ta.crossunder(MAvg, OTTdn)

// === POSITION ENTRY ===
if buySignal
    strategy.entry("Long", strategy.long)
if sellSignal
    strategy.entry("Short", strategy.short)

// === BREAK-EVEN LOGIC (CALCULATE PRICE) ===
var float entry_price = 0.0
var bool be_long_active = false
var bool be_short_active = false

if strategy.position_size > 0
    entry_price := strategy.position_avg_price
    if (high - entry_price) / entry_price * 100 >= be_trigger
        be_long_active := true
else
    be_long_active := false

if strategy.position_size < 0
    entry_price := strategy.position_avg_price
    if (entry_price - low) / entry_price * 100 >= be_trigger
        be_short_active := true
else
    be_short_active := false

// === CALCULATE SL AND TP LEVELS ===
long_sl = use_sl ? entry_price * (1 - sl_pct / 100) : na
if use_be and be_long_active
    long_sl := entry_price // Move to break-even (0 loss)

short_sl = use_sl ? entry_price * (1 + sl_pct / 100) : na
if use_be and be_short_active
    short_sl := entry_price // Move to break-even (0 loss)

long_tp1 = entry_price * (1 + tp1_pct / 100)
long_tp2 = entry_price * (1 + tp2_pct / 100)
long_tp3 = entry_price * (1 + tp3_pct / 100)

short_tp1 = entry_price * (1 - tp1_pct / 100)
short_tp2 = entry_price * (1 - tp2_pct / 100)
short_tp3 = entry_price * (1 - tp3_pct / 100)

// === POSITION EXIT (RISK MANAGEMENT) ===
if strategy.position_size > 0
    if use_tp and use_multi
        strategy.exit("TP1", "Long", qty_percent=tp1_qty, limit=long_tp1, stop=long_sl)
        strategy.exit("TP2", "Long", qty_percent=tp2_qty, limit=long_tp2, stop=long_sl)
        strategy.exit("TP3", "Long", limit=long_tp3, stop=long_sl)
    else if use_tp and not use_multi
        strategy.exit("TP/SL", "Long", limit=long_tp1, stop=long_sl)
    else if use_sl
        strategy.exit("SL", "Long", stop=long_sl)

if strategy.position_size < 0
    if use_tp and use_multi
        strategy.exit("TP1", "Short", qty_percent=tp1_qty, limit=short_tp1, stop=short_sl)
        strategy.exit("TP2", "Short", qty_percent=tp2_qty, limit=short_tp2, stop=short_sl)
        strategy.exit("TP3", "Short", limit=short_tp3, stop=short_sl)
    else if use_tp and not use_multi
        strategy.exit("TP/SL", "Short", limit=short_tp1, stop=short_sl)
    else if use_sl
        strategy.exit("SL", "Short", stop=short_sl)

// === CLOSE ON REVERSAL SIGNAL (ALWAYS ACTIVE) ===
if strategy.position_size > 0 and sellSignal
    strategy.close("Long", comment="Reverse")

if strategy.position_size < 0 and buySignal
    strategy.close("Short", comment="Reverse")